这可能是一个超级愚蠢的问题。。。如果是…请原谅我。。。。我读到有人构造了一个HtmlResponse类,如下所示:
response = HtmlResponse(url = 'http://asite.com', body=html, encoding='utf-8')
body=html做什么?它是否指定了源html?为什么即使指定了url,也需要源html?
为了给你的问题提供上下文,你需要明白Scrapy不是一个直接请求的工具。Scrapy是一个网络爬行框架,它作为一个项目单独工作。
我认为response = HtmlResponse(url = 'http://asite.com', ...)
可能是从特定网站"下载"信息的一种方式,但事实并非如此。Scrapy旨在以某种方式工作,并按照此处指定的特定顺序工作。请求和响应并不意味着在Scrapy中独立使用,因为它有自己的调度程序,可以在其中转储Request
对象并返回Response
对象。
Response
对象并不意味着要直接实例化(事实上,我一生中从未实例化过一个Response
(,因为它们是由Scrapy调度器创建的,是之前指定的Request
的"响应"。
Haing说,当然,你仍然可以像Python中的任何其他class
一样实例化Response
,事实上,它很有用,但主要用于测试目的,但仅此而已,因为它只是Scrapy调度器应该提供的内容的"无用"表示。
参数body:要以str(Python 2中的unicode(的形式访问解码文本,可以使用编码感知响应子类(如TextResponse
(中的response.text
。
更多信息:请求-响应
因为HTMLResponse不会下载与给定的url
关联的页面。HTMLResponse
用于解析html(通过xpath和css进行查询(。页面下载发生在另一段代码中。此外,使用与HtmlResponse
对象关联的url
,您可以轻松访问该属性。
您可以查看:
https://github.com/scrapy/scrapy/blob/1fd1702a11a56ecbe9851ba4f9d3c10797e262dd/scrapy/http/response/init.py