作者 | 奇猫

来源 | 51CTO

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

说几个爬虫的实际例子:

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

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

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

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

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

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

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

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)

运行出错,结果如下:

查看浏览器请求头信息与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。至此,我们成功解决第一个反爬问题。

  • 小红书,“黄”了

  • 苹果谷歌双双被曝,你的手机正在窃听你的生活

  • 遇事不决赖毛子,美国这次打算封杀变脸APP

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

  1. Python之网络爬虫(验证码、代理IP、防反爬策略、封装一个抓取页面的函数)

    文章目录 一.使用tesseract做OCR验证码识别 二.代理服务器设置 三.反爬与防反爬 四.封装一个抓取页面的函数 一.使用tesseract做OCR验证码识别 1.cookie, sessio ...

  2. python爬虫反爬策略_用Python语言做爬虫有哪些策略可以对抗反爬虫?

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 作为爬虫工程师,时常要为不断更新的反爬虫策略而苦恼,究竟是魔高一尺还是道高一丈,从来就没有真正的分出过胜负,一个为了完成爬虫工作,一个为了保卫网站不被爬虫 ...

  3. 爬虫反爬机制及反爬策略

    参考:https://www.cnblogs.com/LLBFWH/articles/10902533.html 爬虫是一种模拟浏览器对网站发起请求,获取数据的方法.简单的爬虫在抓取网站数据的时候,因 ...

  4. Python爬虫六:字体反爬处理(猫眼+汽车之家)-2018.10

    环境:Windows7 +Python3.6+Pycharm2017 目标:猫眼电影票房.汽车之家字体反爬的处理 ---全部文章: 京东爬虫 .链家爬虫.美团爬虫.微信公众号爬虫.字体反爬.Djang ...

  5. 爬虫中常见的反爬手段和解决方法

    每日分享: 欲成大树,莫与草争:将军有剑,不斩草蝇:遇烂入及时止损,遇烂事及时抽身.格局小的人喜欢诋毁和嫉妒,因为我不好,我也不想让你好.格局大的人都懂得一个道理,强者互帮,弱者互撕.人性最大的愚蠢就 ...

  6. 爬虫 人人车字体反爬分析(含源码)

    严重声明:本文仅用于学习交流,不得用于商业用途,同时希望大家遵循robots协议,维护网络和谐. 本猿最近在逛一些网站的时间.在打开浏览器的f12查看人家前端代码咋写的时候,经常会发现就是页面上显示的 ...

  7. 5种常见反爬策略及解决方案

    随着互联网的发展,越来越多的公司需要爬取各种数据来分析出自己公司业务的发展方向.而目前许多目标网站也有各种各样的措施来反爬虫,越是数据价值高的网站反爬做得也就越复杂.给大家列举了几个常见的反爬措施以及 ...

  8. 爬虫-网站地址及反爬机制

    爬虫-网站地址及反爬机制 1.安居客:https://cd.zu.anjuke.com/fangyuan/wuhou/x1/ - requests 2.贝壳找房:https://cd.zu.ke.co ...

  9. python爬虫反爬策略_抖音字体反爬,爬虫字体反爬策略——每周一个爬虫小教程系列...

    在B站上看到一个关于抖音字体反爬的视频,看完之后,精神抖擞,不禁感觉,我又行了,于是在模拟器上下载了一个抖音,打开了我尘封已久的抖音号. 可以看见显示的数字是正常的,但是查看源码就是错误的. 既然是字 ...

  10. 爬虫之常见的反爬手段和解决思路

    1 服务器反爬的原因 爬虫占总PV(PV是指页面的访问次数,每打开或刷新一次页面,就算做一个pv)比例较高,这样浪费钱(尤其是三月份爬虫). 三月份爬虫是个什么概念呢?每年的三月份我们会迎接一次爬虫高 ...

最新文章

  1. What is acceptable cell and suitable cell in LTE?
  2. Hooq 登陆新加坡,“亚洲版 Netflix ”要与对标公司抢夺东南亚视频市场
  3. C#数据结构与算法揭秘15
  4. java面试填空题 jsp_JSP基本面试的试题
  5. 清官谈mysql中utf8和utf8mb4区别,请使用utf8mb4
  6. 分享2018年陆陆续续读过的书-附书单
  7. 在 Windows 服务中托管 ASP.NET Core
  8. java定时器报错,定时器设置报错
  9. django url 生效_Django基础知识
  10. Linux_学习_Day3_bash
  11. linux 文件mtime,linux 文件的atime,ctime,mtime查看與修改
  12. 双时隙的工作原理_提高频点利用 海能达双时隙功能效率高
  13. 面试稳了!BATJ 等大厂 400+ 道面试题全汇总!
  14. java生成四位数字验证码_简单的随机生成4个数字验证码的实现
  15. cass生成里程文件桩号不全,cass生成桩号
  16. word怎么转pdf,word批量转pdf方法
  17. 利用图形制作个人简历,图形与形状
  18. Unity3d FingerGestures
  19. 第十一届蓝桥杯 b组
  20. 分子运动android,分子热运动

热门文章

  1. 2021 年最佳开源软件榜单出炉!
  2. 1024程序员节,别人家的公司真香!羡慕ing~
  3. 亿级流量架构服务限流,写得太好了!
  4. 还在搞三层架构?DDD 分层架构了解下!
  5. 最流行的 RESTful API 要怎么设计?
  6. 运维的日常:如果回到18岁,你还会选择运维行业么?
  7. 事业和家庭本就不能两全
  8. 爱我或者恨我,我就是我!
  9. redis cluster节点挂掉后_深入浅出—Redis集群的相关详解
  10. Java - HashMap源码解析