2016-04-06 17 views
1

Ich habe Scrapy versucht und bin absolut begeistert. Eines der Dinge, mit denen ich es teste, scheint jedoch nicht zu funktionieren.Scrapy: '// select/option' XPath liefert keine Ergebnisse

Ich versuche, eine Seite (apple.com, zum Beispiel) zu kratzen und eine Liste der Tastaturoptionen zur Verfügung, mit dem einfachen XPath

//select/option 

Bei der Verwendung von Chrome Konsole speichern, unter der Website kommt zurück mit einem Array von Auswahlen, die ich leicht durchlaufen kann, aber wenn ich scrapy.response.xpath ('// select/option') über den Scraper oder über die Konsole, bekomme ich nichts zurück.

Mein Code für den Schaber ein bisschen wie das unten schaut (hrsg Einfachheit halber)

import scrapy 
from scrapy.linkextractors import LinkExtractor 
from lxml import html 
from apple.items import AppleItem 


class ApplekbSpider(scrapy.Spider): 

    name = 'applekb' 
    allowed_domains = ['apple.com'] 
    start_urls = ('http://www.apple.com/ae/shop/buy-mac/imac?product=MK482&step=config#',) 

    def parse(self, response): 
     for sel in response.xpath('//select/option'): 
      item = AppleItem() 
      item['country'] = sel.xpath('//span[@class="as-globalfooter-locale-name"]/text()').extract() 
      item['kb'] = sel.xpath('text()').extract() 
      item['code'] = sel.xpath('@value').extract() 
      yield item 

Wie Sie sehen Ich versuche, den Code und Text für jede Option zu bekommen, zusammen mit der Website " Gebietsschema Name "(Land).

Als Randnotiz habe ich mit CSS-Selektoren vergeblich versucht. Weiß jemand, was ich vermisse?

Vielen Dank im Voraus, A

Antwort

0

Das Problem ist die Verwendung von JavaScript auf der Webseite. Wenn Sie die URL in Chrome öffnen, wird der JavaScript-Code vom Browser ausgeführt, der das Dropdown-Menü mit den Tastaturoptionen generiert.

Sie sollten einen Headless-Browser (PhantomJS usw.) auschecken, der die JavaScript-Ausführung ausführt. Mit Splash bietet Scrapy seinen eigenen Headless-Browser an, der einfach über die scrapyjs.SplashMiddleware Downloader Middleware integriert werden kann.

https://github.com/scrapy-plugins/scrapy-splash

0

Die Ursache, dass //select/option den nichts finden, ist, dass es keinen select Tag in der Website ist, wenn Sie es mit scrapy laden. Das liegt daran, dass JavaScript nicht ausgeführt wird und das Dropdown-Feld nicht mit Werten gefüllt ist.

Versuchen Sie, JavaScript aus den Einstellungen der Chrome-Entwicklertools zu deaktivieren, und Sie sollten dieselbe leere Website sehen, die scrapy sieht, wenn Sie die Seite scrappen.

+0

Aha! Genau das sehe ich in Scrapy! Danke für den Tipp. Nun, gibt es irgendeinen Weg für Scrapy, um das Richtige zu bekommen? Oder sollte ich zu Selenium wechseln? – Antonio

Verwandte Themen