文档章节

Scrapy研究探索(七)——如何防止被ban之策略大集合

Airship
 Airship
发布于 2015/12/21 19:06
字数 1142
阅读 139
收藏 5
点赞 0
评论 0

话说在尝试设置download_delay小于1,并且无任何其他防止被ban的策略之后,我终于成功的被ban了。如下:

\

敌退我进,敌攻我挡。

本篇博客主要研究使用防止被ban的几大策略以及在scrapy中的使用。

1.策略一:设置download_delay

这个在之前的教程中已经使用过(http://blog.csdn.net/u012150179/article/details/34913315),他的作用主要是设置下载的等待时间,大规模集中的访问对服务器的影响最大,相当与短时间中增大服务器负载。

下载等待时间长,不能满足段时间大规模抓取的要求,太短则大大增加了被ban的几率。

使用注意:

download_delay可以设置在settings.py中,也可以在spider中设置,在之前博客中(http://blog.csdn.net/u012150179/article/details/34913315)已经使用过,这里不再过多阐述。

2.策略二:禁止cookies

所谓cookies,是指某些网站为了辨别用户身份而储存在用户本地终端(Client Side)上的数据(通常经过加密),禁止cookies也就防止了可能使用cookies识别爬虫轨迹的网站得逞。

使用:

在settings.py中设置COOKIES_ENABLES=False。也就是不启用cookies middleware,不想web server发送cookies。

3.策略三:使用user agent池

所谓的user agent,是指包含浏览器信息、操作系统信息等的一个字符串,也称之为一种特殊的网络协议。服务器通过它判断当前访问对象是浏览器、邮件客户端还是网络爬虫。在request.headers可以查看user agent。如下,使用scrapy shell查看:

scrapy shell http://blog.csdn.net/u012150179/article/details/34486677

进而输入如下,可得到uesr agent信息:

\

由此得到,scrapy本身是使用Scrapy/0.22.2来表明自己身份的。这也就暴露了自己是爬虫的信息。

使用:

首先编写自己的UserAgentMiddle中间件,新建rotate_useragent.py,代码如下:

# -*-coding:utf-8-*-

from scrapy import log

"""避免被ban策略之一:使用useragent池。

使用注意:需在settings.py中进行相应的设置。
"""

import random
from scrapy.contrib.downloadermiddleware.useragent import UserAgentMiddleware

class RotateUserAgentMiddleware(UserAgentMiddleware):

    def __init__(self, user_agent=''):
        self.user_agent = user_agent

    def process_request(self, request, spider):
        ua = random.choice(self.user_agent_list)
        if ua:
            #显示当前使用的useragent
            print "********Current UserAgent:%s************" %ua

            #记录
            log.msg('Current UserAgent: '+ua, level='INFO')
            request.headers.setdefault('User-Agent', ua)

    #the default user_agent_list composes chrome,I E,firefox,Mozilla,opera,netscape
    #for more user agent strings,you can find it in http://www.useragentstring.com/pages/useragentstring.php
    user_agent_list = [\
        "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 "
        "(KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1",
        "Mozilla/5.0 (X11; CrOS i686 2268.111.0) AppleWebKit/536.11 "
        "(KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11",
        "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.6 "
        "(KHTML, like Gecko) Chrome/20.0.1092.0 Safari/536.6",
        "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.6 "
        "(KHTML, like Gecko) Chrome/20.0.1090.0 Safari/536.6",
        "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.1 "
        "(KHTML, like Gecko) Chrome/19.77.34.5 Safari/537.1",
        "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/536.5 "
        "(KHTML, like Gecko) Chrome/19.0.1084.9 Safari/536.5",
        "Mozilla/5.0 (Windows NT 6.0) AppleWebKit/536.5 "
        "(KHTML, like Gecko) Chrome/19.0.1084.36 Safari/536.5",
        "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 "
        "(KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3",
        "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/536.3 "
        "(KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3",
        "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_0) AppleWebKit/536.3 "
        "(KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3",
        "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 "
        "(KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3",
        "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 "
        "(KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3",
        "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 "
        "(KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3",
        "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 "
        "(KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3",
        "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.3 "
        "(KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3",
        "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 "
        "(KHTML, like Gecko) Chrome/19.0.1061.0 Safari/536.3",
        "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.24 "
        "(KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24",
        "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/535.24 "
        "(KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24"
       ]

 

建立user agent池(user_agent_list)并在每次发送request之前从agent池中随机选取一项设置request的User_Agent。编写的UserAgent中间件的基类为UserAgentMiddle。

除此之外,要在settings.py(配置文件)中禁用默认的useragent并启用重新实现的User Agent。配置方法如下:

#取消默认的useragent,使用新的useragent
DOWNLOADER_MIDDLEWARES = {
        'scrapy.contrib.downloadermiddleware.useragent.UserAgentMiddleware' : None,
        'CSDNBlogCrawlSpider.spiders.rotate_useragent.RotateUserAgentMiddleware' :400
    }

至此配置完毕。现在可以运行看下效果。

\

可以发现一直在变化的UserAgent。

4.策略四:使用IP池

web server应对爬虫的策略之一就是直接将你的IP或者是整个IP段都封掉禁止访问,这时候,当IP封掉后,转换到其他的IP继续访问即可。

可以使用Scrapy+Tor+polipo

配置方法与使用教程可参见:http://pkmishra.github.io/blog/2013/03/18/how-to-run-scrapy-with-TOR-and-multiple-browser-agents-part-1-mac/。有时间我会翻译过来。

5.策略五:分布式爬取

这个,内容就更多了,针对scrapy,也有相关的针对分布式爬取的GitHub repo。可以搜一下。


本文转载自:http://www.2cto.com/os/201406/312688.html

共有 人打赏支持
Airship
粉丝 34
博文 852
码字总数 18996
作品 0
南京
高级程序员
scrapy 如何防止被BAN

说在尝试设置download_delay小于1,并且无任何其他防止被ban的策略之后,我终于成功的被ban了。 关于scrapy的使用可参见之前文章: http://blog.csdn.net/u012150179/article/details/349133...

ok绷forever
2016/10/25
45
0
南航戴振东:仿生学研究需要与生物学家跨界交流,目前最缺的是人才

2004 年,南航第一代「大壁虎」仿生机器人问世。历经 7 年更新完善,研究团队在改善运动协调、远程控制以及电动机更新等问题的基础上,2011 年,终于成功实现「大壁虎」的 90 度自由爬行。 ...

思颖
06/26
0
0
观点 | 我们能否复制DeepMind的成功?

  机器之心报道   参与:李泽南、刘晓坤      总部位于英国伦敦的DeepMind是一家人工智能尖端技术公司,成立于2010年。它曾被Facebook、谷歌等巨头争相收购,最终被谷歌于2014年1月用...

机器之心
2017/12/26
0
0
【复盘DeepMind2017】国际最顶级AI实验室:战柯洁、打星际、巨亏背后

AlphaGo 回顾2017,不仅仅局限于DeepMind,AlphaGo也是不可跳过的关键词。在这一年,AlphaGo不仅没有沉寂,还完成了质的飞跃。 AlphaGo Master/Ke Jie/Zero→AlphaZero 首先是2016年底至201...

技术小能手
2017/12/22
0
0
CCF-ADL 87期回顾:韩家炜等13 位大牛全方位解析社交网络和数据挖掘

  AI 科技评论按:2017 年 12 月 22-24 日,由中国计算机学会(CCF)主办的第 87 期 CCF 学科前沿讲习班(CCF Advanced Disciplines Lectures,简称 ADL)在北京中国科学院计算技术研究所成...

AI科技评论
2017/12/25
0
0
实现人工智能,主要包含三个核心问题?

  人工智能是有McCarthy于1956年提出,属于人类三大尖端技术之一。近十年来,人工智能取得了许多重要的成果。小到手机里的智能语音助手,再到基于物联网与大数据的智能家居,以及已经上路的...

深度学习
05/05
0
0
动态 | 清华新成立两大交叉研究机构,探索智能与未来

  AI 科技评论按:12月15日下午,清华大学脑与智能实验室、未来实验室正式揭牌成立,成立仪式在清华大学主楼举行。   AI 科技评论了解到,设立的“清华大学脑与智能实验室”和“清华大学...

AI科技评论
2017/12/18
0
0
MIT最新:机器学习首次模仿大脑处理声音,能辩歌词和歌曲分类

     大数据文摘作品   编译:大茜、笪洁琼、云舟   你是否对于Spotify之类的软件产生过这样的疑问:“Spotify,你放音乐的时候在想什么?”实际上这类软件可能会像你一样思考。   ...

大数据文摘
05/08
0
0
数据科学家是干什么的?听七位受欢迎的专业人士发表见解

  我们来跟上这些从事该职业的独角兽的步伐,了解使他们取得成就的工作、技能和教育。   来会一会数据科学家   我们中的很多人上大学时,那时没有数据科学家的职位。这是分析数据的科学...

大数据头条
01/03
0
0
CCF ADL 87讲习班回顾:韩家炜等13位大牛全方位解析社交网络和数据挖掘

雷锋网 AI 科技评论按:2017 年 12 月 22-24 日,由中国计算机学会(CCF)主办的第 87 期 CCF 学科前沿讲习班(CCF Advanced Disciplines Lectures,简称 ADL)在北京中国科学院计算技术研究...

camel
2017/12/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

about git flow

  昨天元芳做了git分支管理规范的分享,为了拓展大家关于git分支的认知,这里我特意再分享这两个关于git flow的链接,大家可以看一下。 Git 工作流程 Git分支管理策略   git flow本质上是...

qwfys
今天
2
0
Linux系统日志文件

/var/log/messages linux系统总日志 /etc/logrotate.conf 日志切割配置文件 参考https://my.oschina.net/u/2000675/blog/908189 dmesg命令 dmesg’命令显示linux内核的环形缓冲区信息,我们可...

chencheng-linux
今天
1
0
MacOS下给树莓派安装Raspbian系统

下载镜像 前往 树莓派官网 下载镜像。 点击 最新版Raspbian 下载最新版镜像。 下载后请,通过 访达 双击解压,或通过 unzip 命令解压。 检查下载的文件 ls -lh -rw-r--r-- 1 dingdayu s...

dingdayu
今天
1
0
spring boot使用通用mapper(tk.mapper) ,id自增和回显等问题

最近项目使用到tk.mapper设置id自增,数据库是mysql。在使用通用mapper主键生成过程中有一些问题,在总结一下。 1、UUID生成方式-字符串主键 在主键上增加注解 @Id @GeneratedValue...

北岩
今天
2
0
告警系统邮件引擎、运行告警系统

告警系统邮件引擎 cd mail vim mail.py #!/usr/bin/env python#-*- coding: UTF-8 -*-import os,sysreload(sys)sys.setdefaultencoding('utf8')import getoptimport smtplibfr......

Zhouliang6
今天
1
0
Java工具类—随机数

Java中常用的生成随机数有Math.random()方法及java.util.Random类.但他们生成的随机数都是伪随机的. Math.radom()方法 在jdk1.8的Math类中可以看到,Math.random()方法实际上就是调用Random类...

PrivateO2
今天
3
0
关于java内存模型、并发编程的好文

Java并发编程:volatile关键字解析    volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在...

DannyCoder
昨天
1
0
dubbo @Reference retries 重试次数 一个坑

在代码一中设置 成retries=0,也就是调用超时不用重试,结果DEBUG的时候总是重试,不是0吗,0就不用重试啊。为什么还是调用了多次呢? 结果在网上看到 这篇文章才明白 https://www.cnblogs....

奋斗的小牛
昨天
2
0
数据结构与算法3

要抓紧喽~~~~~~~放羊的孩纸回来喽 LowArray类和LowArrayApp类 程序将一个普通的Java数组封装在LowArray类中。类中的数组隐藏了起来,它是私有的,所以只有类自己的方法才能访问他。 LowArray...

沉迷于编程的小菜菜
昨天
1
0
spring boot应用测试框架介绍

一、spring boot应用测试存在的问题 官方提供的测试框架spring-boot-test-starter,虽然提供了很多功能(junit、spring test、assertj、hamcrest、mockito、jsonassert、jsonpath),但是在数...

yangjianzhou
昨天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部