【爬虫笔记】Python爬虫简单运用爬取代理IP

news2024/10/2 16:22:54

一、前言

近些年来,网络上的爬虫越来越多,很多网站都针对爬虫进行了限制,封禁了一些不规则的请求。为了实现正常的网络爬虫任务,爬虫常用代理IP来隐藏自己的真实IP,避免被服务器封禁。本文将介绍如何使用Python爬虫来获取代理IP,以及如何在爬虫中使用代理IP。

二、获取代理IP

获取代理IP有两种方式:免费代理IP网站和收费代理IP服务。免费代理IP网站通常提供一些免费的代理IP,但是这些代理IP质量很不稳定,很容易被封禁或失效;收费代理IP服务则提供稳定、可靠的代理IP,但需要付费购买。由于本文主要介绍如何使用Python爬虫,因此我们将使用免费代理IP网站进行代理IP的获取。

具体来说,我们可以使用爬虫抓取一些免费代理IP网站上的代理IP列表。这里以站大爷免费代理IP为例,具体步骤如下:

  1. 打开站大爷代理网站(https://www.zdaye.com/),选择代理IP类型和位置,点击搜索按钮。
  2. 打开开发者工具(F12),进入网络选项卡,点击清空按钮,再点击“获取更多内容”按钮,观察是否有新的请求被发送。
  3. 发现一个名为“nn”的请求,请求的URL为http://www.zdaye.com/nn/1,其中“nn”表示高匿代理IP,而数字“1”表示页码。我们可以通过修改页码来获取不同页的代理IP。
  4. 在请求头中添加“User-Agent”字段,模拟浏览器请求,避免被服务器拒绝。
  5. 抓取响应中的HTML代码,使用正则表达式或BeautifulSoup库从中提取代理IP及其端口号。

下面是具体的Python代码实现:

import requests
from bs4 import BeautifulSoup
import re

# 抓取代理IP列表
def fetch_proxy_ips():
    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.36'}
    url_template = 'http://www.xzdaye.com/nn/{}'
    proxy_ips = []
    for page in range(1, 11):
        url = url_template.format(page)
        resp = requests.get(url, headers=headers)
        soup = BeautifulSoup(resp.text, 'html.parser')
        trs = soup.find_all('tr')
        for tr in trs[1:]:
            tds = tr.find_all('td')
            proxy_ip = tds[1].text + ':' + tds[2].text
            proxy_ips.append(proxy_ip)
    return proxy_ips

# 测试代理IP是否可用
def test_proxy_ip(proxy_ip):
    url = 'http://httpbin.org/ip'
    proxies = {
        'http': 'http://' + proxy_ip,
        'https': 'https://' + proxy_ip
    }
    try:
        resp = requests.get(url, proxies=proxies, timeout=5)
        resp.raise_for_status()
        return True
    except:
        return False

# 获取可用的代理IP
def get_valid_proxy_ips():
    proxy_ips = fetch_proxy_ips()
    valid_proxy_ips = []
    for proxy_ip in proxy_ips:
        if test_proxy_ip(proxy_ip):
            valid_proxy_ips.append(proxy_ip)
    return valid_proxy_ips

print(get_valid_proxy_ips())

在上面的代码中,我们首先使用fetch_proxy_ips()函数抓取西刺代理网站上的前10页高匿代理IP列表,然后使用test_proxy_ip()函数测试每个代理IP是否可用(测试URL为http://httpbin.org/ip),最后使用get_valid_proxy_ips()函数返回可用的代理IP列表。

三、使用代理IP

使用代理IP可以在requests库中指定proxies参数。proxies参数是一个字典类型,其中键名是协议(http或https),键值是代理IP及其端口号。例如,如果我们要使用代理IP地址为“1.2.3.4”,端口号为“5678”的代理服务器,则proxies参数应该为:

proxies = {
    'http': 'http://1.2.3.4:5678',
    'https': 'https://1.2.3.4:5678'
}

下面是一个简单的爬虫示例,使用代理IP爬取JD商品搜索页面:

import requests

# 使用代理IP爬取京东商品搜索页面
def crawl_jd_goods(query, proxy_ip):
    url_template = 'https://search.jd.com/Search?keyword={}&enc=utf-8&page={}'
    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.36'}
    proxies = {
        'http': 'http://' + proxy_ip,
        'https': 'https://' + proxy_ip
    }
    for page in range(1, 6):
        url = url_template.format(query, page)
        resp = requests.get(url, headers=headers, proxies=proxies)
        print(resp.status_code)
        print(resp.text)

# 获取可用的代理IP
proxy_ips = get_valid_proxy_ips()

# 使用第一个可用的代理IP爬取京东商品搜索页面
query = 'Python编程'
proxy_ip = proxy_ips[0]
crawl_jd_goods(query, proxy_ip)

在上面的代码中,我们首先获取可用的代理IP列表,然后使用第一个可用的代理IP爬取京东商品搜索页面(搜索关键字为“Python编程”)。

四、总结

需要注意的是,代理IP并不是万能的,在一些反爬虫机制非常强大的网站上,即使使用代理IP也很容易被封禁。此外,一些代理IP质量较差,访问速度较慢,甚至会返回错误响应。因此,在实际使用中需要根据具体情况选择可用的代理IP。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

day 1

使用cut截取出Ubuntu用户的家目录,要求:不能使用":"作为分割 grep ^ubuntu /etc/passwd|cut -d / -f 2,3 xmind

芒果app逆向分析 (二)

接着上文,我们发现请求后的结果是加密的状态,我们需要解密成明文看数据。 前面提到无法使用frida,直接上xposed. 直接就hook出来了?? key = "xkSHHy5DQzYwbZS32zJBDyrHCHWMDGDk" iv = "4yXhd2Ta4m6dif54"堆栈记录下,方便后续使用: 调用堆栈:at ja…

网络技术十七:IP路由原理

IP路由原理 引入 路由器负责将数据报文在逻辑网段间进行转发 路由是指导路由器如何进行数据报文发送的路径信息 每台路由器都有路由表,路由存储在路由表中 路由环路是由错误的路由导致的,它会造成IP报文在网络中循环转发,浪费网络带宽 路…

mac项目流程管理 OmniPlan Pro 4中文 for Mac

OmniPlan Pro 4是一款专业的项目管理软件,提供了强大的项目流程管理功能,帮助用户规划、执行和监控项目的各个阶段和任务。 以下是OmniPlan Pro 4中的项目流程管理功能: 1. 项目计划:用户可以使用OmniPlan Pro 4创建项目计划。软…

SAP MM学习笔记27- 购买依赖(采购申请)

前面已经努力的学习了 购买发注,入库,请求书照合 等功能,还是蛮多内容的哈。 剩下的功能,比如 右侧的 所要量决定,供给元决定,仕入先选择 还没学。 从这章开始,要开始学习它们了。 这一章先来…

【案例分享】H3C设备配置端口镜像

简介 本案例介绍本地端口镜像的配置方法。 组网需求 某公司内部各部门使用不同网段的IP地址,其中研发部使用10.1.1.0/24网段,市场部使用12.1.1.0/24网段。现要求通过配置本地端口镜像功能,使用数据监测设备对研发部和市场部访问Internet的流…

java对接webservice接口的四种方式

这两天一直在做外系统对接,对方的接口是webservice的形式,调用起来有些蛋疼,于是在这里记录一下我尝试过的调用WebService的三种方式。 方式一:以HttpURLConnection的方式调用 String url "http://127.0.0.1/cwbase/Service…

【LeetCode】297.二叉树的序列化与反序列化

题目 序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得到原数据。 请设计一个算法来实现二叉树的序列化与反序列化…

百度智能云千帆大模型丨未来人手必备的代码助手

文章目录 1. 前言2. 千帆大模型平台3. 十分友好的功能4. comate代码助手5. 总结 1. 前言 我之前给大家推荐过Poe这个网站,它用的人比较少,但一旦接触后会发现它其实挺强大的。 因为它是一个可以同时支持好几个大模型的在线聚合平台。常用的GPT4&#x…

idea:java: Compilation failed: internal java compiler error

java: Compilation failed: internal java compiler error错误 检查下面2个即可:

智能转码技巧大揭秘,轻松实现视频转码!

你是否曾经遇到过需要将视频进行转码,但却被繁琐的步骤和复杂的参数困扰?现在,我们教你如何巧用智能转码,让视频转码变得轻松简单! 首先第一步,我们要进入媒体梦工厂主页面,在板块栏里选择“智…

Debian11安装Geoserver+矢量插件Vector Tiles

呕心之作,小白教程 1 安装 Java 112 安装Geoserver2.1 安装2.2 设置自启动2.3 跨域问题 3 安装矢量插件 Geoserver的官网安装手册。 GeoServer需要 Java 8 或者 Java 11 环境 1 安装 Java 11 Debain默认安装 Java 11 版本,直接执行: # 确认…

保姆级别redis安装轻轻松松上手使用

Redis安装 Windows快速安装安装包下载安装 Windows快速安装 安装包下载 https://github.com/microsoftarchive/redis/tags安装 直接运行.msi的安装包,一直next,直到下面界面,勾选上再next 最后点击finish 进入计算机服务中(右键计算机–>管理–…

无涯教程-JavaScript - WORKDAY.INTL函数

描述 WORKDAY.INTL函数返回带有自定义周末参数的指定工作日数之前或之后的日期的序列号。周末参数指示哪些和多少天是周末。周末和指定为假期的任何日子均不视为工作日。 语法 WORKDAY.INTL (start_date, days, [weekend], [holidays])争论 Argument描述Required/OptionalS…

CVE-2023-35843:NocoDB任意文件读取漏洞复现

文章目录 NocoDB 存在任意文件读取漏洞CVE-2023-358430x01 前言0x02 漏洞描述0x03 影响范围0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.构造POC3.复现 0x06修复建议 NocoDB 存在任意文件读取漏洞CVE-2023-35843 0x01 前言 本次测试仅供学习使用,如若非法他用&…

VMware 安装 黑群晖7.1.1-42962 DS918+

本例的用的文件 1、ARPL 1.0beat 引导文件 vmdk格式: https://download.csdn.net/download/mshxuyi/88309308 2、DS918_42962.pat:https://download.csdn.net/download/mshxuyi/88309383 一、引导文件 1、创建一个虚拟机 2、下一步,选稍后…

Grad-CAM,即梯度加权类激活映射 (Gradient-weighted Class Activation Mapping)

Grad-CAM,即梯度加权类激活映射 (Gradient-weighted Class Activation Mapping),是一种用于解释卷积神经网络决策的方法。它通过可视化模型对于给定输入的关注区域来提供洞察。 原理: Grad-CAM的关键思想是将输出类别的梯度(相对于特定卷积…

初阶三子棋(超详解)

✨博客主页:小钱编程成长记 🎈博客专栏:C语言小游戏 初阶三子棋 1.游戏介绍2.基本思路3.实现前的准备4.实现步骤4.1 打印菜单4.2 初始化棋盘4.3 打印棋盘4.4 玩家下棋4.5 电脑下棋4.6 判断本局游戏继续还是结束4.7 优化棋盘的显示 5.游戏代码…

汽车技术发展趋势及我国节能与新能源汽车技术

一、世界汽车技术发展趋势 汽车技术正向着低碳化、信息化、智能化方向发展;“三化”趋势成为世界主要汽车强国、主要车企共同的战略选择。 主要汽车战略及方向 在“三化”趋势下,各汽车强国在汽车节能技术、新能源汽车技术、智能网联汽车技术等方面持续…

算法训练营day42|动态规划 part04:0-1背包 (01背包问题基础(两种解决方案)、LeetCode 416.分割等和子集)

文章目录 01背包----二维dp数组01背包----滚动数组416.分割等和子集思路分析背包解法思考总结 有n件物品和一个最多能背重量为w 的背包。第i件物品的重量是weight[i],得到的价值是value[i] 。每件物品只能用一次,求解将哪些物品装入背包里物品价值总和最…