Python 从零开始爬虫(一)——爬虫伪装&反“反爬”

溢出盆景
• 阅读 21754

  之前提到过,有些网站是防爬虫的。其实事实是,凡是有一定规模的网站,大公司的网站,或是盈利性质比较强的网站,都是有高级的防爬措施的。总的来说有两种反爬策略,要么验证身份,把虫子踩死在门口;要么在网站植入各种反爬机制,让爬虫知难而退。
  本节内容就着这两种反爬策略提出一些对策。

身份伪装

  就算是一些不知名的小网站,多多少少还会检查一下headers验证一下访者的身份,大网站就更不用说了(我一次爬网易云的时候,忘记加headers,直接被红掉)
  所以,为了让虫宝们带着信息凯旋归来,我们要教会爬虫们如何伪装;有时光伪装也不行,我们还要教爬虫具体"如何做人",让自己的举止更像普通人而不是比单身汉手速还快的未知生物。

自定制 Requests Headers

  • “吾是人!”——修改user-agent:里面储存的是系统和浏览器的型号版本,通过修改它来假装自己是人。
  • “我从河北省来”——修改referer:告诉服务器你是通过哪个网址点进来的而不是凭空出现的,有些网站会检查。
  • “饼干!”:——带上cookie,有时带不带饼干得到的结果是不同的,试着带饼干去“贿赂”服务器让她给你完整的信息。
  • 详细数据可以F12捉个包来查看其Requests Headers

Python 从零开始爬虫(一)——爬虫伪装&反“反爬”

headers = {'Referer':'https://accounts.pixiv.net/loginlang=zh&source=pc&view_type=page&ref=wwwtop_accounts_index',#如某些网站(如p站)要检查referer,就给他加上
           'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.146 Safari/537.36'#每个爬虫必备的伪装
          }
r = requests.get("https://segmentfault.com/a/1190000014383966",headers=headers)

headers数据通常用这两个即可,而且笔者强烈推荐在爬虫中为每个request都配个user-agent,总比什么都没有好,加了也不会报错。

降低主IP访问频率

注意:这是针对长期的,大范围的爬虫的

有些网站会监视某个ip的访问频率和次数,一但超过某个阈值,就把你当作爬虫嫌犯赶出去了,这时就要想办法降低自己的存在感了。

  • Zzzzz——休眠:爬一段时间后休息一会,不仅是为了自己的成功,也是为服务器着想。
  • 我不去,我派别人去——ip代理:通过proxies参数来使用,前提是你要有ip,好的ip代理是要花钱的。
time.sleep(60)#用python自带time模块的休眠功能
proxies = {'http': 'http://10.10.1.10:3128',#“协议类型:完整ip地址+端号”
           'https': 'http://10.10.1.10:1080'}#代理ip字典,随机调用
r = requests.get(url,headers=headers,proxies=proxies)

反 反爬(简析)

在系列第零篇中我提到获取网页源码是有坑的,没错,有些时候headers伪装什么的都做足了,可你还是不能如愿以偿的获得正确的网页源码,要么缺,要么给你一堆毫不相关的东西,要么干脆让你红掉。
这说明要点不是伪不伪装的问题了,而是如何去解读网页的防爬机制从而推出解决方法,这就要求比较高的观察和分析能力了

就我目前遇到的主要有:

  • 随机校验码:网页生成随机码,并要求你将其提交才接受你的请求(多用在登录验证中)。——这种校验码通常藏在网页源码中,先取再交是策略。
  • 无序网址:网址后跟着一大串看不出规律的东西。——跟这种东西是没话说的,直接上selenium
  • 加密/杂乱的源码:你知道你要的东西就在那里,但是不知道怎样提取出来。——推理解谜,看脑子好不好使了。
  • 动态加载:需要和页面交互才能获取更多信息,但是爬虫没法和它交互啊。——直接上selenium/手动捉包分析出目标链接
  • ajax技术:异步加载,网页内容分次加载,用爬虫只能得到第一次发出的html,导致信息不全。——上selenium/手动捉包分析出目标连接

补充:
selenium模块,模拟浏览器,强是强但是缺点是慢。
其实动态加载是为了方便用户点哪看哪的,但这也加大了爬虫的难度,因为很多信息因此被隐藏了起来。

最后

伪装有套路,代码直接套,多加headers总没错。

内嵌反爬很灵活,没有什么固定的代码格式,要花时间去分析出来。

本文新出现的方法/模块,后面会有实例,不要方。

下一篇正式进入网页解析主题,之后就可以开始写小爬虫了♪(^∀^●)ノ。

点赞
收藏
评论区
推荐文章
菜鸟阿都 菜鸟阿都
4年前
创建免费ip代理池
     反爬技术越来越成熟,为了爬取目标数据,必须对爬虫的请求进行伪装,骗过目标系统,目标系统通过判断请求的访问频次或请求参数将疑似爬虫的ip进行封禁,要求进行安全验证,通过python的第三方库faker可以随机生成header伪装请求头,并且减缓爬虫的爬取速度,能很好的避过多数目标系统的反扒机制,但对一些安全等级
Stella981 Stella981
4年前
Nginx反爬虫: 禁止某些User Agent抓取网站
一、概述网站反爬虫的原因不遵守规范的爬虫会影响网站的正常使用网站上的数据是公司的重要资产爬虫对网站的爬取会造成网站统计数据的污染常见反爬虫手段1\.根据IP访问频率封禁IP2\.设置账号登陆时长,账号访问过多封禁设置账号的登录限制,只有登录才能展现内容
Stella981 Stella981
4年前
Python爬虫实例:爬取猫眼电影——破解字体反爬
 字体反爬字体反爬也就是自定义字体反爬,通过调用自定义的字体文件来渲染网页中的文字,而网页中的文字不再是文字,而是相应的字体编码,通过复制或者简单的采集是无法采集到编码后的文字内容的。现在貌似不少网站都有采用这种反爬机制,我们通过猫眼的实际情况来解释一下。下图的是猫眼网页上的显示:!(https://oscimg.oschina.
python爬取数据中的headers和代理IP问题
爬虫的主要爬取方式之一是聚焦爬虫,也就是说,爬取某一个特定网站或者具有特定内容的网站,而一般比较大的有价值的网站都会有反爬策略,其中常见的反爬策略是网站根据来访者的身份判定是否予以放行。对来访者身份的判定一般基于headers里的userAgent值,每一
小白学大数据 小白学大数据
9个月前
如何通过requests和time模块限制爬虫请求速率?
一、为什么需要限制爬虫请求速率?在爬取网站数据时,网站服务器需要处理我们的请求并返回数据。如果爬虫的请求过于频繁,服务器可能会因为负载过高而崩溃,或者将我们的爬虫IP地址封禁。此外,许多网站都有反爬虫机制,例如检测单位时间内来自同一IP的请求频率。如果请求
小白学大数据 小白学大数据
3个月前
突破反爬:使用代理IP和User-Agent轮询爬取音乐数据
一、反爬虫机制的原理与应对策略在深入技术实现之前,我们有必要了解常见的反爬虫机制及其工作原理:1.IP频率限制:网站会监控单个IP地址的请求频率,如果短时间内请求过多,会判定为该IP存在爬虫行为,从而实施封禁。2.UserAgent检测:通过检查HTTP请
小白学大数据 小白学大数据
1个月前
随机间隔在 Python 爬虫中的应用实践
一、随机间隔的核心应用价值在深入技术实现之前,我们首先需要明确:为什么随机间隔在爬虫开发中如此重要?1.打破请求规律性,规避反爬检测网站的反爬系统通常会通过分析请求日志,识别具有固定时间间隔(如每1秒发送1次请求)、高频次的请求流量。这类流量明显区别于人类
网站反爬之封IP应对措施
作为爬虫工作者爬取数据是基本的技能,在日常获取数据的过程中遇到网站反爬也是家常事,网站的反爬方式有很多,今天我们重点来分析下封IP的行为。这种情况下大家都是很简单的使用代理IP就解决了,但是网上ip代理有很多家,到底选哪家好呢?这里推荐口碑很好的亿牛云
爬虫代理IP是什么?为什么需要它?
爬虫代理IP是什么?为什么需要它?爬虫代理IP是指使用其他计算机的网络地址来访问目标网站的一种技术。它可以隐藏爬虫程序的真实IP地址,避免被网站识别和封禁12。在进行网络数据采集时,我们经常会遇到一些反爬措施,比如网站限制同一个IP地址的访问频率、次数或时