scrapy Request类的一些参数意义

  1. url: 就是需要请求,并进行下一步处理的url
  2. callback: 指定该请求返回的Response,由那个函数来处理。
  3. method: 一般不需要指定,使用默认GET方法请求即可
  4. headers: 请求时,包含的头文件。一般不需要。内容一般如下:使用 urllib2 自己写过爬虫的肯定知道
  5. Host: media.readthedocs.org
  6. User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64; rv:33.0) Gecko/20100101 Firefox/33.0
  7. Accept: text/css,*/*;q=0.1
  8. Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3
  9. Accept-Encoding: gzip, deflate
  10. Referer: http://scrapy-chs.readthedocs.org/zh_CN/0.24/
  11. Cookie: _ga=GA1.2.1612165614.1415584110;
  12. Connection: keep-alive
  13. If-Modified-Since: Mon, 25 Aug 2014 21:59:35 GMT
  14. Cache-Control: max-age=0
  15. meta: 比较常用,在不同的请求之间传递数据使用的。字典dict型
  16. request_with_cookies = Request(url="http://www.example.com",
  17. cookies={‘currency‘: ‘USD‘, ‘country‘: ‘UY‘},
  18. meta={‘dont_merge_cookies‘: True})
  19. encoding: 使用默认的 ‘utf-8‘ 就行。
  20. dont_filter: 页面是否去重 默认是Falsse 不去重
            indicates that this request should not be filtered by the scheduler.
  21. This is used when you want to perform an identical request multiple times,
  22. to ignore the duplicates filter. Use it with care, or you will get into crawling loops.
  23. Default to False.
  24. errback: 指定错误处理函数
    priority(int) - 此请求的优先级(默认为0)。调度器使用优先级来定义用于处理请求的顺序。具有较高优先级值的请求将较早执行。允许负值以指示相对低优先级。
    flags(list) - 是一个包含属性初始值的 Response.flags列表。如果给定,列表将被浅复制。

Request.meta特殊键

Request.meta属性可以包含任何任意数据,但有一些特殊的键由Scrapy及其内置扩展识别。

那些是:

  1. dont_redirect
  2. dont_retry
  3. handle_httpstatus_list
  4. handle_httpstatus_all
  5. dont_merge_cookies(参见cookies构造函数的Request参数)
  6. cookiejar
  7. dont_cache
  8. redirect_urls
  9. bindaddress
  10. dont_obey_robotstxt
  11. download_timeout
  12. download_maxsize
  13. download_latency
  14. proxy
  1.  

当某些网站返回Cookie(在响应中)时,这些Cookie会存储在该域的Cookie中,并在将来的请求中再次发送。这是任何常规网络浏览器的典型行为。但是,如果由于某种原因,您想要避免与现有Cookie合并,您可以通过将dont_merge_cookies关键字设置为True 来指示Scrapy如此操作 Request.meta。

不合并Cookie的请求示例:

  1. request_with_cookies = Request(url="http://www.example.com",
  2. cookies={'currency': 'USD', 'country': 'UY'},
  3. meta={'dont_merge_cookies': True})

请求使用示例

使用FormRequest通过HTTP POST发送数据

如果你想在你的爬虫中模拟HTML表单POST并发送几个键值字段,你可以返回一个FormRequest对象(从你的爬虫)像这样:

  1. return [FormRequest(url="http://www.example.com/post/action",
  2. formdata={'name': 'John Doe', 'age': ''}, # 一定是标准json格式
  3. callback=self.after_post,
  4.  
  5. )]
  1. scrapy使用post方式提交json参数
  1. yield Request(
  2. url=post_url,
  3. method='POST',
  4. body=json.dumps(data),
  5. headers={'Content-Type': 'application/json'},
  6. callback=self.parse_kline
  7. )

使用FormRequest.from_response()来模拟用户登录

网站通常通过元素(例如会话相关数据或认证令牌(用于登录页面))提供预填充的表单字段。进行剪贴时,您需要自动预填充这些字段,并且只覆盖其中的一些,例如用户名和密码。您可以使用 此作业的方法。这里有一个使用它的爬虫示例:<input type="hidden"> FormRequest.from_response()

  1. import scrapy
  2.  
  3. class LoginSpider(scrapy.Spider):
  4. name = 'example.com'
  5. start_urls = ['http://www.example.com/users/login.php']
  6.  
  7. def parse(self, response):
  8. return scrapy.FormRequest.from_response(
  9. response,
  10. formdata={'username': 'john', 'password': 'secret'},
  11. callback=self.after_login
  12. )
  13.  
  14. def after_login(self, response):
  15. # check login succeed before going on
  16. if "authentication failed" in response.body:
  17. self.logger.error("Login failed")
  18. return
  19.  
  20. # continue scraping with authenticated session...

响应对象

class scrapy.http.Response(url[, status=200, headers=None, body=b'', flags=None, request=None])
一个Response对象表示的HTTP响应,这通常是下载(由下载),并供给到爬虫进行处理。

参数:

  • url(string) - 此响应的URL
  • status(integer) - 响应的HTTP状态。默认为200。
  • headers(dict) - 这个响应的头。dict值可以是字符串(对于单值标头)或列表(对于多值标头)。
  • body(str) - 响应体。它必须是str,而不是unicode,除非你使用一个编码感知响应子类,如 TextResponse
  • flags(list) - 是一个包含属性初始值的 Response.flags列表。如果给定,列表将被浅复制。
  • request(Requestobject) - 属性的初始值Response.request。这代表Request生成此响应。

url
包含响应的URL的字符串。

此属性为只读。更改响应使用的URL replace()。

status
表示响应的HTTP状态的整数。示例:200, 404。

headers
包含响应标题的类字典对象。可以使用get()返回具有指定名称的第一个标头值或getlist()返回具有指定名称的所有标头值来访问值。例如,此调用会为您提供标题中的所有Cookie:

  1. response.headers.getlist('Set-Cookie')

body
本回复的正文。记住Response.body总是一个字节对象。如果你想unicode版本使用 TextResponse.text(只在TextResponse 和子类中可用)。

此属性为只读。更改响应使用的主体 replace()。

request
Request生成此响应的对象。在响应和请求通过所有下载中间件后,此属性在Scrapy引擎中分配。特别地,这意味着:

HTTP重定向将导致将原始请求(重定向之前的URL)分配给重定向响应(重定向后具有最终URL)。
Response.request.url并不总是等于Response.url
此属性仅在爬虫程序代码和 Spider Middleware中可用,但不能在Downloader Middleware中使用(尽管您有通过其他方式可用的请求)和处理程序response_downloaded。

meta
的快捷方式Request.meta的属性 Response.request对象(即self.request.meta)。

与Response.request属性不同,Response.meta 属性沿重定向和重试传播,因此您将获得Request.meta从您的爬虫发送的原始属性。

也可以看看

Request.meta 属性

flags
包含此响应的标志的列表。标志是用于标记响应的标签。例如:'cached','redirected '等等。它们显示在Response( str 方法)的字符串表示上,它被引擎用于日志记录。

copy()
返回一个新的响应,它是此响应的副本。

replace([ url,status,headers,body,request,flags,cls ] )
返回具有相同成员的Response对象,但通过指定的任何关键字参数赋予新值的成员除外。该属性Response.meta是默认复制。

urljoin(url )
通过将响应url与可能的相对URL 组合构造绝对url。

这是一个包装在urlparse.urljoin,它只是一个别名,使这个调用:

  1. urlparse.urljoin(response.url, url)
  1.  

scrapy 请求和响应的更多相关文章

  1. Scrapy爬虫入门Request和Response(请求和响应)

    开发环境:Python 3.6.0 版本 (当前最新)Scrapy 1.3.2 版本 (当前最新) 请求和响应 Scrapy的Request和Response对象用于爬网网站. 通常,Request对 ...

  2. Django底层剖析之一次请求到响应的整个流程

    As we all know,所有的Web应用,其本质上其实就是一个socket服务端,而用户的浏览器就是一个socket客户端. #!/usr/bin/env python #coding:utf- ...

  3. 初入网络系列笔记(4)HTTP请求和响应

    一.借鉴说明,本博文借鉴以下博文 1.starok,HTTP必知必会,http://www.cnblogs.com/starstone/p/4890409.html 2.CareySon,HTTP协议 ...

  4. http协议(二)请求和响应报文的构成

    http协议用于客户端和服务器之间的通信,请求访问资源的一方称为客户端,而提供资源响应的一方称为服务器端. 下面就是客户端和服务端之间简单的通信过程 PS:请求必须从客户端建立通信,服务端没收到请求之 ...

  5. iOS开发——网络篇——HTTP/NSURLConnection(请求、响应)、http响应状态码大全

    一.网络基础 1.基本概念> 为什么要学习网络编程在移动互联网时代,移动应用的特征有几乎所有应用都需要用到网络,比如QQ.微博.网易新闻.优酷.百度地图只有通过网络跟外界进行数据交互.数据更新, ...

  6. struts2基础——请求与响应、获取web资源

    一.请求与响应 Action1.含义:(1) struts.xml 中的 action 元素,也指 from 表单的 action 属性,总之代表一个 struts2 请求.(2) 用于处理 Stru ...

  7. 浏览器-Tomcat服务器-请求与响应

    浏览器访问服务器,本质就是请求资源. 比如请求静态资源:index.html,我们在浏览器地址栏输入:www.a.com/index.html,浏览器为了支持HTTP协议,发送的数据必须符合HTTP协 ...

  8. 写一个ActionFilter检测WebApi接口请求和响应

    我们一般用日志记录每次Action的请求和响应,方便接口出错后排查,不过如果每个Action方法内都写操作日志太麻烦,而且客户端传递了错误JSON或XML,没法对应强类型参数,请求没法进入方法内, 把 ...

  9. AngularJS 用 Interceptors 来统一处理 HTTP 请求和响应

    Web 开发中,除了数据操作之外,最频繁的就是发起和处理各种 HTTP 请求了,加上 HTTP 请求又是异步的,如果在每个请求中来单独捕获各种常规错误,处理各类自定义错误,那将会有大量的功能类似的代码 ...

随机推荐

  1. php const static define 基本用法和区别

    const  定义一些在运行时不能被改变的数值.一旦值被改变,则会发生错误. 特性 只能用类名访问.不需要用 $  符号 <?php class test{ const pi=123.12321 ...

  2. 解决0RA-04031故障

    1.客户反应报表数据很慢,简单查询5分钟都出不来. 2.登陆数据库服务器检查日志:Thu Mar 21 16:20:30 2013Errors in file /opt/oracle/diag/rdb ...

  3. 关于mysql自增字段问题

    最近遇到mysql字段的自增问题,需要临时处理一下,然后就顺便补补课,这样就有了这样一篇文章. 1.自增值是什么 他是一个字段属性,是用来创建唯一标识的列的 The AUTO_INCREMENT at ...

  4. django获取字段列表(values/values_list/flat)

    django获取字段列表(values/values_list/flat) values方法可以获取number字段的字典列表 values_list可以获取number的元组列表 values_li ...

  5. Flask解决跨域

    Flask解决跨域 问题:网页上(client)有一个ajax请求,Flask sever是直接返回 jsonify. 然后ajax就报错:No 'Access-Control-Allow-Origi ...

  6. Mr_matcher的细节3

    主要是订阅了playbag发布的scan话题和odom话题 其类型分别为 //cache the static tf from base to laser getBaseToLaserTf(scan_ ...

  7. 关于"人工智能Python""系统环境变量设置步骤

    最近无论是JAVA的环境变量配置,还是Python环境变量配置都有学生问我,我在这里写一下回答,当然我以配置Python的环境变脸来举例.首先需要确定本机电脑上安装上了Python 首先解释一下为什么 ...

  8. 编写高质量代码改善C#程序的157个建议——建议14: 正确实现浅拷贝和深拷贝

    建议14: 正确实现浅拷贝和深拷贝 为对象创建副本的技术称为拷贝(也叫克隆).我们将拷贝分为浅拷贝和深拷贝. 浅拷贝 将对象中的所有字段复制到新的对象(副本)中.其中,值类型字段的值被复制到副本中后, ...

  9. 探索Asp.net mvc 的文件上传(由浅入深)

    代码下载:http://files.cnblogs.com/n-pei/mvcfileupload.zip 最近因为TeamVideo需要用到视频和图片上传功能,所以试着Google了很多资料,和大家 ...

  10. do_gettimeofday使用方法

    1.简介: 在Linux中可以使用函数do_gettimeofday()函数来得到精确时间.它的精度可以达到微妙,是与C标准库中gettimeofday()用发相同的函数.在Linux内核中获得时间的 ...