
qq:800819103
在线客服,实时响应
qq群
在线客服,实时响应
客服电话
400-998-9776转3爬虫代理在爬虫过程中出现的问题!爬虫工作者在爬虫的过程中经常遇到代理的问题,其实也有很多初入爬虫的程序来说他们的疑问就是不想用是不是也能完成任务?
如果你只是练手进行少量数据的爬取,用本机的IP与User-Agent去抓取数据我想应该没有什么问题,甚至说如果实在需要,你在网上到哪里都能划拉一些免费的IP代理,这样也能尽量的去较少你的经济压力
但是如果说你要进行大规模的数据抓取,你就真的就是要用到爬虫代理了,当你抓取的数据达到一定的阶段,程序就会经常给你报错,而且报错的频率也在不断的上升。这明显的就是别人把你找出来了,
对方的反扒系统已经记住了你。通常会告诉你连接超时、连接中断更有甚者不会直接中断你程序,它会给你一些假数据或者将你的爬虫带入一个死循环,还有许多诸如此类的反扒措施。
面对网站中的反扒系统,我们可以做的又有哪些呢我们可以做些什么?下面说说代理User-Agent的应用与IP的爬取及应用。
二、User-Agent (一)什么是User-Agent
User-Agent是一个特殊字符串头,被广泛用来标示浏览器客户端的信息,客户使用的操作系统,版本,CPU类型,浏览器及版本,浏览器的渲染引擎,浏览器语言等能够被服务器识别
不同的浏览器(IE,FF,Opera, Chrome等)会用不同的用户代理字符串(User Agent Strings)作为自身的标志,当搜索引擎(Google,Yahoo,Baidu,Bing)在通过网络爬虫访问网页时,也会通过用户代理字符串来进行自身的标示,这也是为何网站统计报告能够统计浏览器信息,爬虫信息等。网站需要获取用户客户端的信息,了解网站内容在客户端的展现形式,一些网站通过判断UA来给不同的操作系统,不同的浏览器发送不同的页面,不过这也可能造成某些页面无法再某个浏览器中正常显示.
更多关于User-Agent的讲解参见:User Agent的学习
(二)获取随机User-Agent与使用
安装fake_useragent:
pip install fake_useragent 2. 导入fake_useragent
from fake_useragent import UserAgent 3. fake_useragent的获取
headers = {'User-Agent':str(UserAgent().random)} ''' 代码含义:生成随机User-Agent ''' 4. User-Agent的使用
req = requests.get(url=url, headers=headers) ''' 将生成的随机User-Agent放入headers传入requests,get()中即可
''' 三、代理ip (一)代理IP的获取
市面上代理IP服务商还是不少的,你们可自己到网络上搜索,或者推荐一个精灵IP代理
(二)代理IP的使用 我这的IP是存放在txt文件当中,当然,如果需要抓取的数据比较多的话,建议还是将IP存储在数据库中。
从本地文件中获取ip:
def get_ip_list():
f=open('ip.txt','r')
ip_list=f.readlines()
f.close()
return ip_list
2. 生成随机IP:
def get_random_ip(ip_list):
proxy_ip = random.choice(ip_list)
proxy_ip=proxy_ip.strip('\n')
proxies = {'https': proxy_ip}
return proxies
3. IP的使用:
ip_list = get_ip_list proxies = get_random_ip(ip_list) req = requests.get(url=url, proxies=proxies,headers=headers)
(三)IP的检验
很多朋友在使用代理IP后,程序依旧还是错误的
原因很简单,你买了多久的IP,就有多久的保质期。每个IP都是有实效的,IP失效是很常见的。所以我们需要定时对IP的有效性进行检验
如何检验IP的有效性推荐阅读:代理ip中的proxies
我们在爬取代理IP的过程中会注意到这样一个有趣的现象,每个IP商家都会把它的所在地(北京、上海、欧洲等等)在旁边注明,这是为什么呢?
我之前在爬CSDN的过程中遇到一个问题困扰了我很久,同一个IP我拿去爬简书(具体是不是简书我记得不是很清楚了)没问题信息很快就抓取出来了,但是拿来爬CSDN就不行要么链接中断,要么就是请求超时。后来我做了大量的实验。得出这样一个结论:IP地址的所在位置会影响IP对于不同网站的质量。简单点来说,假设我拿一个位于IP美国的IP去爬美国的网站,从请求到响应的时间为2秒;我再拿这个IP去爬中国的网站,响应时间就是长于2秒甚至出现连接超时的错误。
鉴于上述,我建议大家在检验IP的有效性时,还是以目标网站为检验网站。我要爬A网站,那么我就拿A网站来检验IP的有效性。
四、如何应付网站的反扒系统 用上了随机User-Agent和代理IP大部分网站就没有什么问题了,但还是会出现一些反扒措施比较厉害的网站,我们拿具体的案例来解析。
情景一: 爬虫在运行但是许久没有数据出来
解决方案:timeout
try: proxies = get_random_ip(ip_list) headers = {'User-Agent':str(UserAgent().random)} req = requests.get(url=url, proxies=proxies,headers=headers,timeout=20) except: time.sleep(5) proxies = get_random_ip(ip_list) headers = {'User-Agent':str(UserAgent().random)} req = requests.get(url=url, proxies=proxies,headers=headers,timeout=20) ''' timeout=20:当请求超过20秒还没得到服务器的相应时中断请求 在中断请求后间隔5秒后更换新的User-Agent、IP重新发送请求 '''推荐阅读:浅谈开源IP代理池整体重构
以上是关于爬虫代理在爬虫过程中出现的问题的其解决方案,希望能解答大家在爬虫中遇到的一些问题。以上内容仅供参考!