为了账号安全,请及时绑定邮箱和手机立即绑定

在 parse() 方法中为每个 start_url 传递附加信息

在 parse() 方法中为每个 start_url 传递附加信息

GCT1015 2022-06-28 16:24:57
我正在编写一个爬虫蜘蛛,我想在其中parse()为每个start_url.我已经从列表中创建了一个映射,start_urls并且additional_data我在方法中使用了该映射。class ExampleSpider(scrapy.Spider):    name = 'example'    allowed_domains = ['alldomain.com']    start_urls = ['http://a.com/', 'http://b.com/', 'http://c.com/']    additional_data = [x,y,z]    dict_map = dict(zip(start_urls, additional_data))    def parse(self, response):        url_first_additional_data = dict_map[response.url]        # do other processing有没有其他更好的方法来做同样的事情,我不确定 response.url 是否也会有请求 url,如果我有大量的附加数据,地图会占用大量内存吗?
查看完整描述

1 回答

?
慕的地10843

TA贡献1785条经验 获得超8个赞

如果您想将其他参数传递给解析函数,您可以通过覆盖默认的启动请求方法来实现。start_urls如果您想使用方法,您应该将您的 init 方法重命名为其他名称start_requests,因为我将其重命名为 starting_urls


def start_requests(self):

    for url in self.starting_urls:

        yield Request(

            url,

            cb_kwargs={'additional_argument': dict_map[url]}

        )


def parse(self, response, additional_argument):

    # Here you can use that additional_argument

    pass

同样为了在解析中获取 url,Response 对象中也有原始请求对象。所以你可以通过response.request.url


def parse(self, response):

    additional_argument = self.dict_map[response.request.url]

请注意,我将starting_url 重命名为start_urls


查看完整回答
反对 回复 2022-06-28
  • 1 回答
  • 0 关注
  • 140 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号