response 获取相应内容_NO.5 Request 和 Response 对象

通过上一篇文章对 Scrapy框架结构的讲解,大家也就了解了 Request 和 Response 对象在 Scrapy 框架中的重要性,下面详细介绍这两个对象。

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) (必选)请求页面的 url 地址,bytes 或 str 类型,如 (NO.3 编写第一个Scrapy爬虫【Scrapy网络爬虫系列教程】) 中使用的“http://books.toscrape.com/”。
  • 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) 默认情况下( dont_filter=False ),对同一个 url 地址多次提交下载请求,后面的请求会被去重过滤器过滤(避免重复下载)。如果将该参数设置为 True,可以使请求避免被过滤,强制下载,例如:在多次爬取一个内容随时间而变化的页面时(每次使用相同的 url ),可以将该参数设置为 True。
  • 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 中最下方的:

d0b5ff8920bbe9287af3d452c837284c.png

在实际应用中,我们几乎只调用 Request 的构造器创建对象,但也可以根据要求访问 Request 对象的属性,常用的有以下几个:

  • url
  • method
  • headers
  • body
  • meta

这些属性和构造器参数相对应,这里不再重复解释。

Response对象

Response 对象用来描述一个 HTTP 响应,Response 只是一个基类,根据响应内容的不同有如下子类:

  • TextResponse
  • HtmlResponse
  • XmlResponse

当一个页面下载完成时,下载器依据 HTTP 响应头部中的 Content-Type 信息创建某个 Response 的子类对象。我们通常爬取的网页,其内容是 HTML 文本,创建的便是 HtmlResponse 对象,其中 HtmlResponse 和 XmlResponse 是TextResponse 的子类。实际上,这 3 个子类只有细微的差别,这里以 HtmlResponse 为例进行讲解。

下面介绍 HtmlResponse 对象的属性及方法。

  • urlHTTP 响应的url地址,str 类型。
  • statusHTTP 响应的状态码,int 类型,例如:200、404。
  • headersHTTP 响应的头部,类字典类型,可以调用 get 或 getlist 方法对其进行访问,例如:response.headers.get('Content-Type')response.headers.getlist('Set-Cookie')
  • bodyHTTP 响应的正文,bytes 类型。
  • text文本形式的HTTP 响应正文,str 类型,它是由 response.body 使用 response.encoding 解码得到的,即:response.text = response.body.decode(response.encoding)
  • encodingHTTP 响应正文的编码,它的值可能是从 HTTP 响应头部或正文中解析出来的。
  • request产生该HTTP 响应的Request 对象。
  • meta即 response.request.meta,在构造 Request 对象时,可将要传递给响应处理函数的信息通过 meta 参数传入;响应处理函数处理响应时,通过 response.meta 将信息去除。
  • selectorSelector 对象用于在 Response 中提取数据(选择器相关话题在后面会详细讲解)。
  • xpath(query)使用 XPath 选择器在 Response 中提取数据,实际上它是 response.selector.xpath 方法的快捷方式(选择器相关话题在后面会详细讲解)。
  • css(query)使用 CSS 选择器 在 Response 中提取数据,实际上它是 response.selector.css 方法的快捷方式(选择器相关话题在后面会详细讲解)。
  • urljoin(url)用于构造绝对 url。当传入的 url 参数是一个相对地址时,根据 response.url 计算出相应的绝对 url。例如,response.url 为 http://www.example.com/a, url 为 b/index.html, 调用 response.urljoin(url)的结果为 http://www.example.com/a/b/index.html。

虽然 HtmlResponse 对象有很多属性,但最常用的是以下的 3 个方法:

  • xpath(query)
  • css(query)
  • urljoin(query)

前两个方法用于提取数据,后一个方法用于构造绝对url。

内容参考:

《精通Scrapy网络爬虫》、百度。

a089cc878df8aecd9056dfa7959e2b4e.png

END

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值