首页 > 其他分享 >爬虫中的代理问题

爬虫中的代理问题

时间:2023-04-04 09:47:11浏览次数:32  
标签:ip 爬虫 Agent 代理 问题 User IP proxies

最近身边很多人都遇到爬虫中的爬虫ip问题,写下这篇博客来记录自己所学,希望可以帮助到你们。

可能很多人都会问为什么我需要用爬虫ip呢?不用不可以吗?用了爬虫ip之后发现爬虫抓取数据的速度反而下降了不少于是放弃爬虫爬虫ip的使用。

如果我们只是进行少量数据的爬取,用本机的IP与User-Agent去抓取数据完全OK,没问题。你可以关闭网页了,因为我下面要讲的东西你用不上。如果你需要大规模爬取数据请接着往下看。

当你抓取的数据达到一定量后,你会发现程序会时不时给你报错,而且频率越来越来高。这说你的爬虫被人家识别出来了,对方的反扒系统已经记住了你。通常会告诉你连接超时、连接中断更有甚者不会直接中断你程序,它会给你一些假数据或者将你的爬虫带入一个死循环,还有许多诸如此类的反扒措施这里就不一一介绍了。

面对网站中的反扒系统,我们可以做的又有哪些呢?这里我们主要讲解爬虫ipUser-Agent的应用与IP的爬取及应用。

一、User-Agent

(一)什么是User-Agent

User-Agent是一个特殊字符串头,被广泛用来标示浏览器客户端的信息,使得服务器能识别客户机使用的操作系统和版本,CPU类型,浏览器及版本,浏览器的渲染引擎,浏览器语言等。

不同的浏览器(IE,FF,Opera, Chrome等)会用不同的用户爬虫ip字符串(User Agent Strings)作为自身的标志,当搜索引擎(Google,Yahoo,Baidu,Bing)在通过网络爬虫访问网页时,也会通过用户爬虫ip字符串来进行自身的标示,这也是为何网站统计报告能够统计浏览器信息,爬虫信息等。网站需要获取用户客户端的信息,了解网站内容在客户端的展现形式,一些网站通过判断UA来给不同的操作系统,不同的浏览器发送不同的页面,不过这也可能造成某些页面无法再某个浏览器中正常显示.

(二)获取随机User-Agent与使用

1. 安装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的网站

http://jshk.com.cn/mb/reg.asp?kefu=xjy

(二)爬虫ip的使用

我这的IP是存放在txt文件当中,当然,如果需要抓取的数据比较多的话,建议还是将IP存储在数据库中。

1. 从本地文件中获取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后,程序还是会报错,这是为什么呢?

我们在买酸奶的时候都会留意一下保质期,为什么呢?保质期短啊,短的七八过期,长的也只有30来天。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更多知识参见:爬虫爬虫ip

如有不足欢迎留言指正!

标签:ip,爬虫,Agent,代理,问题,User,IP,proxies
From: https://www.cnblogs.com/q-q56731526/p/17285326.html

相关文章

  • 动态代理
    动态代理2.1好处:​ 无侵入式的给方法增强功能2.2动态代理三要素:1,真正干活的对象2,代理对象3,利用代理调用方法切记一点:代理可以增强或者拦截的方法都在接口中,接口需要写在newProxyInstance的第二个参数里。2.3代码实现:publicclassTest{publicstaticvoidmain(......
  • 【AGC】引入AGC插件SDK后应用出现中文名乱码问题
    【关键字】AGC、android、插件 【问题描述】开发者反馈应用集成了AGCAppLinking服务,在引入AGC插件时遇到了一些问题。引入AGC插件后应用的中文名出现乱码的问题,具体如下所述:在应用级的build.gradle中引入com.huawei.agconnect后应用中文名乱码1.在android/app/build.gradl......
  • magento 问题解答 FQA
    1.IsthereawaybymysqltosetALLproductvisibilitytocatalog,search? 批量修改产品可见 openuptheeav_attributetableandfindtherowwhereattribute_code=visibility.Takenoteoftheattribute_id,mostlikelyitwillbe85.Alsotakenotetha......
  • urilib: ajax&异常&cookie登陆&handler&代理[池]
    urllib_9_ajax的get请求豆瓣电影第一页""".-''-..--._..._.'.-.)|__|......
  • android 解决ScrollView嵌套ListView的问题,不能全屏,全屏不能显示下面控件
    在开发中遇到ScrollView嵌套ListView的问题,最开始发出不能全屏,效果是这样的;但我想要的效果是这样的:下面看一下布局文件:<?xmlversion="1.0"encoding="utf-8"?><ScrollViewxmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="fill_p......
  • P2756 飞行员配对方案问题
    一共有n个飞行员,其中有m个外籍飞行员和(n−m)个英国飞行员,外籍飞行员从1到m编号,英国飞行员从m+1到n编号。对于给定的外籍飞行员与英国飞行员的配合情况,设计一个算法找出最佳飞行员配对方案,使皇家空军一次能派出最多的飞机。 二分图板子题用网络流输出时,判断w[......
  • Android与STM32通信中巧妙解决中文乱码问题
    前言网上一大堆都是要多种格式相互转换,并且要很大的字库文件,对于小应用工程,小容量的STM32芯片,额外多出这些开销会感到蛮不舒服的,而且绝大部分的乱码问题时发生在STM32这边,所以本文是从Android端解决编码格式转化的问题,STM32那边稍做处理即可,我做的转换是从UTF-8转到GBK解决方案......
  • 11.迷宫问题
    原题链接:https://www.acwing.com/problem/content/description/1078/#include<iostream>#include<cstring>#include<vector>usingnamespacestd;#definexfirst#defineysecondtypedefpair<int,int>PII;constintN=1010;intn,hh,tt;in......
  • Redis常见问题答疑
    数据类型一个数据类型都对应了很多种底层数据结构。以List为例,什么情况下是双向链表,反之又在什么情况下是压缩列表呢?还是说是并存状态?1、Hash和ZSet是数据量少采用压缩列表存储,数据量变大转为哈希表或跳表存储2、但List不是这样,是并存的状态,List是双向链表+压缩列表key过期......
  • 【第27天】SQL进阶-查询优化- performance_schema系列实战三:锁问题排查(表级锁)(SQL 小虚
    回城传送–》《32天SQL筑基》文章目录零、前言一、什么是表级锁二、什么时候适合加表级锁三、实战演练3.1数据准备(如果已有数据可跳过此操作)3.2开启第一个会话,执行显式加表级锁3.3开启第二个会话,对该表执行update更新3.4开启第三个会话,查询线程信息3.5分析3.6释放第一个会话......