python3 网络爬虫(一)反爬虫之我见

来源:互联网 发布:系统还原的软件 编辑:程序博客网 时间:2024/05/21 22:23

环境:python3.4
win7
框架:scrapy

首先,在此只讲解基于scrapy的种种案例或者方法, 为啥。。。因为我只会用这个框架,所以请大家莫见笑

python3爬虫的基础知识就不多介绍了,有兴趣的朋友可以去看看这位仁兄的博客,内容非常的详细:http://my.csdn.net/c406495762

关于反爬虫,相信大家已经看过了网上很多文章了,但是都只是教了一些方法或者提供了一些干货,并没有告诉你这些东西的利弊,那么这一次我来简单地讲解一下在scrapy中如何反爬虫,楼主也是个小菜鸟,很多东西都是基于自己的理解,所以写的东西仅供参考,如果有错,请大家多多指出,方便本人今后改正,好了,开始。

为什么要知道如何反爬?
答:爬虫,对于被爬的一方是残酷的,你想想,人家辛辛苦苦获取的数据,你写代码就获取了,而且,爬虫会给他人的服务器带来压力,所以如果不是出于商业性,其实能不爬尽量就别去爬别人的网站(出于商业性就能做这事? 那必然,你工作的时候你不去爬数据,不给公司盈利,谁来给你发工资?),但是为了养活自己,该爬还真的要爬,既然你会爬,人家就会反爬,根据IP访问频率等等手段让你明白人家也不是吃素的; 不知道反爬,对自己来说也是可怕的,一旦被网站发现你在爬取数据,封禁你的IP这都是正常手段,有的时候一些生活网站的封禁,对大家的影响其实还是挺大的。

1、更变User-Agent, 这一招是最基本的,成本也是最低的,为什么这么说,这个东西更改起来很容易,而且,网上User-Agent很多,复制粘贴不花钱。
接下来我们说如果更变User-Agent,有两个方法:
(1)在middleware.py中添加User-Agent的中间件

(2)在setting.py里中利用random,让你每次的程序每次启动时都使用一个一个User-Agent

(3)代码需要贴吗,不知道会不会有人看。如果有需要贴,以后会贴的

2、在setting.py中设置: ROBOTSTXT_OBEY = False ,为什么要这么设置,可以参考这篇文档:http://blog.csdn.net/github_35160620/article/details/52586126

3、在setting.py中设置: COOKIES_ENABLED = False,大家在此会不会有疑问:如果将这个设置为False,那么当我想利用cookies来模拟登录新浪微博一类的网站时不就没办法用了吗? 之前我测试过,我在middleware中写了一个中间件来给我们的request加上cookies,当我将这个值设为True时报错,设置为False时不报错,因此,我个人观点是,如果你在middleware.py中构造了cookies,那么在这里你设置为False也不影响程序运行

———以上三点都是最基本的,说实话,只要稍微多做几个项目你就能对它们的用法心领神会,因此我们主要来说说剩下两点,剩下两点,才是爬虫初学者最不能领会的:

4、设置IP更换 :设置IP更换,可以在middleware.py中写一个中间件,先获取50到100个IP(当然你想获取更多也行) ,然后在每次发出request时附带一个IP,实现IP更换,这样的优点在于,你就可以在不危及到本机IP的前提下,对想要爬取的数据进行快速爬取(为什么要说快速,接下来会说到),缺点在于对于一些小公司,带宽有限的,你快速爬取大量数据意味着你一直占据着网速,对于其他人的效率也会造成一些影响,可以说是杀敌一千,自损八百,当然,大公司就没这顾虑了;当然还要说一点,代理IP你可以选择从代理网站上买或者直接爬下来用,或者你自己有其他备用IP(这就太好了),如果是从代理网站上买,一定要选一个靠谱的,现在很多代理网站虽然说出售专业版,但是你买下来发现不少的也是失效IP,或者之前被人大量使用已经被相关网站封禁,至于靠谱网站,我也不知道,我偶尔用西刺,但是他们给我的感觉就是上面所说的话。

5、中国所讲述的中庸之道:不快不慢,张弛有度才是真理,在第4点我们提到,使用代理IP快速爬取网站内容,为什么说快速?这里有点恶趣味,因为从代理网站买的IP不贵,因此被封大家都不心疼,其次是网站一般是通过IP访问频率来识别你是不是人为操作,更换IP,等于说你不是一直在用同一个IP在做这件事,降低了被反爬的风险,然而这样对于被爬的网站是一种危害,对于你自己也是一种危害,因为正处于被封禁的IP去访问网站,返回值有可能是503,返回一个错误页可能会让你的程序报错然后停止,快速地爬取网站,对网站也是一种伤害。以上说了那么多,其实就在说一个道理:爬取频率不要太快,同样的:在setting.py中设置 DOWNLOAD_DELAY 的值,一般设置为10s左右,个人感觉10s差不多了,一个人操作一个网页10s,很符合情理,因此几乎不会被抓到,虽然这样爬取速度慢了点,但是说实在话,对于一家想节约资金成本又想获得正确数据的小企业来说,是非常合适的!

本人第一次写博客,如这一行也没多久,很多东西可能有些以偏概全,所以有错误希望大家能够指出,谢谢大家,那么,下一次,我们将会来说说,基于post和get请求来获取被ajax渲染的动态数据,谢谢大家的收看,下次见

原创粉丝点击