这些是在 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 selectors
、item加载器
等。尽管这不是推荐的方法,因为您会错过 scrapy 提供的所有功能。
官方scrapy初学者教程:http://doc.scrapy.org/en/latest/intro/tutorial.html
关于python - Scrapy 的 HtmlResponse 不从 URL 检索数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31131870/