python爬虫-------urllib代理和代理池(第十七天)

🎈🎈作者主页: 喔的嘛呀🎈🎈
🎈🎈所属专栏:python爬虫学习🎈🎈
✨✨谢谢大家捧场,祝屏幕前的小伙伴们每天都有好运相伴左右,一定要天天开心哦!✨✨ 

嗨嗨嗨,兄弟姐妹们。我是喔的嘛呀。今天的学习内容是:爬虫 urllib代理和代理池

目录

一、爬虫 urllib——代理

二、爬虫 urllib——代理池


一、爬虫 urllib——代理

在 Python爬虫 中,可以使用 urllib 库来发送 HTTP 请求,从而实现网络爬虫功能。使用代理(Proxy)可以隐藏真实 IP 地址,防止被目标网站封禁或限制访问频率。下面是使用 urllib 库发送带代理的 HTTP 请求的示例代码:

from urllib import request# 代理地址,格式为 <http://host>:port
proxy_address = 'http://your_proxy_host:your_proxy_port'# 构建代理处理器
proxy_handler = request.ProxyHandler({'http': proxy_address})# 创建Opener
opener = request.build_opener(proxy_handler)# 安装Opener
request.install_opener(opener)# 发送请求
response = request.urlopen('<http://www.example.com>')# 输出响应内容
print(response.read().decode('utf-8'))

在上面的代码中,首先构建了一个代理处理器 proxy_handler,指定了代理地址 proxy_address,然后通过 build_opener 创建了一个 Opener,并通过 install_opener 安装 Opener,使得后续的请求都会使用这个 Opener 发送。最后使用 urlopen 发送带有代理的请求,获取并输出响应内容。

请注意,使用代理需要注意代理服务器的稳定性和合法性,不当使用可能会触犯相关法律法规。

案例:

展示如何使用代理 IP 来爬取豆瓣电影 Top 250 的数据。请注意,豆瓣网站有反爬虫机制,使用代理 IP 可以帮助降低被封禁的风险。(主要演示如何使用代理)

from urllib import request
from bs4 import BeautifulSoup
import random
import time# 代理地址,格式为 <http://host>:port  需要自己在网站上购买,或者找能够免费使用的(质量不高,不稳定)
proxy_address = 'http://your_proxy_host:your_proxy_port'# 豆瓣电影 Top 250 的 URL
url = '<https://movie.douban.com/top250>'# 用户代理列表,模拟不同浏览器的访问
user_agents = ['Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36','Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36','Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:86.0) Gecko/20100101 Firefox/86.0','Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:85.0) Gecko/20100101 Firefox/85.0','Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36'
]# 设置代理和随机用户代理
proxy_handler = request.ProxyHandler({'http': proxy_address})
opener = request.build_opener(proxy_handler)
opener.addheaders = [('User-Agent', random.choice(user_agents))]
request.install_opener(opener)# 发送请求
response = request.urlopen(url)# 解析HTML内容
soup = BeautifulSoup(response.read(), 'html.parser')
movies = soup.find_all('div', class_='hd')# 输出电影名字和链接
for movie in movies:movie_name = movie.a.span.textmovie_link = movie.a['href']print(f'电影名字:{movie_name}\\n链接:{movie_link}\\n\\n')# 模拟爬取过程
for i in range(5):print(f"模拟第{i+1}次爬取...")time.sleep(random.randint(1, 3))

在这个示例中,我们使用了一个代理服务器(proxy_address),并通过随机选择用户代理(User-Agent)来发送请求。我们爬取了豆瓣电影 Top 250 的页面,并提取了每部电影的名字和链接信息。为了模拟更真实的访问行为,我们添加了一个简单的循环,模拟多次爬取过程,并在每次爬取之间随机等待一段时间。

二、爬虫 urllib——代理池

使用代理池进行爬虫可以帮助我们更好地隐藏真实 IP 地址、绕过访问限制或提高访问速度。下面是一个使用代理池的详细示例,展示了如何使用 urllib 库和代理池进行网页爬取:

from urllib import request
import random# 代理池,包含多个代理地址
proxy_pool = ['<http://proxy1.example.com>:port','<http://proxy2.example.com>:port','<http://proxy3.example.com>:port'
]# 从代理池中随机选择一个代理
proxy = random.choice(proxy_pool)
proxy_handler = request.ProxyHandler({'http': proxy})# 创建Opener并安装
opener = request.build_opener(proxy_handler)
request.install_opener(opener)# 发送请求
url = '<https://www.example.com>'
response = request.urlopen(url)# 读取并打印响应内容
print(response.read().decode('utf-8'))

在这个示例中,我们首先定义了一个代理池 proxy_pool,包含了多个代理地址。然后,我们随机选择了一个代理地址,并使用 ProxyHandler 创建了代理处理器。接着,我们创建了一个 Opener,并安装了代理处理器。最后,我们发送了一个请求到指定的 URL,并读取并打印了响应内容。

需要注意的是,使用代理池时应该遵守网站的爬取规则,避免对网站造成不必要的负担。

以下是一个示例,展示如何使用代理池和 urllib 库来爬取网站的内容,并处理可能的异常情况,同时设置了请求头和超时时间:

from urllib import request, error
import random
import time# 代理池,包含多个代理地址
proxy_pool = ['<http://proxy1.example.com>:port','<http://proxy2.example.com>:port','<http://proxy3.example.com>:port'
]# 用户代理列表,模拟不同浏览器的访问
user_agents = ['Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36','Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36','Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:86.0) Gecko/20100101 Firefox/86.0','Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:85.0) Gecko/20100101 Firefox/85.0','Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36'
]# 设置超时时间(秒)
timeout = 10# 最大重试次数
max_retries = 3# 从代理池中随机选择一个代理
proxy = random.choice(proxy_pool)
proxy_handler = request.ProxyHandler({'http': proxy})# 随机选择一个用户代理
user_agent = random.choice(user_agents)# 创建Opener并安装
opener = request.build_opener(proxy_handler)
opener.addheaders = [('User-Agent', user_agent)]
request.install_opener(opener)# 网站 URL
url = '<https://www.example.com>'# 记录重试次数
retries = 0while retries < max_retries:try:# 发送请求response = request.urlopen(url, timeout=timeout)# 读取并打印响应内容print(response.read().decode('utf-8'))breakexcept error.HTTPError as e:print(f"HTTPError: {e.code} - {e.reason}")except error.URLError as e:print(f"URLError: {e.reason}")except Exception as e:print(f"Error: {e}")# 等待一段时间后重试time.sleep(1)retries += 1if retries == max_retries:print("Reached maximum number of retries. Failed to retrieve data.")

在这个示例中,我们定义了一个代理池和用户代理列表,随机选择代理地址和用户代理,并设置了请求头和超时时间。然后,使用代理池和设置的请求头发送请求,处理可能的异常情况,并实现了重试机制。

每天进步一点点,不管做什么都是一样的。加油兄弟姐妹们!

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

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

相关文章

MongoDB爬虫:(某扑)实战

https://bbs.hupu.com/bxj网页地址: https://bbs.hupu.com/bxj 然后我们在网页上定义帖子名称、帖子链接、创建时间、回复数、最后回复用户...... 除此之外,我们发现虎扑步行街最多显示的页数(20): 、 当我们打开第3页的时候,网页的URL的地址变为了:https://bbs.hupu.…

python入门(一)配置环境和选择IDE

Python&#xff0c;作为一种简洁易懂的编程语言&#xff0c;近年来在全球范围内受到了广泛的关注和追捧。它不仅语法简单明了&#xff0c;易于上手&#xff0c;而且拥有强大的第三方库和广泛的应用领域。从数据分析、机器学习到Web开发&#xff0c;Python都能发挥出色的性能&am…

MySQL-进阶篇-基础架构:一条sql语句是如何执行的

摘自&#xff1a;01 | 基础架构&#xff1a;一条SQL查询语句是如何执行的&#xff1f;-MySQL实战45讲-极客时间 视频讲解&#xff1a;7分钟精通MySql中SQL执行原理_哔哩哔哩_bilibili 可结合学习&#xff0c;本文仅记录SQL语句的执行流程&#xff0c;以上内容有一些额外知识未…

自动化测试selenium(2)

目录 WebDriver介绍 WebDriver使用 使用WebDriver驱动操作浏览器(打开一个百度) WebDriver 相关API 定位元素 操作元素 上一篇主要介绍了自动化测试的概念以及selenium的基本原理, 这里我们来讲一下如何利用selenium来写测试用的脚本. WebDriver介绍 Selenium是一个用于…

JetBrains PhpStorm 2024.1 发布 - 高效智能的 PHP IDE

JetBrains PhpStorm 2024.1 发布 - 高效智能的 PHP IDE 请访问原文链接&#xff1a;JetBrains PhpStorm 2024.1 (macOS, Linux, Windows) - 高效智能的 PHP IDE&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sysin.org JetBrains PhpSt…

算法—分治

分而治之:指的是当主问题可以被分解为一个相同次级问题加相同基本问题时&#xff0c;采用这种思想&#xff0c;基本问题指问题规模最小时的情况&#xff0c;次级问题是指主问题的n级降低n-1级的问题。 具体实现&#xff1a;多数采用递归操作分解&#xff0c;然后递归操作&#…

Harmony鸿蒙南向外设驱动开发-Audio

Audio驱动概述 多媒体系统是物联网设备开发中不可缺少的一部分&#xff0c;Audio作为其中重要的一个模块&#xff0c;Audio驱动模型的构建显得尤为重要。 本文主要介绍基于HDF&#xff08;Hardware Driver Foundation&#xff09;驱动框架开发的Audio驱动&#xff0c;包括Aud…

【数据结构(五)】栈

❣博主主页: 33的博客❣ ▶️文章专栏分类:数据结构◀️ &#x1f69a;我的代码仓库: 33的代码仓库&#x1f69a; &#x1faf5;&#x1faf5;&#x1faf5;关注我带你学更多数据结构知识 目录 1.前言2.概念3.栈的使用4.栈的应用场景4.1有效的括号4.2逆波兰表达式4.3栈的压入弹…

分布式系统接口限流方案

Git地址&#xff1a;https://gitee.com/deepjava/test-api-limit.git 方案一、 Guava工具包 实现单机版限流 具体代码见git 方案二、Redis lua脚本 实现分布式系统的接口限流 具体代码见git

AI虽强,搜索引擎仍不可或缺

AI 领域正以前所未有的速度发展&#xff0c;大模型的发布变得愈发频繁&#xff0c;模型的规模也在持续扩大。如今&#xff0c;大模型的起点已经攀升至数十亿参数&#xff08;数十 B&#xff0c;B 是 Billion 的简写&#xff0c;10 亿&#xff09;&#xff0c;其功能之广泛&…

OSCP靶场--Banzai

OSCP靶场–Banzai 考点(ftp爆破 webshell上传web1访问403web2可以访问webshell反弹mysql udf提权) 1.nmap扫描 ## nmap扫描一定要使用 -p- 否则容易扫不全端口 ┌──(root㉿kali)-[~/Desktop] └─# nmap -sV -sC 192.168.158.56 -Pn -p- --min-rate 2500Starting Nmap 7.…

循序渐进丨MogDB 数据库带级联从库的集群切换后如何保持原有架构?

生产数据库运行过程中可能会涉及到升级或者打补丁&#xff0c;导致各节点的角色有计划的发生改变。如果集群内角色发生改变&#xff0c;是否还能保持原有架构继续对外提供服务呢&#xff1f;我们来做一下测试。 采用22模式模拟同城两机房部署4节点 MogDB 数据库集群&#xff0c…