首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Scrapy默认是异步的吗?

Scrapy默认是异步的吗?
EN

Stack Overflow用户
提问于 2020-05-07 19:31:56
回答 2查看 1.5K关注 0票数 2

我最近在我的项目中运行了一个爬虫,但我觉得它是在等待一个页面完成后才移动到另一个页面。如果scrapy的性质是正确的,它会移动到另一个页面,直到收到前一个页面的响应。向下滚动后,我看到使用了async def,这意味着通过添加in this page显式地使该方法成为异步方法。如果我不把async-await放在我的爬虫里,它们不会变成异步的吗?它们是否等待接收到响应?如果我有任何误解,请让我知道,并提前谢谢你。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-05-07 19:43:54

Scrapy默认情况下是异步的。

使用Scrapy2.0中引入的coroutine syntax,在使用Twisted Deferreds时允许更简单的语法,这在大多数用例中是不需要的,因为Scrapy使其使用尽可能透明。

爬行器看起来同步的唯一原因是,您只从前一个请求的回调中生成了一个新的Request对象。如果您从start_requests产生多个请求,或者在start_urls中有多个URL,这些请求将根据您的并发设置进行异步处理(Scrapy的默认值是每个域8个并发请求,总共16个)。

票数 4
EN

Stack Overflow用户

发布于 2020-05-09 03:18:26

是的,正如@Gallaecio所说,scrapy默认是异步的。我想补充的是,我可以使代码的同步部分异步。这样一来,

同步请求

代码语言:javascript
运行
复制
def parse(self, response, current_page):
    url = 'https://example.com/search?page={}'
    # do some stuff
    self.current_page += 1
    yield Request(url.format(current_page), call_back=self.parse)

异步请求

代码语言:javascript
运行
复制
def parse(self, response):
    url = 'https://example.com/something?page={}'
    # do some stuff
    for page in range(self.total_pages): # variables are self explainable
        yield Requests(url.format(page), callback=self.parse)
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61656722

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档