【道高一尺,魔高一丈】Python爬虫之如何应对网站反爬虫策略_反爬虫 request header(1)

本文介绍了如何在Python爬虫中实现随机等待间隔以模拟人类行为,使用代理IP避免反爬策略,以及验证码破解的方法,强调了遵守法律法规和合理使用技术的重要性。同时提供了Python学习资源和最佳实践指南。
摘要由CSDN通过智能技术生成

把cookie值粘到爬虫代码

2.3 随机等待间隔

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

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

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

img

2.4 使用代理IP

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

def get_ip_pool(cnt):
	"""获取代理ip的函数"""
	url_api = '获取代理IP的API地址'
	try:
		r = requests.get(url_api)
		res_text = r.text
		res_status = r.status_code
		print('获取代理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 ret
	except 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验证码,就这种:

img

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,高不超过310px
	img = Image.open(v_infile)
	w, h = img.size
	w, 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: / ,**再爬就是你的不对了不是。
  2. 别爬敏感数据、隐私数据
  3. 别把数据商用,自己做数据分析,练练手就好
  4. 如果目标网站对外开放了API接口,就直接用吧,别自己写网页爬虫了。正门给你敞开了,你非要爬窗户进,咋地?职业习惯吗??
  5. 别可劲儿爬、可劲儿造,收着点儿,千万别给对端服务器造成访问影响,甚至宕机!

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

关于Python技术储备

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】

一、Python学习大纲

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
在这里插入图片描述

二、Python必备开发工具

在这里插入图片描述

三、入门学习视频

如果你也是看准了Python,想自学Python,在这里为大家准备了丰厚的免费学习大礼包,带大家一起学习,给大家剖析Python兼职、就业行情前景的这些事儿。

一、Python所有方向的学习路线

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

二、学习软件

工欲善其必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。

三、全套PDF电子书

书籍的好处就在于权威和体系健全,刚开始学习的时候你可以只看视频或者听某个人讲课,但等你学完之后,你觉得你掌握了,这时候建议还是得去看一下书籍,看权威技术书籍也是每个程序员必经之路。

四、入门学习视频

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

四、实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

五、面试资料

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

成为一个Python程序员专家或许需要花费数年时间,但是打下坚实的基础只要几周就可以,如果你按照我提供的学习路线以及资料有意识地去实践,你就有很大可能成功!
最后祝你好运!!!

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里无偿获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值