2016-05-13 13 views
1

Warum bekomme ich den Text nicht? Ich habe dieses Skript auf vielen Websites verwendet und bin nie auf dieses Problem gestoßen.Text nicht sichtbar Python

import scrapy.selector 
from scrapy.spiders import CrawlSpider, Rule 
from scrapy.linkextractors import LinkExtractor 
from Prijsvergelijking_Final.items import PrijsvergelijkingFinalItem 

vendors = [] 
for line in open("vendors.txt", "r"): 
    vendors.append(line.strip("\n\-")) 
e = {} 
for vendor in vendors: 
    e[vendor] = True 

class ArtcrafttvSpider(CrawlSpider): 
    name = "ARTCRAFTTV" 
    allowed_domains = ["artencraft.be"] 
    start_urls = ["https://www.artencraft.be/nl/beeld-en-geluid/televisie"] 
    rules = (Rule(LinkExtractor(allow=(), restrict_xpaths=('//li[@class="next"]',)), callback = "parse_start_url",follow = True),)  
    def parse_start_url(self, response): 
     products = response.xpath("//ul[@class='product-overview list']/li") 
     for product in products: 
      item = PrijsvergelijkingFinalItem() 
      item["Product_a"] = product.xpath(".//a/span/h3/text()").extract_first().strip().replace("-","") 
      item["Product_price"] = product.xpath(".//a/h4/text()").extract_first() 
      for word in item['Product_a'].split(" "): 
       if word in e: 
        item['item_vendor'] = word    
      yield item 

Webseite Code:

HTML

Ergebnisse nach Skript ausgeführt wird:

Results

Irgendwelche Vorschläge, wie ich dieses Problem lösen kann?

+0

Sie über den Preis reden? – Tony

+0

Ja, ich spreche über die Preise – Wouter

+0

@Wouter: Versuchen Sie einen anderen XPath für den Preis, wie '.// a/h4/(/ text()) [last()]' – Blender

Antwort

1

Kurze Antwort wäre:

nicht immer davon ausgehen, dass die Seitenstruktur werden gleiche wie das, was angezeigt wird, auf:

Sie einen falschen XPath Preisfeldwert

Detaillierte haben Bildschirm. es ist nicht immer WYSIWYG

aus irgendeinem Grund, den ich sehe, dass inspect element (Firefox) als Kind von //a/h4 Tag einen Preis-Wert zeigt aber, wenn Sie die Seite Quelle analysieren, die heruntergeladen wird, werden Sie, dass der Preis Wert sehen , die auf Seite aber ist es kein Kind von //a/h4 Tag, aber es ist ein Kind von //a Tag so //a/text() würden Sie den gewünschten Wert

0

Es scheint, dass die Preise von Javascript oder etwas geladen werden - wenn ich die Seite von Python herunterziehe, bekomme ich nirgends Preise.

Hier gibt es zwei mögliche Dinge: Erstens, die Preise könnten mit Javascript geladen werden. Wenn das der Fall ist, empfehle ich, diese Antwort zu betrachten: https://stackoverflow.com/a/26440563/629110 und die Bibliothek dryscape. Wenn die Preise aufgrund Ihres Benutzeragenten blockiert werden, können Sie versuchen, Ihren Benutzeragenten in einen echten Browser zu ändern: https://stackoverflow.com/a/10606260/629110.

Versuchen Sie zuerst den Benutzeragenten (da es einfacher ist).