目录

一、一句话核心

二、我经常用的反反爬技术:

2.1 模拟请求头

2.2 伪造请求cookie

2.3 随机等待间隔

2.4 使用代理IP

2.5 验证码破解

三、爬虫写得好,牢饭吃到饱?


关于应对爬虫的反爬,最近整理了一些心得,落笔成文,复盘记录下。

一、一句话核心

应对反爬策略多种多样,但万变不离其宗,核心一句话就是:

"爬虫越像人为操作,越不会被检测到反爬。"

二、我经常用的反反爬技术:

2.1 模拟请求头

request header,其中最关键的一项,User-Agent,可以写个agent_list,每次请求,随机选择一个agent,像这样:

agent_list = ["Mozilla/5.0 (Linux; U; Android 2.3.6; en-us; Nexus S Build/GRK39F) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1","Avant Browser/1.2.789rel1 (http://www.avantbrowser.com)","Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/532.5 (KHTML, like Gecko) Chrome/4.0.249.0 Safari/532.5","Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US) AppleWebKit/532.9 (KHTML, like Gecko) Chrome/5.0.310.0 Safari/532.9","Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/534.7 (KHTML, like Gecko) Chrome/7.0.514.0 Safari/534.7","Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) AppleWebKit/534.14 (KHTML, like Gecko) Chrome/9.0.601.0 Safari/534.14","Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.14 (KHTML, like Gecko) Chrome/10.0.601.0 Safari/534.14","Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.20 (KHTML, like Gecko) Chrome/11.0.672.2 Safari/534.20","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.27 (KHTML, like Gecko) Chrome/12.0.712.0 Safari/534.27","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.24 Safari/535.1","Mozilla/5.0 (Windows NT 6.0) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.120 Safari/535.2","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.7 (KHTML, like Gecko) Chrome/16.0.912.36 Safari/535.7","Mozilla/5.0 (Windows; U; Windows NT 6.0 x64; en-US; rv:1.9pre) Gecko/2008072421 Minefield/3.0.2pre","Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10"]

在调用的时候,随机选取一个就可以了:

'User-Agent': random.choice(agent_list)

当然,你也可以使用fake_useragent(一个前人集成好的随机UA库)这个库,但有时候不好使,通常会报一个这种Error:

fake_useragent.errors.FakeUserAgentError: Maximum amount of retries reached

遇到这种报错不要慌,简单粗暴一点,把fake_useragent的json内容down到本地,目的是把从网站服务器获取,改为从本地获取,就可以避免timeout这种Error了。

json获取地址:https://fake-useragent.herokuapp.com/browsers/0.1.11

2.2 伪造请求cookie

发送请求的时候,request header里面,加上"cookie"这一项,伪造自己登陆了的假象。

从哪里获取"cookie"值呢?同样是按F12打开浏览器开发者模式,找到目标地址对应的headers->request headers,找到cookie这一项,把值复制下来。

查看网页的cookie值

放到爬虫代码的请求头里,类似这样:

把cookie值粘到爬虫代码

2.3 随机等待间隔

每次发送请求后,sleep随机等待时间,像这样:

time.sleep(random.uniform(0.5, 1)) # 随机等待时间是0.5秒和1秒之间的一个小数

尽量不要用sleep(1)、sleep(3)这种整数时间的等待,一看就是机器。。
还是那句话,让爬虫程序表现地更像一个人!

2.4 使用代理IP

使用代理IP解决反爬。(免费代理不靠谱,最好使用付费的。有按次数收费的,有按时长收费的,根据自身情况选择)
是什么意思呢,就是每次发送请求,让你像从不同的地域发过来的一样,第一次我的ip地址是河北,第二次是广东,第三次是美国。。。像这样:

def get_ip_pool(cnt):"""获取代理ip的函数"""url_api = '获取代理IP的API地址'try:r = requests.get(url_api)res_text = r.textres_status = r.status_codeprint('获取代理ip状态码:', res_status)print('返回内容是:', res_text)res_json = json.loads(res_text)ip_pool = random.choice(res_json['RESULT'])ip = ip_pool['ip']port = ip_pool['port']ret = str(ip) + ':' + str(port)print('获取代理ip成功 -> ', ret)return retexcept Exception as e:print('get_ip_pool except:', str(e))
proxies = get_ip_pool() # 调用获取代理ip的函数
requests.get(url=url, headers=headers, proxies={'HTTPS': proxies}) # 发送请求

这样,对端服务器就会认为你/你们是很多地域的访客,就算访问很频繁,可能也不会反爬你!

2.5 验证码破解

关于验证码破解,我建议大家阅读崔庆才写的《Python3网络爬虫开发实战》

其中,第8章:验证码的识别,提到了四类验证码的破解:

  • 8.1 图形验证码的识别
  • 8.2 极验滑动验证码的识别
  • 8.3 点触验证码的识别
  • 8.4 微博宫格验证码的识别

在8.3章节里,作者提到用第三方打码平台超级鹰平台,我也应用到了下面这个案例。
用第三方打码平台,直接调用它的接口,省心省力。
我之前为了破解Google的recaptcha验证码,就这种:

调用的超级鹰的图像识别打码方法。大致思路是:

  1. 把页面弹出的验证码图片元素,截图保存到本地。
  2. 按照打码平台的图片大小要求,用PIL库进行缩放、裁剪并保存。
  3. 把处理好的图片,通过调用平台api发送给打码平台服务器,平台识别成功后返回坐标值对,利用python的selenium库依次点击相应坐标,完成验证码的自动识别。(此期间需逻辑判断,如果平台返回有误,需重新触发点击操作,直至验证成功)

顺便贴一下python代码:

def f_solve_captcha(v_infile, offset_x, offset_y, multiple=0.55):"""利用超级鹰识别验证码:param offset_x: x轴偏移量:param offset_y: y轴偏移量:param v_infile: 验证码图片:param multiple: 图片缩小系数:return: 验证码识别结果坐标list"""outfile = 'new-' + v_infile# 1、图片缩小到超级鹰要求:宽不超过460px,高不超过310pximg = Image.open(v_infile)w, h = img.sizew, h = round(w * multiple), round(h * multiple)  # 去掉浮点,防报错img = img.resize((w, h), Image.ANTIALIAS)img.save(outfile, optimize=True, quality=85)  # 质量为85效果最好print('pic smaller done!')# 2、调用超级鹰识别chaojiying = Chaojiying_Client(cjy_username, cjy_password, cjy_soft_id)im = open(outfile, 'rb').read()ret = chaojiying.PostPic(im, 9008)print(ret)loc_list2 = []if ret['err_no'] == 0:  # 返回码0代表成功loc_list = ret['pic_str'].split('|')for loc in loc_list:loc_x = round(int(loc.split(',')[0]) / multiple)loc_y = round(int(loc.split(',')[1]) / multiple)loc_list2.append((loc_x + offset_x, loc_y + offset_y))print('超级鹰返回正确,loc_list2 is:')print(loc_list2)print('长度是:{}'.format(len(loc_list2)))else:print('超级鹰返回错误!错误码:{},错误内容:{}'.format(ret['err_no'], ret['err_str']))return loc_list2

路过的爬虫大佬,可以给我支个招,我感觉这个办法太笨了,有点楞~

三、爬虫写得好,牢饭吃到饱?

关于爬虫这门开发技术,是否触犯法律,一直争议不断。我们作为技术人员,要时刻警醒自己,什么能爬,什么不能爬,心中要有一杆称:

  1. 爬之前,花费你珍贵的10秒钟,看看目标网页的robots.txt,如果人家明确写了User-agent: * Disallow: / ,再爬就是你的不对了不是。。看不懂robots语法的,请自行移步:https://developers.google.com/search/reference/robots_txt?hl=zh-cn
  2. 别爬敏感数据、隐私数据
  3. 别把数据商用,自己做数据分析,练练手就好
  4. 如果目标网站对外开放了API接口,就直接用吧,别自己写网页爬虫了。正门给你敞开了,你非要爬窗户进,咋地?职业习惯吗??
  5. 别可劲儿爬、可劲儿造,收着点儿,千万别给对端服务器造成访问影响,甚至宕机!

我们身为程序猿/程序媛,写代码是为了让这个世界变得更美好,一定要做遵纪守法的好公民!

peace~

同步公众号文章:

【道高一尺,魔高一丈】Python爬虫之如何应对网站反爬虫策略关于应对爬虫的反爬,最近整理了一些心得,落笔成文,复盘记录下。一、一句话核心应对反爬策略多种多样,但万变不离https://mp.weixin.qq.com/s?__biz=MzU5MjQ2MzI0Nw==&mid=2247484238&idx=1&sn=e68f02ba613b0eea88da40e013d2f756&chksm=fe1e17aec9699eb81c0063dc0f259425cd3316deb1507ac2b0854426dbf9d10c7ee38c12e948&token=928226833&lang=zh_CN#rd


我是马哥,全网累计粉丝上万,欢迎一起交流python技术。

各平台搜索“马哥python说”:知乎、哔哩哔哩、小红书、新浪微博。

【道高一尺,魔高一丈】Python爬虫之如何应对网站反爬虫策略相关推荐

  1. python应对反爬虫策略_如何应对网站反爬虫策略?如何高效地爬大量数据?

    看了回答区,基本的反爬虫策略都提到了,下面说几个作为补充. 1.对于处理验证码,爬虫爬久了通常网站的处理策略就是让你输入验证码验证是否机器人,此时有三种解决方法:第一种把验证码down到本地之后,手动 ...

  2. python爬虫反爬 对方是如何丧心病狂的通过css_如何应对网站反爬虫策略?如何高效地爬大量数据?...

    爬虫(Spider),反爬虫(Anti-Spider),反反爬虫(Anti-Anti-Spider),这之间的斗争恢宏壮阔... Day 1 小莫想要某站上所有的电影,写了标准的爬虫(基于HttpCl ...

  3. python 反爬策略_如何应对网站反爬虫策略?如何高效地爬大量数据?

    爬虫(Spider),反爬虫(Anti-Spider),反反爬虫(Anti-Anti-Spider),这之间的斗争恢宏壮阔... Day 1 小莫想要某站上所有的电影,写了标准的爬虫(基于HttpCl ...

  4. python pptp proxy_Python爬虫使用代理IP突破反爬虫限制

    说起Python爬虫的发展史,那简直是与反爬虫相爱相杀的血泪史.在互联网中,有网络爬虫的地方,绝对少不了反爬虫的身影.网站反爬虫的拦截前提是要正确区分人类访问用户和网络机器人,当发现可疑目标时,通过限 ...

  5. 【华为云技术分享】云小课 | WAF反爬虫“三板斧”:轻松应对网站恶意爬虫

    反爬虫是一个复杂的过程,针对爬虫常见的行为特征,WAF反爬虫三板斧--Robot检测(识别User-Agent).网站反爬虫(检查浏览器合法性)和CC攻击防护(限制访问频率)可以全方位帮您解决业务网站 ...

  6. 用python实现一个政府类网站通用爬虫模板

    当然,以下是一个用Python编写的政府类网站通用爬虫模板的示例代码: import requests from bs4 import BeautifulSoupdef government_craw ...

  7. 代理ip网站开发_网站反爬虫策略,用代理IP都能解决吗?

    很多人会使用到网页采集器,其实这也是通过程序来进行采集的,如果没有使用代理IP,采集速度快了,照样是会被封住的.另外,这些网站还有其他的一些反爬策略,同样也会影响到我们采集网页的数据,这是如何限制的呢 ...

  8. 网站反爬虫策略VS反反爬虫策略

    网站反爬虫策略 1.通过User-Agent校验反爬 2.通过访问频度反爬 3.通过验证码校验反爬 4.通过变换网页结构反爬 5.通过账号权限反爬 反反爬虫策略制定 1.发送模拟User-Agent: ...

  9. python反爬虫破解_python中绕过反爬虫的方法总结

    我们在登山的途中,有不同的路线可以到达终点.因为选择的路线不同,上山的难度也有区别.就像最近几天教大家获取数据的时候,断断续续的讲过header.地址ip等一些的方法.具体的爬取方法相信大家已经掌握住 ...

  10. 网站反爬虫的策略有哪些

    网站有许多反爬虫策略,包括但不限于:1.阻止IP地址:目标网站通过阻止某些IP地址来阻止爬虫的访问.2.验证码:目标网站要求用户在提交表单时输入验证码,以便爬虫无法通过表单提交获取数据.3.User- ...

最新文章

  1. 《BI那点儿事》三国人物智力分布状态分析
  2. 剑网三缘起不赚钱也要为玩家送福利!这就是为了老玩家的情怀吧
  3. 彻底解决网络爬虫遇到的中文乱码问题
  4. 4.18、Bootstrap V4自学之路-----内容---滚动监听
  5. javascript --- js中的作用域 变量提升
  6. java中Comparable实现对象的比较
  7. php mysql百万级数据_PHP+MySQL百万级数据插入的优化
  8. C# 从DataTable中取值
  9. 更加简洁且通用的ViewHolder写法
  10. 2018年Android面试题整理
  11. 为了解决架构的问题,我们需要先理解敏捷的真谛
  12. 大话设计模式之----状态模式
  13. Springboot毕设项目餐厅后勤管理系统cxjgl(java+VUE+Mybatis+Maven+Mysql)
  14. 西门子atch指令详解_西门子plc指令中文详解
  15. 健身教练教你跑步减肥的正确方法
  16. Excel 条件格式查重问题
  17. android ui 切图工具,APP切图标注教程:UI设计切图标注的小工具实用技巧
  18. 计算机用户密码在哪里设置,电脑开机密码在哪里设置?怎么设置?
  19. 转载 :高中时候想的一个脑洞大开的故事
  20. 赠书 | 年终盘点:超融合架构(HCI)的现状和前景; 中国HCI厂商列表; 全球有哪些HCI厂商?

热门文章

  1. 调通sina33下的AP6212A0(WIFI+BT)(V1.1版本)
  2. 博世BMI160驱动程序 C语言编程,如何使用PSoC 6制作完整的测试系统来与BMI160进行通话...
  3. 计算机软件方面的核心期,计算机方面期刊_计算机方面适合阅读的期刊_计算机八大核心期刊...
  4. SAXReader解析xml文件
  5. 2022-05-24 游程编码与位图压缩(C++)
  6. Bulletproofs: Short Proofs for Confidential Transactions and More学习笔记
  7. 华硕aura完全卸载_更快,更信仰,华硕RTX 2070电竞显卡
  8. java 追加文件换行_java 追加换行txt
  9. ogg格式文件怎么转mp3格式
  10. 使用git上传uni-app项目到Gitee