前言:
今天同学们对“scrapy发送ajax请求”都比较注意,大家都想要剖析一些“scrapy发送ajax请求”的相关资讯。那么小编在网络上网罗了一些关于“scrapy发送ajax请求””的相关知识,希望同学们能喜欢,姐妹们一起来学习一下吧!前言
在写系列教程的时候,很多时候我会以为自己写了一些东西,最后回头去看才发现完全没写到,就只能像这样赶紧补上一节。总的来说这都是因为我写东西不拉大纲(也许以后老板让我拉大纲我就会拉了),还有一点是写教程的时候我也在学习,如果我中间断了一会或者写的时间太长了,确实会发生最后回看教程发现少写东西的情况。这还不是最丢人的,看上去总有一天我会在结束一个教程,说完“我就讲到这里为止”之后再发现自己少写了东西,那会子才是丢人丢大发。
言归正传,在本节中我们介绍一下scrapy中的请求与响应,也介绍一下http中的请求与响应。
scrapy中的请求与响应
在scrapy中,表示请求与响应的是两个类,其全写分别是scrapy.http.Request和scrapy.http.Response。
1 Request
通过上面的部分我们可以得知,Request代表着一个http请求,它由爬虫生成并且最后会生成一个Response。它的参数如下:
-url:本次请求的链接。
-callback:本次请求的回调函数。
-method:本次请求的方法,默认为GET。
-meta:本次请求的metadata,为字典。
-**此metadata中可以附加一些能被scrapy单独识别的项,具体请参照
-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 举例,其传参形式为......其中?隔开参数与url,&隔开每个参数。
对于POST而言,其通常用于表单的提交(表单也可以采用GET提交)。POST方式的参数在请求体中。
3 请求体/响应体
对于爬虫而言,我们主要需要解析响应体,构造请求体。各种链接的响应体需要具体的分析,很难详细的讲出。我们还是用Fiddler截取响应作为例子,比如我们访问微博首页时的响应体:
可以看到其返回了一个html文件。
至于ajax请求的响应体,可以查看本系列的进阶(八)。
最后
都看到这了,不来个点赞评论转发关注吗~关注我,不定时更新各种关于编程的文章,一起做个冲浪高手吧~
标签: #scrapy发送ajax请求 #scrapy post请求