• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

Python爬虫进阶九http和amp;scrapy请求和响应

武飞扬头像
AugustTheo
帮助1

目录

前言

scrapy中的请求与响应

1 Request

2 FormRequest

3 JsonRequest

4 Response

5 TextResponse

http中的请求与响应

1 请求头/响应头

2 状态码

3 请求方式

3 请求体/响应体


前言

在写系列教程的时候,很多时候我会以为自己写了一些东西,最后回头去看才发现完全没写到,就只能像这样赶紧补上一节。总的来说这都是因为我写东西不拉大纲(也许以后老板让我拉大纲我就会拉了^ ^),还有一点是写教程的时候我也在学习,如果我中间断了一会或者写的时间太长了,确实会发生最后回看教程发现少写东西的情况。这还不是最丢人的,看上去总有一天我会在结束一个教程,说完“我就讲到这里为止”之后再发现自己少写了东西,那会子才是丢人丢大发。

言归正传,在本节中我们介绍一下scrapy中的请求与响应,也介绍一下http中的请求与响应。

scrapy中的请求与响应

在scrapy中,表示请求与响应的是两个类,其全写分别是scrapy.http.Request和scrapy.http.Response。

1 Request

通过上面的部分我们可以得知,Request代表着一个http请求,它由爬虫生成并且最后会生成一个Response。它的参数如下:

-url:本次请求的链接。

-callback:本次请求的回调函数。

-method:本次请求的方法,默认为GET。

-meta:本次请求的metadata,为字典。

-**此metadata中可以附加一些能被scrapy单独识别的项,具体请参照https://docs.scrapy.org/en/2.4/topics/request-response.html#request-meta-special-keys

-body:本次请求的主体,是一个bytes(字节串),或者一个字符串。

-headers:本次请求的请求头,是一个字典。

-cookies:本次请求携带的cookies,它可以是一个字典,也可以是一个字典的列表。

-encoding:本次请求的编码,默认为utf8。

-priority:本次请求的优先级,是一个数字,默认为0,数字越高执行越优先。

-dont_filter:为一个布尔值,默认为false。这个开关打开时让管道不会对其进行查重。

-cb_kwargs:为一个字典,在请求返回时作为参数发送到其回调函数。

除此之外,它还有两个可选参数,用于报错处理和日志。

2 FormRequest

顾名思义,FormReuqest是一个用于提交表单的请求,它的全写为scrapy.http.FormRequest。它的参数为(url[,formrequest,]),其中formdata为要提交的表单的数据,是一个字典或者元组。并且,它适用上节介绍的Request类中的可选参数,例如callback。

除此之外,FormRequest还有方法from_response,它可以用一个响应填写表单。其具体参数和用法请参考官方文档。

3 JsonRequest

顾名思义,这个类用于提交JSON请求。其全写为scrapy.http.JsonRequest。其具体参数和用法请参考官方文档。

4 Response

Response代表着一个响应。在scrapy中,它由下载器下载并发送给爬虫处理(也就是其对应请求的回调函数)。因此,我们并不用手动实例化Response。Response含有以下属性:

-url:发送响应的url

-status:此响应的状态值

-headers:此响应的头部

-**我们可用Response.headers.get(str)获取字段名为str的第一个值,用Response.headers.getlist(str)获取字段名为str的列表。

-body:此响应的响应体,为一个字节串。要将其作为字符串解析,请使用scrapy.http.TextResponse(下文有关于这个类的解析)。

-ip_address:发送此相应的服务器的地址

除此之外,它还有部分属性我们未提及到。它的三个函数urljoin、follow、follow_all在上一节有讲解。

5 TextResponse

相比于Response类,TextResponse类添加了编码功能。它的属性如下:

-text:响应体的字符串形式

-encoding:响应的编码形式

-selector:一个用于此响应的选择器。A Selector instance using the response as target. The selector is lazily instantiated on first access.(摘自官方文档)

TextResponse支持XPath和css解析器。由于其为Response的子类,它也支持上文中提到的三个方法urljoin等。

http中的请求与响应

十分惭愧到现在我才发现没有介绍这一部分。

读者在阅读上文时,是否会对“请求头”、“请求体”、“响应头”等名词产生疑惑?这是因为它们是针对http中的请求与响应而言的。

关于请求与响应的构成,我们以Fiddler作为素材举例:

学新通

1 请求头/响应头

请求头/响应头是一类metadata,类似于字典,储存着浏览器与服务器之间需要约定的信息。

为了让读者对请求头有更清晰的认识,我截取了一个更加详细的请求头,它包含了cookies和referer:

学新通

对于爬虫而言,需要注意的请求头有UA、referer与cookies(session本质上也是cookies)。常用的响应头字段请自行查询。

2 状态码

状态码描述本次请求的响应的状态,为一个三位数字,其中:

-1**:表示请求已被接受,需要进一步处理。一般情况下不会收到此类状态码。

-2**:表示请求已被接受并处理。其中,200为请求已成功,期望的响应已返回。为一般正常情况下返回的状态码。

-3**:表示此请求需要客户端的进一步操作,通常被用于重定向。

-4**:表示此请求遭到了一个错误。其中401为需要用户验证,403为拒绝访问,404为找不到所请求的资源。

-5**/6**:表示此请求的服务器发生了错误。

对于爬虫而言,我们期望得到200状态码。

3 请求方式

也就是上文中提到的请求方法,作为爬虫我们基本上只用GET于POST。这两种方式的区别在于请求体是否为空。

对于GET而言,如果其带参会显式的出现在链接上。以url www.abc.com/xxx/yyy举例,其传参形式为www.abc.com/xxx/yyy?attr1=mmm&attr2=nnn......其中?隔开参数与url,&隔开每个参数。

对于POST而言,其通常用于表单的提交(表单也可以采用GET提交)。POST方式的参数在请求体中。

3 请求体/响应体

对于爬虫而言,我们主要需要解析响应体,构造请求体。各种链接的响应体需要具体的分析,很难详细的讲出。我们还是用Fiddler截取响应作为例子,比如我们访问微博首页时的响应体:

学新通

可以看到其返回了一个html文件。

至于ajax请求的响应体,可以查看本系列的进阶(八)。

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgficee
系列文章
更多 icon
同类精品
更多 icon
继续加载