NO.5 Scrapy爬虫框架中的 Request 和 Response 对象
Request对象
Request对象用来描述一个 HTTP 请求,下面是其构造器方法的参数列表,
class scrapy.http.Request(url[, callback, method='GET', headers, body, cookies, meta, encoding='utf-8', priority=0, dont_filter=False, errback])
下面依次介绍这些参数:
url (string) (必选)
callback (callable)
页面解析函数,Callable 类型,Request 对象请求的页面下载完成后,由该参数指定的页面解析函数被调用。如果未传递该参数,默认调用 Spider 的 parse 方法。
method (string)
HTTP请求的方法,默认为‘GET’。
headers (dict)
HTTP 请求的头部字典,dict类型,例如: {'Accept': 'text/html', 'User-Agent': 'Mozilla/5.0'}。
body (str or unicode)
HTTP请求的正文。
cookies (dict or list)
Cookie 信息字典,dict 类型,例如:{'currency': 'USD', 'country': 'UY'}。
meta (dict)
Request 的元数据字典,dict 类型,用于给框架中其他组件传递信息,比如中间件 Item Pipeline。其他组件可以使用 Request 对象的 meta 属性访问该元数据字典(request.meta),也用于给响应处理函数传递信息,详见 Response 的 meta 属性。
encoding (string)
url 和 body 参数的编码默认为 ‘utf-8’。如果传入的 url 或 body 参数是 str 类型,就使用该甘薯进行编码。
priority(int)
请求的优先级默认值为0,优先级高的请求优先下载。
dont_filter (boolean)
errback (callable)
请求出现异常或者出现 HTTP 错误时(如 404页面不存在 )的回调函数。
虽然参数很多,但除了 url 参数外,其他都带有默认值。在构造 Request 对象时,通常我们只需传递一个 url 参数或再加一个 callback 参数,其他使用默认值即可。
如:
request = scrapy.Request('http://books.toscrape.com/')
request2 = scrapy.Request('http://quotes.toscrape.com/',callback=self.parseItem)
带参数的方式,如 demo1 中最下方的:
在实际应用中,我们几乎只调用 Request 的构造器创建对象,但也可以根据要求访问 Request 对象的属性,常用的有以下几个:
url
method
headers
body
meta
这些属性和构造器参数相对应,这里不再重复解释。
Response对象
TextResponse
HtmlResponse
XmlResponse
url
status
HTTP 响应的状态码,int 类型,例如:200、404。
headers
HTTP 响应的头部,类字典类型,可以调用 get 或 getlist 方法对其进行访问,例如:
response.headers.get('Content-Type')
response.headers.getlist('Set-Cookie')
body
HTTP 响应的正文,bytes 类型。
text
文本形式的HTTP 响应正文,str 类型,它是由 response.body 使用 response.encoding 解码得到的,即:
response.text = response.body.decode(response.encoding)
encoding
HTTP 响应正文的编码,它的值可能是从 HTTP 响应头部或正文中解析出来的。
request
产生该HTTP 响应的Request 对象。
meta
即 response.request.meta,在构造 Request 对象时,可将要传递给响应处理函数的信息通过 meta 参数传入;响应处理函数处理响应时,通过 response.meta 将信息去除。
selector
Selector 对象用于在 Response 中提取数据(选择器相关话题在后面会详细讲解)。
xpath(query)
使用 XPath 选择器在 Response 中提取数据,实际上它是 response.selector.xpath 方法的快捷方式(选择器相关话题在后面会详细讲解)。
css(query)
使用 CSS 选择器 在 Response 中提取数据,实际上它是 response.selector.css 方法的快捷方式(选择器相关话题在后面会详细讲解)。
urljoin(url)
虽然 HtmlResponse 对象有很多属性,但最常用的是以下的 3 个方法:
-
xpath(query)
-
css(query)
-
urljoin(query)
前两个方法用于提取数据,后一个方法用于构造绝对url。
内容参考:
《精通Scrapy网络爬虫》、百度。
END
这里“阅读原文”,查看github中的代码