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

一、前言

近些年来,网络上的爬虫越来越多,很多网站都针对爬虫进行了限制,封禁了一些不规则的请求。为了实现正常的网络爬虫任务,爬虫常用代理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].textproxy_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 Trueexcept: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_ipsprint(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.mzph.cn/news/70792.shtml

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

相关文章

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

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

基于阻塞队列的生产消费模型

目录 一、线程同步 1.生产消费模型(或生产者消费者模型) 2.认识同步 (1)生产消费模型中的同步 (2)生产者消费者模型的特点 二、条件变量 1.认识条件变量 2.条件变量的使用 3.代码改造 三、基于阻…

uniapp移动端h5设计稿还原

思路 动态设置html的font-size大小 实现步骤 先创建一个public.css文件,设置初始的font-size大小 /* 注意这样写 只能使用css文件, scss 是不支持的, setProperty 只适用于原生css上 */ html {--gobal-font-size: 0.45px; } .gobal-font-size {font-size: var(--g…

leetcode 655. 输出二叉树(java)

输出二叉树 题目描述代码演示 题目描述 难度 - 中等 leetcode 655. 输出二叉树 给你一棵二叉树的根节点 root ,请你构造一个下标从 0 开始、大小为 m x n 的字符串矩阵 res ,用以表示树的 格式化布局 。构造此格式化布局矩阵需要遵循以下规则&#xff1a…

Python接口自动化封装导出excel方法和读写excel数据

一、首先需要思考,我们在页面导出excel,用python导出如何写入文件的 封装前需要确认python导出excel接口返回的是一个什么样的数据类型 如下:我们先看下不对返回结果做处理,直接接收数据类型是一个对象,无法获取返回值…

IOC和注解

想要学好spring,必须时时刻刻想着,spring的本质就是一个容器,放java对象的容器,java对象在spring容器中也叫做bean对象。 文章目录 一、spring介绍1、什么是框架2、框架的作用![在这里插入图片描述](https://img-blog.csdnimg.cn…

这几招真管用!找回丢失的iPhone的好方法!

你昂贵的iPhone不见了。它丢了吗?它被偷了吗?如果你把iPhone弄丢了,你可以从各种其他来源找到它,包括iPad、Mac、iCloud和Apple Watch。 你可以使用iCloud网站上的苹果“查找我的”应用程序、你的任何其他苹果设备或你家人注册的设备来追踪它。或者从“查找我的”应用程序…

Java基础知识点汇总

一、Java基础知识点整体框架 详细知识点见链接资源,注:框架是用Xmind App完成,查看需下载。 二、基础知识各部分概况 2.1 认识Java 2.2 数据类型和变量 2.3 运算符 2.4 程序逻辑控制 2.5 方法的使用 2.6 数组的定义和使用 2.7 类和对象 2.8 …

移植STM32官方加密库STM32Cryptographic

感谢这位博主,文章具有很高的参考价值: STM32F1做RSA,AES数据加解密,MD5信息摘要处理_我以为我爱了的博客-CSDN博客 概述 ST官方在很多年前就推出了自己的加密库,配合ST芯片用起来非常方便,支持ST的所有…

借助CIFAR10模型结构理解卷积神经网络及Sequential的使用

CIFAR10模型搭建 CIFAR10模型结构 0. input : 332x32,3通道32x32的图片 --> 特征图(Feature maps) : 3232x32即经过32个35x5的卷积层,输出尺寸没有变化(有x个特征图即有x个卷积核。卷积核的通道数与输入的通道数相等,即35x5&am…

SpringCloud(十)——ElasticSearch简单了解(一)初识ElasticSearch和RestClient

文章目录 1. 初始ElasticSearch1.1 ElasticSearch介绍1.2 安装并运行ElasticSearch1.3 运行kibana1.4 安装IK分词器 2. 操作索引库和文档2.1 mapping属性2.2 创建索引库2.3 对索引库的查、删、改2.4 操作文档 3. RestClient3.1 初始化RestClient3.2 操作索引库3.3 操作文档 1. …

网络技术二十二:NATPPP

NAT 转换流程 产生背景 定义 分类 常用命令 PPP PPP会话建立过程 认证 PPP会话流程

第 3 章 栈和队列(循环队列的顺序存储结构实现)

1. 背景说明 和顺序栈相类似,在队列的顺序存储结构中,除了用一组地址连续的存储单元依次存放从队列头到队列尾的元素之外, 尚需附设两个指针 front 和 rear 分别指示队列头元素及队列尾元素的位置。约定:初始化建空队列时&#x…

qt nodeeditor编译安装

目录 1. 下载源码 2. Qt creator编译源码 2.1 编译debug模式 (MinGW) 2.2 编译release模式 (MinGW) 1. 下载源码 https://github.com/paceholder/nodeeditor/archive/refs/tags/3.0.10.zip 2. Qt creator编译源码 解压文件…

Java 数据库改了一个字段, 前端传值后端接收为null问题解决

前端传值后端为null的原因可能有很多种,我遇到一个问题是,数据库修改了一个字段,前端传值了,但是后台一直接收为null值, 原因排查: 1、字段没有匹配上,数据库字段和前端字段传值不一致 2、大…

c语言 4.0

💂 个人主页: 程序员爱摸鱼🤟 版权: 本文由【程序员爱摸鱼】原创、在CSDN首发、需要转载请联系博主💬 如果文章对你有帮助、欢迎关注点赞收藏(一键三连)哦💅 想寻找共同成长的小伙伴,可以互粉哦 💬文章目录…

软件架构设计(六) 软件架构风格-MDA(模型驱动架构)

概念 模型驱动架构MDA, 全称叫做Model Driven Architecture。 Model:表示客观事物的抽象表示Architecture:表示构成系统的部件,连接件及其约束的规约Model Driven: 使用模型完成软件的分析,设计,构建,部署和维护等 开发活动MDA起源于分离系统规约和平台实现的思想。之前…

stable diffusion实践操作-复制-清空-保存提示词

系列文章目录 stable diffusion实践操作 stable diffusion实践操作-webUI教程 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 系列文章目录前言一、右上生成图标附近按钮介绍1. 箭头介绍(复现别人的…

视频汇聚/视频云存储/视频监控管理平台EasyCVR启动时打印starting server:listen tcp,该如何解决?

视频云存储/安防监控EasyCVR视频汇聚平台基于云边端智能协同,可实现视频监控直播、视频轮播、视频录像、云存储、回放与检索、智能告警、服务器集群、语音对讲、云台控制、电子地图、H.265自动转码H.264、平台级联等。为了便于用户二次开发、调用与集成,…

JSON是什么?认识 json

目录 一 Json定义 二 Json语法规则 三 json 的代码演示 一 Json定义 轻量级的文本数据交换格式具有自我描述性【看到某个Json数据就能知道它的特点】比xml传输速度快【跨平台】 二 Json语法规则 (1)语法 两种数据结构:对象和数组 大括号…