scrapy设置"请求池"

引言

相信大家有时候爬虫发出请求的时候会被ban,返回的是403错误,这个就是请求头的问题,其实在python发出请求时,使用的是默认的自己的请求头,网站管理者肯定会不允许机器访问的,但是有些比较low的网站还是可以访问的,有时候网站管理者看到同一个请求头在一秒内请求多次,傻子都知道这是机器在访问,因此会被ban掉,这时就需要设置请求池了,这个和ip代理池是一个概念

爬虫请求常见的错误

  • 200:请求成功 处理方式:获得响应的内容,进行处理
  • 201:请求完成,结果是创建了新资源。新创建资源的 URI 可在响应的实体中得到 处理方式:爬虫中不会遇到
  • 202:请求被接受,但处理尚未完成 处理方式:阻塞等待
  • 204:服务器端已经实现了请求,但是没有返回新的信 息。如果客户是用户代理,则无须为此更新自身的文档视图。 处理方式:丢弃
  • 300:该状态码不被 HTTP/1.0 的应用程序直接使用, 只是作为 3XX 类型回应的默认解释。存在多个可用的被请求资源。 处理方式:若程序中能够处理,则进行进一步处理,如果程序中不能处理,则丢弃
  • 301:请求到的资源都会分配一个永久的 URL,这样就可以在将来通过该 URL 来访问此资源 处理方式:重定向到分配的 URL
  • 302:请求到的资源在一个不同的 URL 处临时保存 处理方式:重定向到临时的 URL
  • 304 请求的资源未更新 处理方式:丢弃
  • 400 非法请求 处理方式:丢弃
  • 401 未授权 处理方式:丢弃
  • 403 禁止 处理方式:丢弃
  • 404 没有找到 处理方式:丢弃
  • 5XX 回应代码以“5”开头的状态码表示服务器端发现自己出现错误,不能继续执行请求 处理方式:丢弃

话不多说直接撸代码

  1. from scrapy import log
  2. import random
  3. from scrapy.downloadermiddlewares.useragent import UserAgentMiddleware
  4. class RotateUserAgentMiddleware(UserAgentMiddleware):
  5. # for more user agent strings,you can find it in http://www.useragentstring.com/pages/useragentstring.php
  6. user_agent_list = [
  7. "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 "
  8. "(KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1",
  9. "Mozilla/5.0 (X11; CrOS i686 2268.111.0) AppleWebKit/536.11 "
  10. "(KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11",
  11. "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.6 "
  12. "(KHTML, like Gecko) Chrome/20.0.1092.0 Safari/536.6",
  13. "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.6 "
  14. "(KHTML, like Gecko) Chrome/20.0.1090.0 Safari/536.6",
  15. "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.1 "
  16. "(KHTML, like Gecko) Chrome/19.77.34.5 Safari/537.1",
  17. "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/536.5 "
  18. "(KHTML, like Gecko) Chrome/19.0.1084.9 Safari/536.5",
  19. "Mozilla/5.0 (Windows NT 6.0) AppleWebKit/536.5 "
  20. "(KHTML, like Gecko) Chrome/19.0.1084.36 Safari/536.5",
  21. "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 "
  22. "(KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3",
  23. "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/536.3 "
  24. "(KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3",
  25. "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_0) AppleWebKit/536.3 "
  26. "(KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3",
  27. "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 "
  28. "(KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3",
  29. "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 "
  30. "(KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3",
  31. "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 "
  32. "(KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3",
  33. "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 "
  34. "(KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3",
  35. "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.3 "
  36. "(KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3",
  37. "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 "
  38. "(KHTML, like Gecko) Chrome/19.0.1061.0 Safari/536.3",
  39. "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.24 "
  40. "(KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24",
  41. "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/535.24 "
  42. "(KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24"
  43. ]
  44. def process_request(self, request, spider):
  45. ua = random.choice(self.user_agent_list)
  46. if ua:
  47. # 显示当前使用的useragent
  48. print "********Current UserAgent:%s************" % ua
  49. # 记录
  50. log.msg('Current UserAgent: ' + ua)
  51. request.headers.setdefault('User-Agent', ua)

说明

这里的思路就是在下载器中间件中对request设置请求,这里是使用request.headers.setdefault("User-Agent",user_agent)这个函数设置请求头,对于下载器中间件在我博客前面的文章已经有说明,想要了解的请点击

注意

这里还要说明的是设置了请求池还要在配置文件settins中设置一下,具体设置方法和设置代理ip一样,详情请看scrapy代理ip的设置

scrapy设置"请求池"的更多相关文章

  1. Scrapy 设置请求头

    爬虫的过程有些网站设置反盗链,需要我们在请求头中添加下,修改settings.py文件中添加 DEFAULT_REQUEST_HEADERS = { 'Accept': 'text/html,appl ...

  2. scrapy 设置cookie池

    代码已经很详细了,可以直接拿来使用了. 包含了: 从网页获取cookie 存入mongodb 定期删除cookie scrapy中间件对cookie池的取用 #!/usr/bin/python #co ...

  3. httpclient: 设置连接池及超时配置,请求数据:PoolingHttpClientConnectionManager

    public static void main(String[] args) throws Exception{ //httpclient连接池 //创建连接池 PoolingHttpClientCo ...

  4. scrapy的UA池和代理池

    一.下载中间件(Downloader Middlewares) 框架图如下 下载中间件(Downloader Middlewares)位于scrapy引擎和下载器之间的一层组件. - 作用: (1)引 ...

  5. 前端通信:ajax设计方案(八)--- 设计请求池,复用请求,让前端通信快、更快、再快一点

    直接进入主题,本篇文章有点长,包括从设计阶段,到摸索阶段,再到实现阶段,最后全面覆盖测试阶段(包括数据搜集清洗),还有与主流前端通信框架进行对比PK阶段. 首先介绍一下一些概念: 1. 浏览器的并发能 ...

  6. httpclient: 设置请求的超时时间,连接超时时间等

    httpclient: 设置请求的超时时间,连接超时时间等 public static void main(String[] args) throws Exception{ //创建httpclien ...

  7. 在AngularJs中怎么设置请求头信息(headers)及不同方法的比较

    在AngularJS中有三种方式可以设置请求头信息: 1.在http服务的在服务端发送请求时,也就是调用http()方法时,在config对象中设置请求头信息:事例如下: $http.post('/s ...

  8. ajax中的setRequestHeader设置请求头

    1.问题引发点: 前不久发现一个问题: 前端并没有设置请求头信息里面的Accept-Encoding:gzip...但是在请求头中可以明显的看到Accept-Encoding:gzip, deflat ...

  9. ajax里post 设置请求头的编码格式

    我们常用的ajax形式就是post和get.post需要设置请求头,那么问题来了: 首先,为什么get不需要设置编码格式? 其次:不设置post请求头编码格式可以吗? 还有:常用的请求头编码格式有哪些 ...

随机推荐

  1. 开始更新webpack踩坑笔记

    今天开始学习webpack,记录下踩过的坑-zxf

  2. 窝上课不听,how to learn C language easily(1)

    C language 学习心得 附:为啥起这么霸气侧漏,招大神们鄙视的标题,正如我在<C language>随笔的介绍中写的,这是一个写个妹纸们看的C language的文章.没错!!写这 ...

  3. JS中常用的几种时间格式处理-【笔记整理】

    //此处整理点平时常用到的时间格式处理方法 ------------------------------------------- //时间格式化函数 Date.prototype.format = ...

  4. Java集合框架类

    java集合框架类图 Collection接口(List.Set.Queue.Stack):

  5. RowSet的使用

    ResultSet是使用Jdbc编程的人入门和常用的操作数据库的类,自 JDK1.4开始,易于使用RowSet接口被引入.RowSet 接口扩展了标准java.sql.ResultSet接口.RowS ...

  6. Listener与Filter

    一.监听器Listener javaEE的13们规范中 包括servlet技术和jsp技术 servlet规范中包括三门技术:(servlet的三大组件) servelt技术  Listener技术 ...

  7. Ubuntu设置终端相对短路径

    这个设置相对实际上是比较简单的.在自己的家目录打开.bashrc 找到PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$' 只需要将w修改为大写W保存, ...

  8. js实用方法记录-简单cookie操作

    js实用方法记录-简单cookie操作 设置cookie:setCookie(名称,值,保存时间,保存域); 获取cookie:setCookie(名称); 移除cookie:setCookie(名称 ...

  9. cp复制文件到多个目录下及强制覆盖

    工作中有遇到要把一个文件拷贝到N个文件夹下,但是cp又没有这样的命令,怎么办,这时需要编写一个脚本,首先做实验如下: [root@host1 ~]# mkdir test [root@host1 ~] ...

  10. 二叉树遍历 C#

    二叉树遍历 C# 什么是二叉树 二叉树是每个节点最多有两个子树的树结构 (1)完全二叉树——若设二叉树的高度为h,除第 h 层外,其它各层 (1-h-1) 的结点数都达到最大个数,第h层有叶子结点,并 ...