繁体   English   中英

如何在没有回调的情况下从scrapy.Request获得响应?

[英]How to get response from scrapy.Request without callback?

我想发送一个请求并等待来自服务器的响应以执行依赖于动作的操作。 我写以下

resp = yield scrapy.Request(*kwargs)

并得到 None 。 在文档中我发现需要使用 call_back 函数,但是这个函数在处理下一个命令后调用。 如何等待服务器的响应?

我找到了具有inline_requests装饰器的inline_requests模块。

它解决了我的问题。

这不是应该如何使用scrapy,因为等待响应与使用回调相同。 如果您需要继续处理先前的响应和新的响应,您可以始终传递并继续传递meta参数上的响应。

现在,为了使这有时更具可读性,您还可以使用scrapy-inline-requests ,它与之前在引擎盖下解释的完全相同,因为它不会停止scrapy,而是按顺序发出以下请求(与之后执行请求相同)另一个带回调)。

如果使用scrapy-inline-requests请小心使方法仅作为生成器,并在处理新的内联请求时发送新的请求或项目。

这不是这个问题的答案,而是如何获取响应对象并使用 xpath 解析它的替代方法。 这里我使用了请求、bs4 和 lxml 库。

import requests
from bs4 import BeautifulSoup
from lxml import etree

url = 'your_url'
soup = BeautifulSoup(requests.get(url).text, 'html.parser')
dom = etree.HTML(str(soup))
target_data = dom.xpath("//div......target path......")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM