我有以下代码:
#FirstSpider.py
class FirstSpider(scrapy.Spider):
name = 'first'
start_urls = ['https://www.basesite.com']
next_urls = []
def parse(self, response):
for url in response.css('bunch > of > css > here'):
self.next_urls.append(url.css('more > css > here'))
l = Loader(item=Item(), selector=url.css('more > css'))
l.add_css('add', 'more > css')
...
...
yield l.load_item()
for url in self.next_urls:
new_urls = self.start_urls[0] + url
yield scrapy.Request(new_urls, callback=SecondSpider.parse_url)
#SecondSpider.py
class SecondSpider(scrapy.Spider):
name = 'second'
start_urls = ['https://www.basesite.com']
def parse_url(self):
"""Parse team data."""
return self
# self is a HtmlResponse not a 'response' object
def parse(self, response):
"""Parse all."""
summary = self.parse_url(response)
return summary
#ThirdSpider.py
class ThirdSpider(scrapy.Spider):
# take links from second spider, continue:
我希望能够将Spider 1中抓取的url传递给Spider 2(在不同的脚本中)。我很好奇为什么当我这样做时,'响应'是HtmlResponse
而不是response
对象(当做与Spider 1在同一类中的方法类似的事情时;我不知道'有这个问题)
我在这里缺少什么?我如何将原始响应传递给第二个蜘蛛? (从第二个到第三个等等。?)
答案 0 :(得分:0)
您可以将Redis用作所有蜘蛛https://github.com/rmax/scrapy-redis
之间的共享资源运行所有N个蜘蛛(不要在空闲状态下关闭),因此每个蜘蛛都将连接到相同的Redis并从那里等待任务(网址,请求标头);
作为副作用从X_spider向具有特定键(Y_spider名称)的Redis推送任务数据。
答案 1 :(得分:0)
使用继承怎么样? “解析”函数名称应不同。 如果您的第一个蜘蛛继承自第二个蜘蛛,它将能够将回调设置为self.parse_function_spider2