python - Scrapy 的 HtmlResponse 不从 URL 检索数据

标签 python web-scraping scrapy

这些是在 Ipython 中运行的代码。

from scrapy.selector import Selector
from scrapy.http import HtmlResponse

response = HtmlResponse(url='https://en.wikipedia.org/wiki/Pan_American_Games')
datas = Selector(response=response).xpath('//div[@class="thumb tleft"]')

当我执行response时我得到了<200 https://en.wikipedia.org/wiki/Pan_American_Games> 但是当我执行reponse.body时我得到了'' (空)

看起来像HtmlResponse不检索该页面的任何 HTML 信息。

有人知道如何解决这个问题吗?

仅供引用,如果我跑 $ scrapy shell https://en.wikipedia.org/wiki/Pan_American_Games在命令提示符下,响应不会为 NULL。 我不想做scrapy shell url因为我将在 URL 列表中运行 for 循环。

谢谢

最佳答案

问题是您没有在这里编写蜘蛛。可以这么说,HtmlResponse 不会从互联网检索任何数据。您拥有的只是一个仅包含您提供的 url 属性的响应对象。

这是对 scrapy 架构的官方描述:http://doc.scrapy.org/en/latest/topics/architecture.html?highlight=scrapy%20architecture

但是,如果您确实想使用 scrapy 功能,例如没有 scrapy 蜘蛛的选择器,您可以使用 requests 检索页面并继续使用 scrapy selectorsitem加载器等。尽管这不是推荐的方法,因为您会错过 scrapy 提供的所有功能。

官方scrapy初学者教程:http://doc.scrapy.org/en/latest/intro/tutorial.html

关于python - Scrapy 的 HtmlResponse 不从 URL 检索数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31131870/

相关文章:

Python:猴子修补函数的源代码

python - 创建无限循环生成器的巧妙方法?

python - 从 OrderedDict 转换为列表

php - 使用 cURL 和 PHP 发送 POST 数据以检索航空公司信息

javascript - 从不提供 API 的站点消费内容的最合乎道德的方式是什么?

python - scrapy 警告后超出 URL 限制

python - BeautifulSoup 文本挖掘 - 变量字符串

python - 使用 boto3 删除 CloudFront 分配

python - 如何在 Docker Compose 中通过 Privoxy 将 Scrapy 与 Splash 和 Tor 结合使用

python-3.x - 打开Chrome时,Python Selenium Webdriver "Session not created"异常