爬虫套路知多少?反爬策略是关键

爬虫是获取数据的一种方式,网络上很多请求都是由爬虫发起的。

说几个爬虫的实际例子:

①想要做舆论分析,分析当前热点话题,可以爬取腾讯新闻,微博,今日头条等主流站点数据,然后进行分析;

②想要做电影推荐或影评分析,可以爬取豆瓣,猫眼等数据进行分析;

③想要做电商销售分析,可以爬取京东,淘宝商家数据进行分析;

当我们使用高并发或者分布式爬虫对这些站点进行抓取时,可能会损害站点利益:

①短时间内大量请求占用站点资源:网络带宽,服务器负载;

②如果我们获取数据,自己获益,可能会损害他人利益;

但是百度,谷歌等搜索引擎厂商无时无刻不在抓取信息,还有很多其他企业和个人也在抓取自己感兴趣信息。如何保护自己利益不受侵犯,企业从制定行业规范与技术两方面做了处理,这也是我们这节主要内容:

1.robots协议:爬虫规范;

2.常见反爬机制;

3.反爬机制应对方式;

<1>
robots协议

robots协议是一个文本文件,通过协议声明站点的哪些信息可以抓取,哪些禁止抓取。

robots协议位置:http://xxxx/robots.txt ;例如:百度https://www.baidu.com/robots.txt ,内容如下:

  
User-agent: Baiduspider
Disallow: /baidu
Disallow: /s?
Disallow: /ulink?
Disallow: /link?
Disallow: /home/news/data/

User-agent: Googlebot
Disallow: /baidu
Disallow: /s?
Disallow: /shifen/
Disallow: /homepage/
Disallow: /cpro
Disallow: /ulink?
Disallow: /link?
Disallow: /home/news/data/
... ...
User-agent: *
Disallow: /

robots协议相关说明如下:

我们来简单分析下百度的robots.txt

①User-agent:Baiduspider, Googlebot…是针对的搜索引擎

②Disallow:/baidu,/s?..禁止这些搜索引擎爬取相应的资源

③User-agent: * Disallow: /:禁止其他搜索引擎爬取任何资源,以上列出的除外;

如果搜索引擎类型没有在百度的robots.txt声明中,禁止该引擎抓取本站的任何资源。

<2>

反爬虫策略与应对方式

robots协议定义了行业规范,但是很多开发者还是会进行暴力爬取,增加服务器负载,占用网络带宽,这就需要制定反爬策略,主要方式有下面几种:

①判断User-Agent,是否为浏览器;

②判断短时间内同一个IP访问次数;

③用户登录后才能访问资源;

④短时间用户使用不同IP访问资源,异常登录;

⑤验证码,滑动点击验证;

⑥数据加解密处理;

对于不同反爬策略,可以使用不同应对方式:

①User-Agent:发起请求时候添加头信息,伪装浏览器;

②短时间内访问次数限制:可以使用代理或者延时爬取;

③登录后访问:模拟登录保存cookie,请求时添加cookie信息;

④异常登录:准备大量账号,绑定不同代理进行爬取;

⑤验证码:使用Ocr,机器学习进行处理,但是准确率是一个问题;

⑥数据加解密处理:使用对应算法进行破解,或者使用selenium进行抓取;

本文主要解决User-Agent与短时间内访问次数限制。

<3>

例子:伪装浏览器

我们来看一个例子,使用浏览器访问某主页:http://www.xicidaili.com/ ;能够正常访问;然后使用urllib请求g该主页,代码如下:

from urllib import request
url= 'http://www.xicidaili.com/'
req = request.urlopen(url)
print(req.code)

运行出错,结果如下:

HTTPError                                 Traceback (most recent call last)
<ipython-input-6-07bc83b0cf79> in <module>()
      1 from urllib import request
      2 url= 'http://www.xicidaili.com/'
----> 3 req = request.urlopen(url)
... ...
HTTPError: HTTP Error 503: Service Temporarily Unavailable

查看浏览器请求头信息与User-Agent:

当我们使用urllib请求该主页,服务器检查User-Agent,认为这次请求不是浏览器请求,所以拒绝访问;我们可以在访问时添加请求头信息设置User-Agent,代码实现如下:

from urllib import request
#user-agent
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36'}
url= 'http://www.xicidaili.com/'
#创建Request对象,添加user-agent,伪装浏览器
reqhd = request.Request(url=url, headers=headers)
req = request.urlopen(reqhd)
print(req.code)

输出结果:200。至此,我们成功解决第一个反爬问题。

我整理了Python爬虫的学习资料,拿出来和大家分享,有需要的朋友可以扫描下方二维码进行领取哦
在这里插入图片描述

一、学习大纲

在这里插入图片描述

二、开发工具

在这里插入图片描述

三、Python基础资料

在这里插入图片描述

四、实战资料

在这里插入图片描述

今天的分享就到这里了,觉得有用的话,别忘了关注我哦

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值