Scrapy中实现不同start_urls的不同解析函数

本文介绍了Scrapy中不同start_urls的不同解析函数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

Scrapy 可以为每个 start_url 设置不同的解析函数吗?

这是一段伪代码:

start_urls = [

    "http://111sssssssss.com",

    "http://222sssssssssssss.com",

    "http://333sssssssssss.com",

    "http://444sssssssss.com",

]

def parse_1():

    '''some code, this function will crawl http://111sssssssss.com'''

def parse_2():

    '''some code, this function will crawl http://222sssssssssssss.com'''

有没有办法做到这一点?

推荐答案:

您可以覆盖/实现 parse_start_url 函数并在那里调用 parse_1 或 parse_2 当 response.url 符合您的条件时(在本例中为正确的 URL).

You can override / implement the parse_start_url function and there call parse_1 or parse_2 when the response.url meets your criteria (in this case it is the right URL).

def parse_start_url(response):

    if response.url == 'http://111sssssssss.com':

        parse_1(response)

    if response.url == 'http://222sssssssssssss.com':

        parse_2(response)

有关 parse_start_url() 的更多信息,请阅读 文档.

parse_start_url (response) 这方法;此方法作用是当 start_url 返回 responses 时调用这个方法。官方解释如下:

Scrapy中实现不同start_urls的不同解析函数

下面是我找的其它几个方法:

1)在BaseSpider中,有一个可以在子类中重写的__init__方法。在这里设置start_url和允许的\u domains变量的声明。如果您在运行spider之前已经记住了一个url列表,那么您可以在这里动态地插入它们。在

例如,在我构建的一些spider中,我从MongoDB中引入预先格式化的URL组,并通过一次大容量插入将它们插入start_URL列表中。在

2)这可能有点棘手,但您可以通过查看响应对象(response.url)轻松地看到已爬网的URL。您应该能够检查url是否包含“google”、“bing”或“yahoo”,然后对该类型的url使用预先指定的选择器