Scrapy履带提取器网址但错过了半回调

时间:2015-12-24 16:33:02

标签: python url web-crawler scrapy

我在尝试抓住这个URL时面临一个奇怪的问题:

为了执行抓取,我设计了这个:

class IkeaSpider(CrawlSpider) :

    name = "Ikea"
    allower_domains = ["http://www.ikea.com/"]
    start_urls = ["http://www.ikea.com/fr/fr/catalog/productsaz/8/"]

    rules = (
        Rule(SgmlLinkExtractor(allow=[r'.*/catalog/products/\d+']),
            callback='parse_page',
            follow=True),
            )

    logging.basicConfig(filename='example.log',level=logging.ERROR)

        def parse_page(self, response):

            for sel in response.xpath('//div[@class="rightContent"]'):

                 Blah blah blah

我从命令行启动蜘蛛,我可以看到网址通常被抓,但是,对于其中一些,回调不起作用(其中大约一半通常被废弃)。

由于此页面上有超过150个链接,因此可以解释为什么爬虫缺少回调(太多工作)。你们有些人对此有任何想法吗?

这是日志:

2015-12-25 09:02:55 [scrapy]信息:存储的csv feed(107项)in:test.csv 2015-12-25 09:02:55 [scrapy] INFO:倾倒Scrapy统计:  ' downloader / request_bytes':68554,  ' downloader / request_count':217,  ' downloader / request_method_count / GET':217,  ' downloader / response_bytes':4577452,  ' downloader / response_count':217,  ' downloader / response_status_count / 200':216,  ' downloader / response_status_count / 404':1,  ' dupefilter / filtered':107,  ' file_count':106,  ' file_status_count /已下载':106,  ' finish_reason':'已完成',  ' finish_time':datetime.datetime(2015,12,25,8,2,55,548350),  ' item_scraped_count':107,  ' log_count / DEBUG':433,  ' log_count / ERROR':2,  ' log_count / INFO':8,  ' log_count /警告':1,  ' request_depth_max':2,  ' response_received_count':217,  ' scheduler / dequeued':110,  ' scheduler / dequeued / memory':110,  ' scheduler / enqueued':110,  ' scheduler / enqueued / memory':110,  ' start_time&#39 ;: datetime.datetime(2015,12,25,8,2,28,656959) 2015-12-25 09:02:55 [scrapy]信息:蜘蛛关闭(完成

2 个答案:

答案 0 :(得分:0)

我已经阅读了很多关于我的问题的内容,显然,CrawlSpider类不够具体。它可能解释了为什么它错过了一些链接,由于某些原因我无法解释。 基本上,建议使用BaseSpiderstart_requestsmake_requests_from_url方法以更具体的方式完成工作。 我仍然不完全确定如何准确地做到这一点。这只是一个提示。

答案 1 :(得分:0)

我不喜欢这些自动蜘蛛课程。我通常只是完全按照自己的需要建造。

import scrapy

class IkeaSpider(scrapy.Spider) :

    name = "Ikea"
    allower_domains = ["http://www.ikea.com/"]
    start_urls = ["https://www.ikea.com/fr/fr/cat/produits-products/"]

    logging.basicConfig(filename='example.log',level=logging.ERROR)

        def parse(self, response):
            # You could also use a.vn-nav__link::attr(href) selector.
            for link in response.css('a:contains("/fr/cat/")::attr(href)').getall()
                yield scrapy.Request(link, callback=self.parse_category)

        def parse_category(self, response):
            # parse items or potential sub categories