用于解析start_urls的scrse方法scrapy

时间:2016-07-07 04:38:54

标签: python scrapy web-crawler

我希望scrapy抓取一些开始网址,然后根据规则关注这些网页中的链接。我的蜘蛛继承自CrawlSpider,并设置了start_urls和'规则'。但它似乎没有使用我定义的解析函数来解析start_urls。以下是代码:

<!-- language: lang-python --> 
class ZhihuSpider(CrawlSpider):

    start_urls = ["https://www.zhihu.com/topic/19778317/organize/entire",
        "https://www.zhihu.com/topic/19778287/organize/entire"]

    rules = (Rule(LinkExtractor(allow= (r'topic/\d+/organize/entire')), \
            process_request='request_tagInfoPage', callback = 'parse_tagPage'))

    # this is the parse_tagPage() scrapy should use to scrape
    def parse_tagPage():
        print("start scraping!") # Explicitly print to show that scraping starts
        # do_something

但是,控制台显示scrapy爬行了start_urls但没有打印出来。所以我很确定没有调用parse_tagPage()函数。即使scrapy显示网址已被抓取[scrapy] DEBUG: Crawled (200) <GET https://www.zhihu.com/topic/19778317/organize/entire> (referer: http://www.zhihu.com)

有关为什么会发生这种情况以及如何设置scrapy以使用parse_tagPage()的任何提示?

1 个答案:

答案 0 :(得分:0)

第1,CrawlSpider类使用默认的parse()方法来处理没有指定回调函数的所有请求,在我的情况下包括从start_urls发出的请求。此parse()方法仅应用规则来提取链接,并且根本不解析start_url的页面。这就是为什么我不能从start_url页面中删除任何东西。

第二,LinkExtractor以某种方式仅从start_urls页面中提取第一个链接。不幸的是,第一个链接是start_urls本身。因此scrapy内部复制防止机制阻止解析这些页面。这就是调用回调函数parse_tagPage()的原因。

我正在修复LinkExtractor。

相关问题