2016-07-27 11 views
0

Ich versuche Scrapy auf einer Website zu verwenden, die ich nicht kenne die URL-Struktur von.Bedingte URL-Scraping mit Scrapy

Ich möchte:

  • nur Extrahieren von Daten aus Seiten, die Xpath "// div [@ class =" Produkt-view "]" enthalten.

  • Extrakt drucken (in CSV) die URL, den Namen und den Preis XPaths

Wenn ich das unten Skript ausführen, alles, was ich bekommen, ist eine zufällige Liste von URLs

scrapy crawl dmoz>test.txt

from scrapy.selector import HtmlXPathSelector 
from scrapy.spider import BaseSpider 
from scrapy.http import Request 

DOMAIN = 'site.com' 
URL = 'http://%s' % DOMAIN 

class MySpider(BaseSpider): 
    name = "dmoz" 
    allowed_domains = [DOMAIN] 
    start_urls = [ 
     URL 
    ] 

    def parse(self, response): 
     for url in response.xpath('//a/@href').extract(): 
      if not (url.startswith('http://') or url.startswith('https://')): 
       url= URL + url 
      if response.xpath('//div[@class="product-view"]'): 
       url = response.extract() 
       name = response.xpath('//div[@class="product-name"]/h1/text()').extract() 
       price = response.xpath('//span[@class="product_price_details"]/text()').extract() 
      yield Request(url, callback=self.parse) 
      print url 

Antwort

1

Was Sie hier suchen, ist für scrapy.spiders.Crawlspider.

Aber Sie haben es fast mit Ihrem eigenen Ansatz. Hier ist die feste Version.

from scrapy.linkextractors import LinkExtractor 
def parse(self, response): 
    # parse this page 
    if response.xpath('//div[@class="product-view"]'): 
     item = dict() 
     item['url'] = response.url 
     item['name'] = response.xpath('//div[@class="product-name"]/h1/text()').extract_first() 
     item['price'] = response.xpath('//span[@class="product_price_details"]/text()').extract_first() 
     yield item # return an item with your data 
    # other pages 
    le = LinkExtractor() # linkextractor is smarter than xpath '//a/@href' 
    for link in le.extract_links(response): 
     yield Request(link.url) # default callback is already self.parse 

Jetzt können Sie einfach laufen scrapy crawl myspider -o results.csv und scrapy ausgibt csv Ihren Artikel. Behalten Sie das Protokoll und das Statistik-Bit besonders am Ende im Auge. So wissen Sie, ob etwas schiefgelaufen ist.