为什么用yield scrapy.Request()调用方法得不到数据,反倒用requests可以
时间: 2024-02-23 09:56:34 浏览: 107
`yield scrapy.Request()`是用于Scrapy框架中发送请求的,它不会直接返回数据。相反,它会将请求发送到Scrapy的引擎中,并且等待引擎返回响应。因此,如果您只使用 `yield scrapy.Request()` 调用方法,您将无法得到数据。
要获取数据,您需要在Scrapy的回调函数中处理响应。回调函数将在引擎接收到响应后自动调用。在回调函数中,您可以使用Scrapy提供的各种方法来提取数据。
另一方面,`requests`是一个Python库,用于发送HTTP请求并获取响应。它可以直接返回响应,因此您可以在使用`requests`发送请求后立即获取数据。
总结来说,`yield scrapy.Request()` 用于Scrapy框架中发送请求,需要在回调函数中处理响应获取数据,而 `requests` 是一个独立的Python库,可以直接返回响应。
相关问题
def start_requests(self): yield scrapy.Request( url=self.page_url, method="POST", headers=self.headers, body=self.body.format(self.tp[self.tp_index], self.page_current, self.start_date, self.end_date), callback=self.parse )
这是一个 Python Scrapy 爬虫程序的 start_requests 方法,用于发送 POST 请求。其中,self.page_url 是请求的 URL 地址,self.headers 是请求的头部信息,self.body 是请求的主体内容,包含格式化字符串,用于传入参数。最后一个参数 callback=self.parse 是请求完成后的回调函数,当请求完成后,会调用该函数进行数据处理。
敏感词信息有哪些?为什么page_url 是有内容的,但 def start_requests(self): yield scrapy.Request( url=self.page_url, method='POST', headers=self.headers, body=json.dumps({ "categoryCode": "ZcyAnnouncement11", "keyword": '', "pageNo": "1", "pageSize": "15", "procurementMethodCode": "1", "publishDateBegin": self.start_date, "publishDateEnd": self.end_date }), callback=self.parse, ) print(vars(start_requests))输出就没有内容,这是什么原因造成的
`start_requests` 是一个生成器函数,它使用 `yield` 语句返回一个 `scrapy.Request` 对象。当你调用 `print(vars(start_requests))` 时,实际上是打印了 `start_requests` 这个生成器函数的内部状态,而不是返回的 `scrapy.Request` 对象的内容。
要获取 `scrapy.Request` 对象的内容,你可以在 `parse` 方法中打印或处理。在 `parse` 方法中,你可以通过 `response` 对象获取请求的响应内容,例如使用 `response.text` 来获取响应的文本内容。
示例代码如下:
```python
def parse(self, response):
print(response.text) # 打印响应内容
# 其他处理逻辑
```
这样就可以获取到请求的响应内容。请确保在适当的地方调用了 `parse` 方法,并处理了请求的响应。
阅读全文