在Jupyter笔记本中使用Scrapy /直接访问响应

Dus*_*els 5 python scrapy web-scraping python-3.x jupyter-notebook

我想直接response在Jupyter笔记本中与Scrapy 对象进行交互,就像通过scrapy shell "some-url"在命令行中输入Scrapy Shell之后一样。

在笔记本中,我可以运行以下命令而不会出现错误:

import scrapy
request = scrapy.Request("some-url")
response = scrapy.http.Response("some-url")
Run Code Online (Sandbox Code Playgroud)

但是requestresponse两者都具有空的身体属性。根据文档

通常,Request对象是在Spider中生成的,并在整个系统中传递,直到它们到达Downloader,该Downloader执行请求并返回Response对象,该Response对象返回到发出请求的Spider中。

似乎我缺少“下载程序”执行请求对象并返回响应对象的步骤。我不知道这是如何工作的。

有人知道您scrapy shell "some-url"在命令行中运行时会发生什么,以便我可以在Jupyter笔记本中复制这些步骤吗?

注意此处发布了一个非常类似的问题,给出的答案对我有用,但是使用其他第三方“请求”库似乎是不必要/不理想的。

小智 7

你可以这样处理问题

import requests
from scrapy.http import TextResponse

res = requests.get('some-url')
response = TextResponse(res.url, body=res.text, encoding='utf-8')
Run Code Online (Sandbox Code Playgroud)