Scrapy页面和Scraped项目之间的Scrapy蜘蛛差异

时间:2013-04-11 20:03:43

标签: python web-crawler scrapy

我正在编写一个Scrapy CrawlSpider,它在第一页上读取AD列表,获取一些信息,如列表和AD网址,然后向每个AD网址发出请求以获取其详细信息。

它在测试环境中工作和分页显然很好,但今天试图完成一次我意识到在日志中:

抓取 3852 页面(每分钟228页),抓取 256 项目(15件/分钟)

我不理解Crawled pages和Scraped items之间存在巨大差异的原因。任何人都可以帮我弄清楚这些物品丢失的地方?

我的蜘蛛代码:

class MySpider(CrawlSpider):
    name = "myspider"
    allowed_domains = ["myspider.com", "myspider.co"]
    start_urls = [
        "http://www.myspider.com/offers/myCity/typeOfAd/?search=fast",
    ]

    #Pagination
    rules = (
        Rule (
            SgmlLinkExtractor()
           , callback='parse_start_url', follow= True),
    )

    #1st page
    def parse_start_url(self, response):

        hxs = HtmlXPathSelector(response)

        next_page = hxs.select("//a[@class='pagNext']/@href").extract()
        offers = hxs.select("//div[@class='hlist']")

        for offer in offers:
            myItem = myItem()

            myItem['url'] = offer.select('.//span[@class="location"]/a/@href').extract()[0]
            myItem['thumb'] = oferta.select('.//div[@class="itemFoto"]/div/a/img/@src').extract()[0]

            request = Request(myItem['url'], callback = self.second_page)
            request.meta['myItem'] = myItem

            yield request

        if next_page:
            yield Request(next_page[0], callback=self.parse_start_url)


    def second_page(self,response):
        myItem = response.meta['myItem']

        loader = myItemLoader(item=myItem, response=response)

        loader.add_xpath('address', '//span[@itemprop="streetAddress"]/text()') 

        return loader.load_item()

1 个答案:

答案 0 :(得分:5)

假设您转到第一个start_urls(实际上您只有一个),并且在此页面上只有一个锚链接(<a>)。因此,您的蜘蛛会抓取此链接中的href网址,您可以控制回调parse_start_url。在这个页面内你有5000个div和一个hlist类。我们假设这些后续URL中的所有5000个都返回404,未找到。

在这种情况下,您将拥有:

  • 抓取的网页:5001
  • 物品刮:0

让我们再看一个例子:在你的开始网址页面上你有5000个锚点,但这些页面中没有一个(如零)有任何具有类参数hlist的div。

在这种情况下,您将拥有:

  • 抓取的网页:5001
  • 物品刮:0

你的答案在于DEBUG日志输出。