赞
踩
序、在爬虫中为何要使用随机请求头?
服务器会判断一个频繁的请求是不是来自于同一个User-Agent标识,或者判断User-Agent是不是以python开头。如果是,则会限制访问。
解决方案:随机切换User-Agent的值
一、在爬虫中为何要使用IP代理
客户端的IP地址是唯一的,所以开发者便将IP地址作为客户端的身份标识。
服务器会判断一个频繁的请求是不是来自于同一个IP地址发出的,对于访问速度过高或者访问次数过多的IP,则会对IP进行反爬虫限制访问。
对于访问速度的处理:间隔一段时间爬取一次,避免频繁访问;
对于访问次数的处理:使用代理IP,随机切换IP地址,不使用真实的IP来发起请求。
二、解决方案
搭建IP代理池,原理如下图所示:
其中又包括免费获取和付费获取两种方式。
首先介绍免费获取代理ip池的方法。
优点:免费
缺点:
1.代理ip稳定性差需要经常更换
2.爬取后ip存在很多不可用,ip需要定期筛选
三、免费获取代理ip池主要思路
1.从代理ip网站获取IP列表
2.检测ip是否能用
3.随机选择ip
4.使用代理ip爬取网站
几个能提供免费代理的代理服务网站:
66代理:
http://www.66ip.cn/
西刺代理:
https://www.xicidaili.com
全网代理:
http://www.goubanjia.com
云代理:
http://www.ip3366.net
IP海:
http://www.iphai.com
快代理:
https://www.kuaidaili.com
免费代理IP库:
http://ip.jiangxianli.com
以获取“66代理”ip列表为例,发现ip存储在标签下的第一个标签内,可采用正则表达式提取。
以获取“66代理”前2页的IP为例,代码如下:
#从ip代理网站获取ip列表
import requests
import re
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.82 Safari/537.36'
}
ip_list=[]
for i in range(1,3):
if i==1:
url='http://www.66ip.cn/index.html'
else:
url=f'http://www.66ip.cn/{i}.html'
r= requests.get(url, headers=headers)
ip_list_single_page = re.findall('<tr><td>(.*?)</td>',r.text)[1:]
ip_list.extend(ip_list_single_page)
获取的IP列表如下:
因为我们是爬取的免费的IP,所以我们要对其进行检测,看看是否有效。判断是否有效的方法就是加上代理ip给百度发送get请求,看看status_code()的返回码是不是200,检测代码如下:
#检测ip有效性,获取有效ip列表
valid_ip_list=[]
for ip in ip_list:
try:
proxies= {'https': 'https://' + ip,
'http': 'http://' + ip}
r= requests.get('https://www.baidu.com', headers=headers,proxies=proxies)
if r.status_code == 200:
valid_ip_list.append(ip)
except:
print('ip无效')
很遗憾,运行结果显示,我们获取的上述ip均无效。
我们发现,免费ip代理获取的ip几乎都不能用。
便宜没好货,好货不便宜!
假设,如果,我们从免费代理网站获取的IP是有效的,得到有效IP列表valid_ip_list不为空,后续就应该随机选择IP,代码如下:
#在有效ip列表中随机取出一个ip
import random
def get_random_ip(valid_ip_list):
ip=random.choice(valid_ip_list)
proxies= {'https': 'https://' + ip,
'http': 'http://' + ip} #proxies的格式是一个字典:{‘http’: ‘http://123.123.321.123:808‘}
return proxies
代码如下:
#使用代理ip访问网页
url='https://www.baidu.com'
proxies=get_random_ip(valid_ip_list)
r=requests.get(url,proxies=proxies,headers=headers)
免费IP代理的最大缺点在于大部分IP是无效的。
如果你想学习Python帮助你实现自动化办公,或者准备学习Python或者正在学习,下面这些你应该能用得上,有需要可以领取。
① Python所有方向的学习路线图,清楚各个方向要学什么东西
② 100多节Python课程视频,涵盖必备基础、爬虫和数据分析
③ 100多个Python实战案例,学习不再是只会理论
④ 华为出品独家Python漫画教程,手机也能学习
⑤历年互联网企业Python面试真题,复习时非常方便
文末有领取方式哦
Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
用通俗易懂的漫画,来教你学习Python,让你更容易记住,并且不会枯燥乏味。
我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
这份完整版的Python全套学习资料已经上传CSDN,朋友们如果需要也可以扫描下方csdn官方二维码或者点击主页和文章下方的微信卡片获取领取方式,【保证100%免费】
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。