《惊!Python轻松实现代理IP爬取,隐藏身份畅游网络!》

news/2025/1/29 7:23:08/文章来源:https://www.cnblogs.com/leyinsec/p/18692803

利用python进行代理ip爬取

源码

import requests
import parsel
import time

pages = 4
header = {
    'User-Agent''Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36 Edg/89.0.774.54'
}

# 打开文件以写入模式
with open('ip_ports.txt''w') as file:
    for page in range(1, pages + 1):
        print('正在爬取第{}页'.format(page))
        url = 'https://www.89ip.cn/index_{}.html'
        try:
            res = requests.get(url.format(page), headers=header, verify=False)
            res.raise_for_status()  # 检查请求是否成功
            sel = parsel.Selector(res.text)
            ip_list = sel.xpath('//tr')[1:]
            for i in ip_list:
                ip = i.xpath('./td[1]/text()').get().strip()
                port = i.xpath('./td[2]/text()').get().strip()
                ip_port = f'{ip}:{port}\n'
                print(ip_port, end='')
                file.write(ip_port)  # 将结果写入文件
        except requests.exceptions.RequestException as e:
            print(f'请求出错: {e}')
        time.sleep(1)

print("爬取完成,结果已保存到ip_ports.txt文件中")

源码讲解

这段代码是一个简单的Python爬虫程序,用于从指定的网站(https://www.89ip.cn/)抓取IP地址和端口号,并将结果保存到一个名为ip_ports.txt的文本文件中。以下是对代码的详细分析:

导入模块

import requests
import parsel
import time
  • requests:用于发送HTTP请求。
  • parsel:用于解析HTML内容。
  • time:用于在请求之间添加延迟。

定义变量

pages = 4
header = {
    'User-Agent''Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36 Edg/89.0.774.54'
}
  • pages:定义要爬取的页数,这里是4页。
  • header:设置请求头,模拟浏览器访问,以避免被网站屏蔽。

打开文件

with open('ip_ports.txt''w'as file:
  • 使用with语句打开一个名为ip_ports.txt的文件,并以写入模式('w')打开。这样可以确保文件在操作完成后自动关闭。

循环爬取每一页

for page in range(1, pages + 1):
    print('正在爬取第{}页'.format(page))
    url = 'https://www.89ip.cn/index_{}.html'
  • 使用for循环遍历从1到pages(这里是4)的页码。
  • 构造每一页的URL。

发送HTTP请求

try:
    res = requests.get(url.format(page), headers=header, verify=False)
    res.raise_for_status()  # 检查请求是否成功
  • 使用requests.get发送GET请求,并传递URL和请求头。
  • verify=False:禁用SSL证书验证(不推荐在生产环境中使用)。
  • res.raise_for_status():检查请求是否成功,如果失败则抛出异常。

解析HTML内容

sel = parsel.Selector(res.text)
ip_list = sel.xpath('//tr')[1:]
  • 使用parsel.Selector解析HTML内容。
  • 使用XPath选择器提取所有<tr>元素,并跳过第一个(通常是表头)。

提取IP和端口

for i in ip_list:
    ip = i.xpath('./td[1]/text()').get().strip()
    port = i.xpath('./td[2]/text()').get().strip()
    ip_port = f'{ip}:{port}\n'
    print(ip_port, end='')
    file.write(ip_port)  # 将结果写入文件
  • 遍历每个<tr>元素,提取第一个和第二个<td>元素的文本内容(IP和端口)。
  • 使用strip()去除空白字符。
  • 将IP和端口格式化为字符串,并写入文件。

异常处理

except requests.exceptions.RequestException as e:
    print(f'请求出错: {e}')
  • 捕获并处理所有requests.exceptions.RequestException异常,打印错误信息。

添加延迟

time.sleep(1)
  • 在每次请求后暂停1秒,以避免对目标网站造成过大压力。

完成提示

print("爬取完成,结果已保存到ip_ports.txt文件中")
  • 爬取完成后,打印提示信息。

总结

这段代码实现了一个简单的网页爬虫,用于从指定网站抓取IP地址和端口号,并将结果保存到本地文件中。通过使用requests库发送HTTP请求,parsel库解析HTML内容,并添加适当的延迟和异常处理,确保了爬虫的稳定性和可靠性。

代码安全性及意图

这段代码的意图是编写一个网络爬虫程序,用于从一个提供IP地址和端口号的网站(在这个例子中是https://www.89ip.cn/)抓取数据。爬虫程序的目的是自动访问网页,提取所需的信息(这里是IP地址和端口号),然后将这些信息保存到一个文本文件中,以便后续使用。

具体来说,这段代码的意图包括:

  1. 自动化数据抓取:通过编写脚本自动访问网页并提取数据,而不是手动复制粘贴。

  2. 数据存储:将抓取到的IP地址和端口号保存到一个文本文件中,方便后续的数据处理或使用。

  3. 模拟浏览器行为:通过设置User-Agent请求头,模拟浏览器访问,以避免被网站的反爬虫机制屏蔽。

  4. 错误处理:使用异常处理机制来捕获和处理网络请求中可能出现的错误,如连接失败、超时等。

  5. 遵守爬虫礼仪:通过在每次请求之间添加1秒的延迟,避免对目标网站造成过大的访问压力,这是一种遵守网络爬虫礼仪的做法。

  6. 灵活性:通过定义变量pages来控制要爬取的页数,使得程序可以根据需要轻松地调整抓取的范围。

  7. 可读性和维护性:代码结构清晰,注释和打印语句有助于理解程序的执行流程和状态。

总的来说,这段代码的目的是实现一个简单、有效的网络爬虫,用于自动化地从特定网站抓取IP地址和端口号,并将这些数据保存到本地文件中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/876306.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据库服务器 SQL Server 版本升级公告

祝大家春节快乐 !在明天(1月28日)的辞旧迎新之际,我们也安排了对园子的数据库服务器进行一次辞旧迎新,从 SQL Server 2016 升级至 SQL Server 2022。 我们使用的是阿里云 RDS 云数据库服务,升级将会由 RDS 自动完成,但在升级过程中的切换阶段会造成有段时间不能正常访问…

两种方式让你用Python轻松在RDKX5上部署推理

作者:SkyXZ CSDN:SkyXZ~-CSDN博客 博客园:SkyXZ - 博客园 宿主机环境:WSL2-Ubuntu22.04+Cuda12.6、D-Robotics-OE 1.2.8、Ubuntu20.04 GPU Docker 端侧设备环境:RDK X5-Server-3.1.0 2025年随着RDK X5的发布,地瓜官方随之也开放了RDK系列DNN推理部署的Python版的…

01. 初识Linux系统

一、什么是Ubuntu系统Ubuntu 操作系统是属于 Linux 操作系统中的一种,它是免费、稳定又可以拥有绚丽界面的一个操作系统。Linux,一般指 GNU/Linux(单独的 Linux 内核并不可直接使用,一般搭配 GNU 套件,故得此称呼),是一种免费使用和自由传播的类 UNIX 操作系统,其内核由…

学习elemetnPlus

学习了elementplus 学习了一个小时 其实就是查文档 做前端

20221320冯泰瑞-实验四密码模块应用实践过程记录

20221320冯泰瑞-实验四密码模块应用实践过程记录 实践要求完成电子公文交换系统,系统功能,(15 分)mindmaproot((电子公文系统))发文公文起草公文查看发文审核(审核员)公文发送公文查询收文公文签收公文查看公文处理公文查询系统管理组织单位用户管理操作员(科员)审核员…

android抓包相关操作指令

adb start-server adb connect 127.0.0.1:16384 adb rootadb shell su # 如果需要root权限mount -o remount,rw /systemadb push D:\\文档\\sixdu文档\\269953fb.0 /data/local/tmp adb push D:\\文档\\sixdu文档\\43b5e6bf.0 /data/local/tmpadb -s emulator-5554 push D:\\文…

四.1 Redis 五大数据类型/结构的详细说明/详细使用(List 列表数据类型详解和使用)

四.1 Redis 五大数据类型/结构的详细说明/详细使用(List 列表数据类型详解和使用) @目录四.1 Redis 五大数据类型/结构的详细说明/详细使用(List 列表数据类型详解和使用)2. list 列表常用指令(详细讲解说明)2.1 lpush/rpush <key><value1><value2>&l…

DeepSeek入门教程

一、简介 DeepSeek-V3 是一款高性能的开源 AI 模型,支持自然语言处理、智能对话生成等任务。其 API 接口与 OpenAI 完全兼容,用户可以通过简单的配置迁移现有项目,同时享受更低的成本和更高的性能。本文档将详细介绍如何快速接入 DeepSeek-V3 API 二、注册与API Key获取 1.注…

Archlinux 玩原神

首先你需要一台装载了archlinux的电脑,配置的话本人:Lenovo TianYi510S-07IMB Intel Core™ i5-10400 12 内存 8.0 GiB 磁盘 1 TB 玩的挺舒服的不会安装arch或者wine的看这里 然后本人是国际服Genshin Impact,国服同理(把下文的Genshin Impact当作yuanshen),参照官网安装…

C#/.NET/.NET Core技术前沿周刊 | 第 23 期(2025年1.20-1.26)

前言 C#/.NET/.NET Core技术前沿周刊,你的每周技术指南针!记录、追踪C#/.NET/.NET Core领域、生态的每周最新、最实用、最有价值的技术文章、社区动态、优质项目和学习资源等。让你时刻站在技术前沿,助力技术成长与视野拓宽。欢迎投稿、推荐或自荐优质文章、项目、学习资源等…

JQuery实现轮播图

一、html代码<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title> </he…

e语言 超级编辑框

本文来自博客园,作者:__username,转载请注明原文链接:https://www.cnblogs.com/code3/p/18692666