【发布时间】:2021-02-19 10:49:29
【问题描述】:
def start_requests(self):
db = SeedUserGenerator()
result = db.selectSeedUsers()
db.closeDB()
urls = []
for name in result:
urls.append(self.user_info_url.format(name))
for url in urls:
yield Request(url=url, callback=self.parse_user, dont_filter=False, priority=10)
print('fin')
def parse_user(self, response):
.........ignore some code here...........
yield Request(url=next_url, priority=20, callback=self.parse_info)
def parse_info(self, response):
.........ignore some code here...........
yield Request(url=next_url, priority=30, callback=self.parse_user)
程序运行如下:
- 来自
start_requests的多个请求产生,并且函数start_requests似乎在没有输出字符串fin的情况下暂停。 - 一个响应来了,函数
parse_useryield了另一个Request,但是函数start_requests中剩下的Requests直到响应处理完才能yield,这里yield操作形成了一个环。
好像是
同步:在从start_requests发送一个Request并处理它的响应之前,其他Request不能yield?
这是否意味着scrapy 永远无法在函数start_requests 中产生剩余的请求?
我怎样才能让scrapy先跑完start_requests?
我是 python 和 scrapy 的新手。 scrapy 可以同时处理响应和产生请求吗?
顺便说一下,我用的是 Python3.6 和 Scrapy1.5.1 Twisted 20.3.0
【问题讨论】:
标签: scrapy