соскабливание нескольких страниц с помощью scrapy

Я пытаюсь использовать scrapy для очистки веб-сайта с несколькими страницами информации.

мой код:

from scrapy.spider import BaseSpider from scrapy.selector import Selector from tcgplayer1.items import Tcgplayer1Item class MySpider(BaseSpider): name = "tcg" allowed_domains = ["http://www.tcgplayer.com/"] start_urls = ["http://store.tcgplayer.com/magic/journey-into-nyx?PageNumber=1"] def parse(self, response): hxs = Selector(response) titles = hxs.xpath("//div[@class='magicCard']") for title in titles: item = Tcgplayer1Item() item["cardname"] = title.xpath(".//li[@class='cardName']/a/text()").extract()[0] vendor = title.xpath(".//tr[@class='vendor ']") item["price"] = vendor.xpath("normalize-space(.//td[@class='price']/text())").extract() item["quantity"] = vendor.xpath("normalize-space(.//td[@class='quantity']/text())").extract() item["shipping"] = vendor.xpath("normalize-space(.//span[@class='shippingAmount']/text())").extract() item["condition"] = vendor.xpath("normalize-space(.//td[@class='condition']/a/text())").extract() item["vendors"] = vendor.xpath("normalize-space(.//td[@class='seller']/a/text())").extract() yield item 

Я пытаюсь очистить все страницы, пока не дойдет до конца страниц … иногда будет больше страниц, чем других, поэтому трудно сказать, где именно заканчиваются номера страниц.

  • Как интегрировать функцию scrapyjs в проект Scrapy
  • Django или аналогичный для составных первичных ключей
  • Как получить Github Webhooks в Python
  • Scrapy дает URLError: <urlopen error timed out>
  • Лучший способ интегрировать код Python с HTML
  • Как получить значения параметров запроса get в колбе?
  • Как я могу получить весь текст с сайта Scrapy?
  • WebScraping с BeautifulSoup или LXML.HTML
  • One Solution collect form web for “соскабливание нескольких страниц с помощью scrapy”

    Идея состоит в том, чтобы pageNumber до pageNumber пор, пока не будет найдено никаких titles . Если на CloseSpider листе нет titles – исключите исключение CloseSpider для остановки паука:

     from scrapy.spider import BaseSpider from scrapy.selector import Selector from scrapy.exceptions import CloseSpider from scrapy.http import Request from tcgplayer1.items import Tcgplayer1Item URL = "http://store.tcgplayer.com/magic/journey-into-nyx?pageNumber=%d" class MySpider(BaseSpider): name = "tcg" allowed_domains = ["tcgplayer.com"] start_urls = [URL % 1] def __init__(self): self.page_number = 1 def parse(self, response): print self.page_number print "----------" sel = Selector(response) titles = sel.xpath("//div[@class='magicCard']") if not titles: raise CloseSpider('No more pages') for title in titles: item = Tcgplayer1Item() item["cardname"] = title.xpath(".//li[@class='cardName']/a/text()").extract()[0] vendor = title.xpath(".//tr[@class='vendor ']") item["price"] = vendor.xpath("normalize-space(.//td[@class='price']/text())").extract() item["quantity"] = vendor.xpath("normalize-space(.//td[@class='quantity']/text())").extract() item["shipping"] = vendor.xpath("normalize-space(.//span[@class='shippingAmount']/text())").extract() item["condition"] = vendor.xpath("normalize-space(.//td[@class='condition']/a/text())").extract() item["vendors"] = vendor.xpath("normalize-space(.//td[@class='seller']/a/text())").extract() yield item self.page_number += 1 yield Request(URL % self.page_number) 

    Этот конкретный паук будет бросать все 8 страниц данных, а затем останавливаться.

    Надеюсь, это поможет.

    Python - лучший язык программирования в мире.