Python实例题:Python自动获取海量IP工具
目录
Python实例题
题目
实现思路
代码实现
代码解释
get_proxy_list 函数:
check_proxy_validity 函数:
save_valid_ips 函数:
主程序:
运行思路
注意事项
Python实例题
题目
Python自动获取海量IP工具
实现思路
- 发送网络请求:借助
requests
库向代理 IP 网站发送请求,从而获取包含 IP 信息的网页内容。 - 解析网页内容:利用
BeautifulSoup
库解析 HTML 页面,提取出 IP 地址和端口号。 - 验证 IP 有效性:通过向特定网站发送请求,检验 IP 是否可用。
- 存储有效 IP:把有效的 IP 存储到文件或者数据库中。
代码实现
import requests
from bs4 import BeautifulSoup
import random
import time# 目标网站 URL
target_url = 'https://www.89ip.cn/index_{}.html'
# 测试 IP 有效性的网站
test_url = 'https://www.baidu.com'
# 存储有效 IP 的列表
valid_ips = []def get_proxy_list(page_num):"""从指定页面获取代理 IP 列表:param page_num: 页面编号:return: 代理 IP 列表,每个元素为 (IP 地址, 端口号)"""url = target_url.format(page_num)headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}try:response = requests.get(url, headers=headers)response.encoding = response.apparent_encodingsoup = BeautifulSoup(response.text, 'html.parser')table = soup.find('table', class_='layui-table')if table:rows = table.find_all('tr')[1:]proxy_list = []for row in rows:cols = row.find_all('td')ip = cols[0].text.strip()port = cols[1].text.strip()proxy_list.append((ip, port))return proxy_listexcept Exception as e:print(f"获取页面 {page_num} 时出错: {e}")return []def check_proxy_validity(proxy):"""检查代理 IP 是否有效:param proxy: 代理 IP,格式为 (IP 地址, 端口号):return: 代理 IP 是否有效"""ip, port = proxyproxies = {'http': f'http://{ip}:{port}','https': f'https://{ip}:{port}'}try:response = requests.get(test_url, proxies=proxies, timeout=5)if response.status_code == 200:return Trueexcept Exception:passreturn Falsedef save_valid_ips():"""将有效 IP 保存到文件"""with open('valid_ips.txt', 'w') as f:for ip, port in valid_ips:f.write(f'{ip}:{port}\n')if __name__ == "__main__":# 抓取前 5 页的 IPfor page_num in range(1, 6):proxy_list = get_proxy_list(page_num)if proxy_list:for proxy in proxy_list:if check_proxy_validity(proxy):valid_ips.append(proxy)print(f"有效 IP: {proxy[0]}:{proxy[1]}")# 随机延时,避免被反爬机制封禁time.sleep(random.uniform(1, 3))# 保存有效 IP 到文件save_valid_ips()print("有效 IP 已保存到 valid_ips.txt 文件中。")
代码解释
-
get_proxy_list
函数:- 依据传入的页面编号,构建目标 URL。
- 发送 HTTP 请求获取页面内容。
- 运用
BeautifulSoup
解析 HTML 页面,提取 IP 地址和端口号。 - 返回代理 IP 列表。
-
check_proxy_validity
函数:- 构建代理字典,包含
http
和https
代理。 - 向测试网站发送请求,设置超时时间为 5 秒。
- 若响应状态码为 200,则认为该 IP 有效。
- 构建代理字典,包含
-
save_valid_ips
函数:- 把有效 IP 列表中的 IP 地址和端口号保存到
valid_ips.txt
文件中。
- 把有效 IP 列表中的 IP 地址和端口号保存到
-
主程序:
- 循环抓取前 5 页的 IP 信息。
- 对每个 IP 进行有效性检查,若有效则添加到
valid_ips
列表中。 - 每次检查后随机延时 1 - 3 秒,防止被反爬机制封禁。
- 最后将有效 IP 保存到文件中。
运行思路
- 安装依赖库:确保已经安装了
requests
和beautifulsoup4
库,可使用pip install requests beautifulsoup4
进行安装。 - 运行脚本:在终端中运行
python ip_fetcher.py
,脚本会自动抓取 IP 信息并进行有效性检查。 - 查看结果:脚本运行结束后,有效 IP 会被保存到
valid_ips.txt
文件中。
注意事项
- 反爬机制:不同的代理 IP 网站有不同的反爬机制,频繁请求可能会导致 IP 被封禁。可以通过设置请求头、控制请求频率、使用代理 IP 等方式绕过反爬机制。
- IP 质量:免费代理 IP 的质量参差不齐,可能存在不稳定、速度慢等问题。在实际使用中,需要根据需求选择合适的代理 IP。
- 合法性:确保获取和使用代理 IP 的行为符合相关法律法规和网站的使用条款。