💡
原文中文,约2700字,阅读约需7分钟。
📝
内容提要
在Scrapy中,可以在pipelines.py中定义数据处理流程,但有些程序员滥用此功能。为避免直接请求外部URL,可以使用“data:,”作为假请求,以快速进入parse方法。此外,使用asyncio实现定时请求时,需先发起一次请求才能使用async,通过假请求可实现非阻塞的定时请求。
🎯
关键要点
-
在Scrapy中,可以在pipelines.py中定义数据处理流程,但有些程序员滥用此功能。
-
为了避免直接请求外部URL,可以使用'data:,'作为假请求,以快速进入parse方法。
-
一些程序员通过在start_requests中请求一个URL来读取数据库中的数据,这种做法不够优雅。
-
发送假请求可以让Scrapy看起来发起了HTTP请求,但实际上直接跳过。
-
假请求的另一个应用场景是实现非阻塞的定时请求。
-
Scrapy支持asyncio,但start_requests方法不能使用async定义,需要先发起一次请求。
-
使用假请求可以解决asyncio的使用限制,实现定时请求而不阻塞子请求。
❓
延伸问答
在Scrapy中如何定义数据处理流程?
可以在pipelines.py中定义数据处理流程,但需注意避免滥用此功能。
什么是Scrapy中的假请求?
假请求是指使用'data:,'作为URL,快速进入parse方法而不实际发起HTTP请求。
如何使用假请求实现非阻塞的定时请求?
可以在start_requests中发送假请求,然后在callback中使用asyncio实现定时请求。
Scrapy中为什么不能在start_requests方法中使用async?
因为start_requests方法必须至少发起一次请求,才能进入callback后使用async。
使用假请求有什么好处?
使用假请求可以避免直接请求外部URL,同时实现非阻塞的定时请求。
如何避免Scrapy爬虫被阻塞?
可以使用asyncio和假请求结合,避免在定时请求中使用time.sleep。
➡️