在scraper.http.HtmlResponse类构造函数中"body"有什么意义?



这可能是一个超级愚蠢的问题。。。如果是…请原谅我。。。。我读到有人构造了一个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

最新更新