python3之爬虫代理IP的使用+建立代理IP池

article/2025/10/24 4:05:30

爬虫代理IP的使用+建立代理IP池

      • 代理`IP`的使用
      • 建立代理`IP`池
      • 完整代码

代理IP的使用

  • 先了解一下百度百科定义的IP
    ???

  • 为什么要使用代理IP?
    反爬(反网络爬虫)

  • 示例:
    测试网址

http://httpbin.org/get

  • 用浏览器先访问测试网址下看看
    test

  • 再用我们写的代码简单请求一下网页看看

import requests
url='http://httpbin.org/get'html=requests.get(url=url).text
print(html)
"""
{"args": {},"headers": {"Accept": "*/*","Accept-Encoding": "gzip, deflate","Host": "httpbin.org","User-Agent": "python-requests/2.23.0","X-Amzn-Trace-Id": "Root=1-5ff704d4-3841771516040beb29f6066f"},"origin": "1.192.244.128","url": "http://httpbin.org/get"
}
"""

疑惑???

“User-Agent”: “python-requests/2.23.0”

网站如何来判定是人类正常访问还是爬虫程序访问? —> 检查请求头!!!
我们是不是需要发送请求时重构一下User-Agent???
添加 headers参数!!!

那就使用fake_useragent 模块
让它伪造一个出来再试试

import requests
from fake_useragent import UserAgent
url='http://httpbin.org/get'headers={'User-Agent':UserAgent().random}html=requests.get(url=url,headers=headers).text
print(html)
"""
{"args": {},"headers": {"Accept": "*/*","Accept-Encoding": "gzip, deflate","Host": "httpbin.org","User-Agent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:17.0) Gecko/20100101 Firefox/17.0.6","X-Amzn-Trace-Id": "Root=1-5ff7a4de-05f8d7bf49dfe85e3be31d79"},"origin": "1.192.244.128","url": "http://httpbin.org/get"
}
"""

“User-Agent”: “Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:17.0) Gecko/20100101 Firefox/17.0.6”

添加好headers的参数就可以了吗?
这还不行吗!!!
study

一些网站不但检测 请求头
一个IP 异常请求频繁(访问频率过多) 封禁?

“origin”: “1.192.244.128”

这是一项就是博主的IP, 我怎么确定这就是我的IP呢?
查询一下:果真如此
在这里插入图片描述
找个免费的代理IP来包装下

  1. 定义
    代替你原来的IP地址去对接网络的IP地址
  2. 作用
    隐藏自身真实IP, 避免被封
  3. 获取代理IP网站
    快代理、全网代理、代理精灵、… …

这次加上代理IP再去请求下

import requests
from fake_useragent import UserAgent
url='http://httpbin.org/get'
headers={'User-Agent':UserAgent().random}# 参数类型
# proxies
# proxies = {'协议': '协议://IP:端口号'}
proxies = {'http': 'http://{}'.format('8.129.28.247:8888'),'https': 'https://{}'.format('8.129.28.247:8888'),}html=requests.get(url=url,headers=headers,proxies=proxies).text
print(html)
"""
{"args": {},"headers": {"Accept": "*/*","Accept-Encoding": "gzip, deflate","Host": "httpbin.org","User-Agent": "Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1667.0 Safari/537.36","X-Amzn-Trace-Id": "Root=1-5ff7a71d-10b181340f8dc04f7514dfba"},"origin": "8.129.28.247","url": "http://httpbin.org/get"
}
"""

“origin”: “8.129.28.247”

这次和我们加入的IP一样, 而不是我们自己的IP直接去请求了
但这一个够用吗?
???
别着急往下看啦~~~

建立代理IP

构建一个IP
每次让它随机提供一个来请求不就解决一个IP请求频繁而导致封掉了
这样就达到我们想要的结果了

  • 定义一个测试函数
import requests
from fake_useragent import UserAgenttest_url = 'http://httpbin.org/get'headers = {'User-Agent': UserAgent().random}#                      参数 IP 地址
def test_proxy(proxy):'''测试代理IP是否可用'''proxies = {'http': 'http://{}'.format(proxy),'https': 'https://{}'.format(proxy),}# 参数类型# proxies# proxies = {'协议': '协议://IP:端口号'}# timeout 超时设置 网页响应时间3秒 超过时间会抛出异常try:resp = requests.get(url=test_url, proxies=proxies, headers=headers, timeout=3)# 查看状态码   if resp.status_code == 200:print(proxy, '\033[31m可用\033[0m')else:print(proxy, '不可用')except Exception as e:print(proxy, '不可用')

get一下HTTP状态码

完整代码

  • 本次涉及到xpath对此不了解的同学可以去了解博主之前的博客
  • 也可以去菜鸟教程自行了解一下
  • 本次以 快代理 提供的免费IP 获取为例
# 建立属于自己的开放代理IP池
import requests
import random
import time
from lxml import etree
from fake_useragent import UserAgentclass IpPool:def __init__(self):# 测试ip是否可用urlself.test_url = 'http://httpbin.org/get'# 获取IP的 目标urlself.url = 'https://www.89ip.cn/index_{}.html'self.headers = {'User-Agent': UserAgent().random}# 存储可用ipself.file = open('ip_pool.txt', 'wb')def get_html(self, url):'''获取页面'''html = requests.get(url=url, headers=self.headers).textreturn htmldef get_proxy(self, url):'''数据处理  获取ip 和端口''' html = self.get_html(url=url)# print(html)elemt = etree.HTML(html)ips_list = elemt.xpath('//table/tbody/tr/td[1]/text()')ports_list = elemt.xpath('//table/tbody/tr/td[2]/text()')for ip, port in zip(ips_list, ports_list):# 拼接ip与portproxy = ip.strip() + ":" + port.strip()# print(proxy)# 175.44.109.195:9999self.test_proxy(proxy)def test_proxy(self, proxy):'''测试代理IP是否可用'''proxies = {'http': 'http://{}'.format(proxy),'https': 'https://{}'.format(proxy),}# 参数类型# proxies# proxies = {'协议': '协议://IP:端口号'}# timeout 超时设置 网页响应时间3秒 超过时间会抛出异常try:resp = requests.get(url=self.test_url, proxies=proxies, headers=self.headers, timeout=3)# 获取 状态码为200 if resp.status_code == 200:print(proxy, '\033[31m可用\033[0m')# 可以的IP 写入文本以便后续使用self.file.write(proxy)else:print(proxy, '不可用')except Exception as e:print(proxy, '不可用')def crawl(self):'''执行函数'''# 快代理每页url 的区别# https://www.kuaidaili.com/free/inha/1/# https://www.kuaidaili.com/free/inha/2/# .......# 提供的免费ip太多# 这里只获取前100页提供的免费代理IP测试for i in range(1, 101):# 拼接完整的urlpage_url = self.url.format(i)# 注意抓取控制频率time.sleep(random.randint(1, 4))self.get_proxy(url=page_url)# 执行完毕关闭文本self.file.close()if __name__ == '__main__':ip = IpPool()ip.crawl()

测试完这里博主的脸可能比较黑吧, 竟没几个可以用的!!!
由于提供的免费IP可用的机率很小
想构建自己的IP池的小伙伴, 可以去获取其它代理, 提供的免费代理IP.

这里给大家提供几个博主当时测试时可以使用的IP
nice

159.203.44.177:3128

203.202.245.62:80

8.210.88.234:3128

89.187.177.106:80

89.187.177.106:80

96.113.165.182:3128

IP的响应速度根据你机器所在的地理位置不同而有差异

作者:淮南子.
来源:CSDN
版权声明:本文为博主原创文章,原创不易,请尊重原创转载请附上博文链接!
在这里插入图片描述


http://chatgpt.dhexx.cn/article/SevROxvj.shtml

相关文章

教你创建一个免费的代理IP池(txt存储版本)

教你创建一个免费的代理IP池(txt存储版本) 很多人可能会为爬虫被ban,IP被封等反爬机制苦恼,接下来我就教给大家如何白嫖做一个代理IP池。 准备工作 首先是准备工作,因为是第一个版本,因此我打算先用txt存…

什么是代理IP池,如何构建?

什么是代理ip池? 通俗地比喻一下,它就是一个池子,里面装了很多代理ip。它有如下的行为特征: 1.池子里的ip是有生命周期的,它们将被定期验证,其中失效的将被从池子里面剔除。 2.池子里的ip是有补充渠道的&…

Python爬虫——怎么搭建和维护一个本地IP池

目录 背景 一、什么是本地代理IP池 二、代理IP池功能架构图 三、各个组件功能说明及示例代码 1. IP池管理器 2. 代理IP获取器 3. IP质量检测器 4、数据存储器 5、API接口层 6、应用程序 总结 背景 在我们进行爬虫工作时,经常需要使用代理IP。大多数代理…

搭建代理IP池的方法

突破次数的限制就可以使爬虫更高效的工作,代理IP是突破次数限制,提高爬虫高效工作的最好的工具。所以,很多人都想通过建立IP池的方法,实现换IP突破限制,那么这IP池如何进行搭建呢? 一,免费搭建代理IP池的方法 1.主要用途 当进行数据爬取的时候,有一部分网站是设置了一些…

scrapy中添加ip池的方法

scrapy中添加ip池的方法 我使用的是scrapy2.2 setting 中写下ip池 IPPOOL [{ipaddr:221.230.72.165:80}, {ipaddr:175.154.50.162:8118}, {ipaddr:111.155.116.212:8123},]在在中间件midllewares添加代码 from mypython.settings import IPPOOLfrom scrapy import signals …

Python爬虫 教程:IP池的使用

一、简介 爬虫中为什么需要使用代理 一些网站会有相应的反爬虫措施,例如很多网站会检测某一段时间某个IP的访问次数,如果访问频率太快以至于看起来不像正常访客,它可能就会禁止这个IP的访问。所以我们需要设置一些代理IP,每隔一…

如何建立爬虫代理ip池

目录 一、为什么需要建立爬虫代理ip池 二、如何建立一个爬虫代理ip池 原文地址:https://www.cnblogs.com/TurboWay/p/8172246.html 一、为什么需要建立爬虫代理ip池 在众多的网站防爬措施中,有一种是根据ip的访问频率进行限制的,在…

requests模块代理IP池搭建视频爬取

requests模块&代理IP池搭建 一 requests模块使用1.1 get请求1.2 url编码和解码1.3 携带请求头1.4 携带cookie1.5 发送post请求1.6 requests.session1.7 Response1.8 获取二进制数据1.9 解析json 二 使用代理三 django后端获取客户端ip地址四 爬取视频网站五 爬取新闻六 Bau…

Python之爬虫 搭建代理ip池

文章目录 前言一、User-Agent二、发送请求三、解析数据四、构建ip代理池,检测ip是否可用五、完整代码总结 前言 在使用爬虫的时候,很多网站都有一定的反爬措施,甚至在爬取大量的数据或者频繁地访问该网站多次时还可能面临ip被禁,…

如何构建一个自己的代理ip池

一、默认自动切换IP 登录线程IP池客户端时,默认情况下会自动切换IP。 如果不想自动切换IP,或者还没有准备开始使用,请在客户端右侧将“在IP过期前几秒自动申请切换”设置为“0”。 0无效。 二.默认情况下不需要授权 默认情况下&#xff0c…

搭建代理IP池

目录 爬取前的准备 爬取有IP内容 检查IP的可用性 上一期讲到在爬取豆瓣电影Top250时,出现ip被封的情况,解决方案给出了两种: 1. 换个WiFi或者热点; 2. 搭建代理IP池。 那么这期就来搭建代理IP池。通常来说,搭建代理…

python搭建ip池

在爬取网站的时候我们有时候会遭受封ip等显现,因此我们需要搭建自己的ip池用于爬虫。 代码过程简述: 1、爬取代理ip网站信息 2、将获取的信息处理得到ip等关键信息 3、保存首次获取的ip信息并检测其是否可用 4、检测完毕将可用ip保存,搭…

搭建免费代理IP池

👨‍💻博客主页:i新木优子👀 🎉欢迎关注🔍点赞👍收藏⭐留言📝 🧚‍♂️寄语:成功的秘诀就是每天都比别人多努力一点👣 ✨有任何疑问欢迎评论探讨 先声明一下&…

python搭建ip池(多线程)

之前有讲过怎么搭建ip池,但由于单线程的效率太低,于是我们升级改造一下,将单线程变成多线程来搭建ip池,之前的方法可以参考一下:python搭建ip池 (如果会简单的request和提取文字就可以直接不看)…

教你自己搭建一个IP池(绝对超好用!!!!)

随着我们爬虫的速度越来越快,很多时候,有人发现,数据爬不了啦,打印出来一看。 不返回数据,而且还甩一句话 是不是很熟悉啊? 要想想看,人是怎么访问网站的? 发请求,对…

Python爬虫实战(二):爬取快代理构建代理IP池

目录 🌹前言构建IP池的目的爬取目标准备工作代码分析第一步第二步第三步第四步第五步完整代码使用方法 🌹前言 博主开始更新爬虫实战教程了,期待你的关注!!! 第一篇:Python爬虫实战(…

ERROR 1062 (23000): Duplicate entry '%-root' for key 'PRIMARY'

MySQL> update user set host% where user root; ERROR 1062 (23000): Duplicate entry %-root for key PRIMARY 然后查看了下数据库的host信息如下: host已经有了%这个值,所以直接运行命令: 复制代码 代码如下: MySQL>flush priv…

Mysql 报错 ERROR 1062 (23000): Duplicate entry ‘%-root‘ for key ‘PRIMARY‘

文章目录 错误详情错误原因解决方案最后 错误详情 今天在云主机上配置Hive时,设置远程连接的权限报错如下: 错误原因 之前电脑上已经有了%, 解决方案 查看一下电脑中是否已经具有% select host,user from user where userroot;如果已经存…

ORA-20000

exec dbms_stats.gather_database_stats(ESTIMATE_PERCENT>100, method_opt > FOR ALL INDEXED COLUMNS SIZE AUTO, cascade>true, degree>120);在12c和19c中,想要启用资源管理,必须先把并发收集统计信息禁用。 alter system set resource_…

mysql一张表复制到另外一张表,报错[23000][1062] Duplicate entry ‘1‘ for key ‘big_2.PRIMARY‘

mysql一张表复制到另外一张表 insert into big_2 select * from big_4 报错 [23000][1062] Duplicate entry 1 for key big_2.PRIMARY 看报错,是big_2的主键已经有1了,不能再插入相同的值,我这边id是自增字段,指定插入字段就能解决…