龙空技术网

python爬虫实战之IP限制

13妖工作室 160

前言:

而今同学们对“python伪装ip”大致比较关心,朋友们都想要分析一些“python伪装ip”的相关内容。那么小编同时在网摘上搜集了一些对于“python伪装ip””的相关内容,希望我们能喜欢,看官们一起来学习一下吧!

在我们平时写爬虫时经常会遇到一些情况:本来写的爬虫一开始能正常爬取数据,运行一顿时间后有时候会出现错误比如403错误,网页上可能会出现“您的IP访问频率过高” 或者跳出一个验证码提示需要输入验证码。这就是触发了网站的一些反爬机制,比如限制IP访问频率,超过了预先设置的范围,服务器就会拒绝服务,返回一些错误或验证措施,这种情况就叫做IP限制。这时候我们就可以借助一些方法来伪装IP,让服务器无法识别我们的真实IP。现在引入一个新的概念代理IP。

一、何为代理IP

代理IP,即代理服务器,确实在网络访问中起到了一个中转站的作用。当个人浏览器或其他客户端设备发出网络请求时,这个请求会首先被发送到代理服务器,然后由代理服务器转发给目标网站。同样,目标网站的响应也会先发送到代理服务器,再由代理服务器转发给原始的请求者。这样,对于目标网站来说,它实际检测到的访问数据都来自于这个代理服务器,而不是原始的请求者。使用代理ip可以绕过目标网站限制,更好的抓取网络数据,可以自定义时间更换ip地址,提高爬虫效率。需要注意的是,虽然代理IP带来了很多便利,但使用不当也可能带来一些问题,比如数据安全问题、隐私泄露风险等。因此,在使用代理IP时,用户需要选择可靠的代理服务提供商,并遵守相关的法律法规和道德准则。

二、requests设置代理

以下程序演示了利用requests如何设置代理:

import requestsproxies={    "https":";}url=';resp=requests.get(url,proxies=proxies)resp.encoding='utf-8'print(resp.text)
三、代理池的构建

代理池顾名思义,就是好多代理IP组成的一个集合,我们称之为代理池。我们在做爬虫时一般对代理IP的需求量比较大,当我们请求时,从代理池中取出一个代理进行使用。要构建代理池,如果不差钱可以直接淘宝购买一些代理IP就可以了,既稳定又不是很贵。当然要马儿不吃草,还要马儿跑的快,我们可以从网上找一些免费的代理,通过我们的爬虫技术爬取下来也是可以的。无论采用哪种方式构建代理池,都需要定期验证代理的有效性,并及时剔除失效的代理。

下面的例子是从国内网站免费获取代理IP:

import  requestsfrom bs4 import  BeautifulSoupurl=";headers={"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36"}resp=requests.get(url,headers=headers)bs=BeautifulSoup(resp.text,'html.parser')res_list=bs.find_all('tr')ip_list=[]for res in res_list:    tds=res.find_all('td')    if tds:        ip_list.append({"IP":tds[0].text,"port":tds[1].text})#循环显示获取到的代理IPfor ip in ip_list:    print(ip)

获取到代理IP后我们要验证是否可用,方法比较简单就是连上代理后看2秒左右能不能打开百度网站,如果能打开说明可用,不能打开从代理池中剔除。

import  requestsimport  socketsocket.setdefaulttimeout(2)proxy='54.223.16.166:3128' #循环获取上面获取的代理IP 和端口proxies={'http':proxy}try:    res=requests.get(";,proxies=proxies)    if res.status_code==200:        print("当前代理IP可使用")except:    print("当前代理IP不可使用")

在实际项目中,我们可能会获取到很多的代理IP,这时候我们还是建议将验证过的IP存放到数据库中,如Redis 或其他数据库,每次使用时,我们直接从数据库中取就行了。

标签: #python伪装ip