2016-12-17 4 views
0

Ich versuche, den Wert von Javascript zu erhalten, die Sie unten sehen können.Scrapy Erhalten Sie den Wert von JavaScript-Attribut

<script type="text/javascript" src="//media.flixfacts.com/js/loader.js" data-flix-distributor="7148" data-flix-language="tr" data-flix-brand="lg" data-flix-ean="8806087586213" data-flix-sku="1162559" data-flix-inpage="flix-inpage"></script> 

Ich versuchte dies, aber es hat nicht funktioniert.

ean = response.xpath('/html/head/script[25]/@data-flix-ean').extract_first() 
+0

Wo ist die Seite, die Sie versuchen zu kratzen? Wir haben keine Möglichkeit zu wissen, was mit Ihrem XPath nicht stimmt, wenn die Seitenquelle nicht angezeigt wird. – Chris

+0

Ich versuche nur, ein Attribut von diesem Tag zu bekommen. Ich bekomme dieses Tag bereits. Aber ich get Daten-flix-ean Attribut benötigen –

+0

... was ist die URL der Seite, die Sie versuchen zu kratzen. Wie die URL dieser Seite ist http://stackoverflow.com/questions/41198101/scrapy-get-value-of-javascript-attribute – YPCrumble

Antwort

1

Im Quellcode für die Seite Sie das folgende Stück Code finden:

<script> 
var sFlix = document.createElement('script'); 
    sFlix.setAttribute('type', 'text/javascript'); 
    sFlix.setAttribute('src', '//media.flixfacts.com/js/loader.js'); 
    sFlix.setAttribute('data-flix-distributor', '7148'); 
    sFlix.setAttribute('data-flix-language', 'tr'); 
    sFlix.setAttribute('data-flix-brand', Storm.DataLayer.data.user.productBrand.toLowerCase()); 
    sFlix.setAttribute('data-flix-ean', Storm.DataLayer.data.user.ean); 
    sFlix.setAttribute('data-flix-sku', Storm.DataLayer.data.user.productId); 
    sFlix.setAttribute('data-flix-inpage', 'flix-inpage'); 
    document.getElementsByTagName('head')[0].appendChild(sFlix); 
    setTimeout(function(){ $(document).trigger('fee.fgrid_refresh'); }, 2000); 
    setTimeout(function(){ $(document).trigger('fee.fgrid_refresh'); }, 4000); 
    setTimeout(function(){ $(document).trigger('fee.fgrid_refresh'); }, 6000); 
    setTimeout(function(){ $(document).trigger('fee.fgrid_refresh'); }, 20000); 
    $('#flix-inpage').load(function() { 
    $(document).trigger('fee.fgrid_refresh'); 
    }); 
    setTimeout(function(){ $(document).trigger('fee.fgrid_refresh'); }, 40000); 
</script> 

was bedeutet den script Tag, das Sie suchen ist nicht wirklich in der empfangenen Antwort, es dynamisch erstellt werden . Um die benötigten Informationen zu extrahieren, sollten Sie die Quelle des data-flix-ean Attribut abfragen, die Storm.DataLayer Objekt:

response.xpath('/html/head/script/text()').re(r"Storm.DataLayer.put\('ean','(.*)'\);")

+0

Vielen Dank, es hat funktioniert –

Verwandte Themen