我正在编写一个爬虫蜘蛛,我想在其中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
添加回答
举报
0/150
提交
取消