Python爬虫——新手使用代理ip详细教程
Python代理IP爬虫是一种可以让爬虫拥有更多网络访问权限的技术。代理IP的作用是可以为爬虫提供多个IP地址,从而加快其爬取数据的速度,同时也可以避免因为访问频率过高而被网站封禁的问题。本文将介绍如何使用Python实现代理IP的爬取和使用。
一、代理IP的获取
首先我们需要找到一个可用的代理IP源。这里我们以站大爷代理ip为例,站大爷代理提供了收费代理和普通免费的代理IP,使用起来非常方便。
站大爷代理ip的API接口地址:`https://www.zdaye.com/free/inha/1/`
通过请求上面的API接口,我们可以获取到一页代理IP信息,包括IP地址和端口号。我们可以通过requests库的get方法获取到API返回的信息,示例代码如下:
import requestsurl = 'https://www.zdaye.com/free/inha/1/'
response = requests.get(url)
print(response.text)
上面代码执行后,我们可以看到获取到的代理IP信息。但是我们需要对返回值进行解析,只提取出有用的IP地址和端口。
import requests
from bs4 import BeautifulSoupurl = 'https://www.zdaye.com/free/inha/1/'
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')proxies = []
for tr in soup.find_all('tr')[1:]:tds = tr.find_all('td')proxy = tds[0].text + ':' + tds[1].textproxies.append(proxy)print(proxies)
上面代码中,我们使用BeautifulSoup库对返回的HTML文本进行解析,获取到所有的`<tr>`标签,然后通过循环遍历每一个`<tr>`标签,提取出其中的IP地址和端口信息,并将其保存到一个列表中。
二、代理IP的验证
获取到代理IP后,我们需要进行测试,判断这些代理IP是否可用。这里我们通过requests库的get方法进行测试,如果返回200则说明该代理IP可用。我们使用代理IP的方法是通过向requests.get方法传入proxies参数来实现,示例代码如下:
import requestsurl = 'http://www.baidu.com'proxies = {'http': 'http://222.74.237.246:808','https': 'https://222.74.237.246:808',
}
try:response = requests.get(url, proxies=proxies, timeout=10)if response.status_code == 200:print('代理IP可用:', proxies)
except:print('代理IP不可用:', proxies)
在上面的代码中,我们向`http://www.baidu.com`发送请求,并使用了一个代理IP进行访问。如果返回HTTP状态码为200,则说明代理IP可用,否则说明不可用。
如果我们需要验证每一个代理IP,那么就需要对上面的代码进行循环遍历,例如:
import requests
from bs4 import BeautifulSoupurl = 'https://www.zdaye.com/free/inha/1/'response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')proxies = []
for tr in soup.find_all('tr')[1:]:tds = tr.find_all('td')proxy = tds[0].text + ':' + tds[1].textproxies.append(proxy)for proxy in proxies:proxies_dict = {'http': 'http://' + proxy,'https': 'https://' + proxy,}try:response = requests.get(url, proxies=proxies_dict, timeout=10)if response.status_code == 200:print('代理IP可用:', proxies_dict)except:print('代理IP不可用:', proxies_dict)
上面的循环代码中,我们先遍历了所有的代理IP,然后对每一个代理IP进行验证。如果该代理IP可用,则打印出来,否则输出不可用信息。
三、代理IP的测试
获取到可用的代理IP后,我们需要对其进行进一步的测试,确保其真正可用,然后再进行爬取。我们可以使用百度、360搜索等常用搜索引擎进行测试。在这里我们以百度为例,测试代理IP是否真正可用。
import requestsurl = 'http://www.baidu.com'proxies = {'http': 'http://222.74.237.246:808','https': 'https://222.74.237.246:808',
}
try:response = requests.get(url, proxies=proxies, timeout=10)if response.status_code == 200:if '百度一下' in response.text:print('代理IP可用:', proxies)else:print('代理IP不可用:', proxies)else:print('代理IP不可用:', proxies)
except:print('代理IP不可用:', proxies)
上面代码中,我们向百度发送了一个请求,并通过判断返回的HTML页面中是否含有‘百度一下’这个关键字来验证代理IP是否真正可用。
四、代理IP的使用
当我们获取到了可用的代理IP后,我们就可以使用它们来进行爬取了。在使用代理IP进行爬取时,我们需要将其作为proxies参数传入requests.get方法中,示例代码如下:
import requestsurl = 'http://www.baidu.com'proxies = {'http': 'http://222.74.201.49:9999','https': 'https://222.74.201.49:9999',
}
response = requests.get(url, proxies=proxies)
print(response.text)
上面代码中,我们使用了一个代理IP进行访问百度网站,并将其作为proxies参数传入requests.get方法中。如果该代理IP可用,则请求将会使用该代理IP进行访问。
五、完整代码
下面是一份完整的代码,包括代理IP的获取、验证、测试和使用,大家可以参考一下:
import requests
from bs4 import BeautifulSoup# 1. 获取代理IP列表
def get_proxy_list():# 构造请求头,模拟浏览器请求headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.82 Safari/537.36"}# 请求代理IP网页url = "http://www.zdaye.com/"response = requests.get(url, headers=headers)# 解析网页获取代理IP列表soup = BeautifulSoup(response.text, "html.parser")proxy_list = []table = soup.find("table", {"id": "ip_list"})for tr in table.find_all("tr"):td_list = tr.find_all("td")if len(td_list) > 0:ip = td_list[1].text.strip()port = td_list[2].text.strip()type = td_list[5].text.strip()proxy_list.append({"ip": ip,"port": port,"type": type})return proxy_list# 2. 验证代理IP可用性
def verify_proxy(proxy):# 构造请求头,模拟浏览器请求headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.82 Safari/537.36"}# 请求目标网页并判断响应码url = "http://www.baidu.com"try:response = requests.get(url, headers=headers, proxies=proxy, timeout=5)if response.status_code == 200:return Trueelse:return Falseexcept:return False# 3. 测试代理IP列表可用性
def test_proxy_list(proxy_list):valid_proxy_list = []for proxy in proxy_list:if verify_proxy(proxy):valid_proxy_list.append(proxy)return valid_proxy_list# 4. 使用代理IP发送请求
def send_request(url, headers, proxy):# 发送请求并返回响应结果response = requests.get(url, headers=headers, proxies=proxy)return response.text# 程序入口
if __name__ == "__main__":# 获取代理IP列表proxy_list = get_proxy_list()# 验证代理IP可用性valid_proxy_list = test_proxy_list(proxy_list)# 输出可用代理IPprint("有效代理IP列表:")for proxy in valid_proxy_list:print(proxy)# 使用代理IP发送请求url = "http://www.baidu.com"headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.82 Safari/537.36"}proxy = {"http": "http://" + valid_proxy_list[0]["ip"] + ":" + valid_proxy_list[0]["port"],"https": "https://" + valid_proxy_list[0]["ip"] + ":" + valid_proxy_list[0]["port"]}response = send_request(url, headers, proxy)print(response)
在上面的代码中,我们首先通过爬取西刺代理网站获取代理IP列表。然后,我们对每一个代理IP进行验证,判断其是否可用,并将可用的代理IP存入一个列表中。最后,我们选择一个可用的代理IP,并使用该代理IP发送请求。
六、总结
本文介绍了代理IP的基本概念、免费代理IP获取方法、Python使用代理IP的方法及示例代码,以及代理IP使用的注意事项。希望能够对爬虫的使用者有所帮助。
相关文章:

Python爬虫——新手使用代理ip详细教程
Python代理IP爬虫是一种可以让爬虫拥有更多网络访问权限的技术。代理IP的作用是可以为爬虫提供多个IP地址,从而加快其爬取数据的速度,同时也可以避免因为访问频率过高而被网站封禁的问题。本文将介绍如何使用Python实现代理IP的爬取和使用。 一、代理IP的…...

idea VCS配置多个远程仓库
Idea VCS配置多个远程仓库 首先要有连个远程仓库地址 idea 添加数据源 查看推送记录 添加数据源 ok之后填写账号密码 推送本地项目 选择不同远程地址 push 查看不同远程地址的 不同分支的 推送记录 不期而遇的温柔: 应用开源架构进行项目开发,特别是那…...
LKPNR: LLM and KG for Personalized News Recommendation Framework
本文是LLM系列文章,针对《LKPNR: LLM and KG for Personalized News Recommendation Framework》的翻译。 LKPNR:LLM和KG的个性化新闻推荐框架 摘要1 引言2 相关工作3 问题定义4 框架5 实验6 案例7 结论 摘要 准确地向用户推荐候选新闻文章是个性化新闻推荐系统面…...

Xshell只能打开一个会话、左边栏消失不见、高级设置在哪儿、快捷键设置解决
Xshell只能打开一个会话、左边会话栏消失不见、高级设置在哪儿解决 1.问题: xshell会话(窗口)上方切换栏不见了的处理办法 解决方法:ctrl shift t 2.问题: 左边会话管理器不见了 解决方法: 3.问题…...
Android Retrofit 高级使用与原理
简介 在 Android 开发中,网络请求是一个极为关键的部分。Retrofit 作为一个强大的网络请求库,能够简化开发流程,提供高效的网络请求能力。本文将深入介绍 Retrofit 的高级使用与原理,帮助读者更全面地理解和应用这一库。 什么是…...

Unity3D开发流程及注意事项
使用Unity3D开发游戏需要遵循一定的流程和注意事项,以确保项目的顺利进行并获得良好的结果。以下是一般的游戏开发流程以及一些注意事项,希望对大家有所帮助。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎交流合作。 游…...

表单引擎的自定义控件的概念与设计
基本概念 概述 控件的定义:用于展示或者采集数据的表单元素,称为控件,比如:文本框、下拉框、单选按钮、从表等.自定义控件:表单引擎提供的基础控件之外的控件称为自定义控件, 这些控件由开发人员自己定义,比如&#…...

leetcode刷题--栈与递归
文章目录 1. 682 棒球比赛2. 71 简化路径3. 388 文件的最长绝对路径4. 150 逆波兰表达式求值5. 227. 基本计算器II6. 224. 基本计算器7. 20. 有效的括号8. 636. 函数的独占时间9. 591. 标签验证器10. 32.最长有效括号12. 341. 扁平化嵌套列表迭代器13. 394.字符串解码 1. 682 棒…...

自然语言处理——数据清洗
一、什么是数据清洗 数据清洗是指发现并纠正数据文件中可识别的错误的最后一道程序,包括检查数据一致性,处理无效值和缺失值等。与问卷审核不同,录入后的数据清理一般是由计算机而不是人工完成。 ——百度百科 二、为什么要数据清洗 现实生…...
MySql学习笔记07——存储引擎介绍
存储引擎 Mysql中特有的术语,Oracle中没有。 存储引擎就是一个表存储/组织数据的方式。不同的存储引擎,表存储数据的方式不同。 指定存储引擎 在建表的时候可以在最后小括号的")"的右边使用: ENGINE来指定存储引擎。 CHARSET来…...
Java基础学习笔记-1
前言 Java 是一门强大而广泛应用的编程语言,它的灵活性和跨平台特性使其成为许多开发者的首选。无论您是刚刚入门编程,还是已经有一些编程经验,掌握 Java 的基础知识都是构建更复杂程序的关键。 本学习笔记旨在帮助您深入了解 Java 编程语言…...
以太坊虚拟机
1.概述 以太坊虚拟机 EVM 是智能合约的运行环境。它不仅是沙盒封装的,而且是完全隔离的,也就是说在 EVM 中运行代码是无法访问网络、文件系统和其他进程的。甚至智能合约之间的访问也是受限的。 2.账户 以太坊中有两类账户(它们共用同一个…...

说说BTree和B+Tree
分析&回答 B树索引是B树在数据库中的一种实现,是最常见也是数据库中使用最为频繁的一种索引。B树中的B代表平衡(balance),而不是二叉(binary),因为B树是从最早的平衡二叉树演化而来的。 接…...
8.1.3 Bit representation and coding - 解读
这段描述定义了一些序列,并规定了它们在编码信息时的使用方式。下面是对每个序列的解析: 1. 序列X:在位持续时间的一半之后,将发生一个“暂停”。这个序列用于表示逻辑“1”。 2. 序列Y:在整个位持续时间内,…...
spring 理解
spring容器 程序启动时,会给spring容器一个清单,清单中列出了需要创建的对象以及对象依赖关系,spring容器会创建和组装好清单中的对象,然后将这些对象存放在spring容器中,当程序中需要使用的时候,可以到容…...

实战SpringMVC之CRUD
目录 一、前期准备 1.1 编写页面跳转控制类 二、实现CRUD 2.1 相关依赖 2.2 配置文件 2.3 逆向生成 2.4 后台代码完善 2.4.1 编写切面类 2.4.2 编写工具类 2.4.3 编写biz层 2.4.4 配置mapper.xml 2.4.5 编写相应接口类(MusicMapper) 2.4.6 处…...

TCP机制之连接管理(三次握手和四次挥手详解)
TCP的连接管理机制描述了连接如何创建以及如何断开! 建立连接(三次握手) 三次握手的过程 所谓建立连接就是通信双方各自要记录对方的信息,彼此之间要相互认同;这里以A B双方确立男女朋友关系为例: 从图中可以看出,通信双方各自向对方发起一个"建立连接"的请求,同时…...

NLP(3)--GAN
目录 一、概述 二、算法过程 三、WGAN 1、GAN的不足 2、JS散度、KL散度、Wasserstein距离 3、WGAN设计 四、Mode Collapse and Mode Dropping 1、Mode Collapse 2、Mode Dropping 3、FID 四、Conditional GAN 一、概述 GAN(Generative Adversial Networ…...

无涯教程-JavaScript - IMLOG2函数
描述 IMLOG2函数以x yi或x yj文本格式返回复数的以2为底的对数。可以从自然对数计算复数的以2为底的对数,如下所示- $$\log_2(x yi)(log_2e)\ln(x yi)$$ 语法 IMLOG2 (inumber)争论 Argument描述Required/OptionalInumberA complex number for which you want the bas…...
SpringBoot复习:(61)拦截器(HandlerInterceptor)的用法
一、自定义拦截器: package cn.edu.tju.interceptor;import org.springframework.stereotype.Component; import org.springframework.web.servlet.HandlerInterceptor;import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRespo…...

网络编程(Modbus进阶)
思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?
编辑:陈萍萍的公主一点人工一点智能 未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战,在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...

基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销,平衡网络负载,延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...

定时器任务——若依源码分析
分析util包下面的工具类schedule utils: ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类,封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz,先构建任务的 JobD…...

多模态大语言模型arxiv论文略读(108)
CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题:CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者:Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...

Chromium 136 编译指南 Windows篇:depot_tools 配置与源码获取(二)
引言 工欲善其事,必先利其器。在完成了 Visual Studio 2022 和 Windows SDK 的安装后,我们即将接触到 Chromium 开发生态中最核心的工具——depot_tools。这个由 Google 精心打造的工具集,就像是连接开发者与 Chromium 庞大代码库的智能桥梁…...

破解路内监管盲区:免布线低位视频桩重塑停车管理新标准
城市路内停车管理常因行道树遮挡、高位设备盲区等问题,导致车牌识别率低、逃费率高,传统模式在复杂路段束手无策。免布线低位视频桩凭借超低视角部署与智能算法,正成为破局关键。该设备安装于车位侧方0.5-0.7米高度,直接规避树枝遮…...
Spring Boot + MyBatis 集成支付宝支付流程
Spring Boot MyBatis 集成支付宝支付流程 核心流程 商户系统生成订单调用支付宝创建预支付订单用户跳转支付宝完成支付支付宝异步通知支付结果商户处理支付结果更新订单状态支付宝同步跳转回商户页面 代码实现示例(电脑网站支付) 1. 添加依赖 <!…...

MeshGPT 笔记
[2311.15475] MeshGPT: Generating Triangle Meshes with Decoder-Only Transformers https://library.scholarcy.com/try 真正意义上的AI生成三维模型MESHGPT来袭!_哔哩哔哩_bilibili GitHub - lucidrains/meshgpt-pytorch: Implementation of MeshGPT, SOTA Me…...

20250609在荣品的PRO-RK3566开发板的Android13下解决串口可以执行命令但是脚本执行命令异常的问题
20250609在荣品的PRO-RK3566开发板的Android13下解决串口可以执行命令但是脚本执行命令异常的问题 2025/6/9 20:54 缘起,为了跨网段推流,千辛万苦配置好了网络参数。 但是命令iptables -t filter -F tetherctrl_FORWARD可以在调试串口/DEBUG口正确执行。…...