【100天精通python】Day43:python网络爬虫开发_爬虫基础(urlib库、Beautiful Soup库、使用代理+实战代码)
目录
1 urlib 库
2 Beautiful Soup库
3 使用代理
3.1 代理种类 HTTP、HTTPS 和 SOCKS5
3.2 使用 urllib 和 requests 库使用代理
3.3 案例:自建代理池
4 实战 提取视频信息并进行分析
1 urlib 库
urllib
是 Python 内置的标准库,用于处理URL、发送HTTP请求和处理网络数据。它包含多个模块,如urllib.request
用于发送请求,urllib.parse
用于解析URL,urllib.error
用于处理异常等。
urllib.request
:用于发送 HTTP 请求和获取响应。urllib.parse
:用于解析 URL,拆分和合并 URL 的各个部分。urllib.error
:处理异常,如连接错误、HTTP 错误等。
常用语法:
- 发送GET请求:
import urllib.requesturl = "https://www.example.com"
response = urllib.request.urlopen(url)
content = response.read().decode("utf-8")
print(content)
2 发送POST请求:
import urllib.requesturl = "https://www.example.com"
response = urllib.request.urlopen(url)
content = response.read().decode("utf-8")
print(content)
3 实战示例:
爬取网页内容:
import urllib.requesturl = "https://www.example.com"
response = urllib.request.urlopen(url)
content = response.read().decode("utf-8")
print(content)
下载文件:
import urllib.requesturl = "https://www.example.com/sample.pdf"
urllib.request.urlretrieve(url, "sample.pdf")
print("File downloaded.")
处理异常:
import urllib.errortry:response = urllib.request.urlopen("https://www.nonexistent-website.com")
except urllib.error.URLError as e:print("Error:", e)
解析URL:
import urllib.parseurl = "https://www.example.com/page?param1=value1¶m2=value2"
parsed_url = urllib.parse.urlparse(url)
print(parsed_url.scheme) # 输出协议部分
print(parsed_url.netloc) # 输出域名部分
print(parsed_url.query) # 输出查询参数部分
以上示例只是
urllib
库的一些用法。这个库非常强大,你可以在许多网络操作中使用它,包括爬虫、API调用等。在实际项目中,你可能需要处理更多的细节,如设置请求头、处理响应等。查阅官方文档可以帮助你更全面地了解urllib
库的功能和用法。
4 Handler 处理器和自定义 Opener:
处理器(Handler)允许你自定义请求的处理方式,以满足特定的需求。urllib.request
模块提供了一些默认的处理器,例如 HTTPHandler 和 HTTPSHandler,用于处理 HTTP 和 HTTPS 请求。你还可以通过创建自定义的 Opener 来组合不同的处理器,实现更灵活的请求配置。
自定义 Opener 示例:
import urllib.request# 创建自定义 Opener,组合不同的处理器
opener = urllib.request.build_opener(urllib.request.HTTPSHandler())# 使用自定义 Opener 发送请求
response = opener.open("https://www.example.com")
content = response.read().decode("utf-8")
print(content)
5 URLError 和 HTTPError
URLError
和HTTPError
都是urllib.error
模块中的异常类,用于处理与网络请求相关的错误情况。
URLError
:用于捕获与URL相关的异常,如无法解析主机名、网络不可达等。HTTPError
:用于捕获 HTTP 错误响应,比如请求的网页不存在(404 Not Found)、服务器错误(500 Internal Server Error)等。
URLError 示例:
import urllib.errortry:response = urllib.request.urlopen("https://www.nonexistent-website.com")
except urllib.error.URLError as e:print("URLError:", e)
HTTPError 示例:
import urllib.errortry:response = urllib.request.urlopen("https://www.example.com/nonexistent-page")
except urllib.error.HTTPError as e:print("HTTPError:", e.code, e.reason)
在示例中,
e.code
是 HTTP 错误代码,e.reason
是错误原因。总之,处理器和 Opener 允许你自定义网络请求的行为,
URLError
和HTTPError
则帮助你处理请求中可能出现的错误情况。这些功能在实际网络请求和爬虫任务中都非常有用。
2 Beautiful Soup库
Beautiful Soup 是一个用于解析HTML和XML文档的Python库,它可以从网页中提取数据,操作文档树,并帮助你浏览和搜索文档的不同部分。它能够帮助你处理标签、属性、文本内容等,使得数据提取和处理变得更加方便。
Beautiful Soup 是一个强大的Python库,用于解析HTML和XML文档,提取其中的数据。以下是一些 Beautiful Soup 常用的语法和方法:
from bs4 import BeautifulSoup# HTML 示例
html = """
<html>
<head>
<title>Sample HTML</title>
</head>
<body>
<p class="intro">Hello, Beautiful Soup</p>
<p>Another paragraph</p>
<a href="https://www.example.com">Example</a>
</body>
</html>
"""# 创建 Beautiful Soup 对象
soup = BeautifulSoup(html, "html.parser")# 节点选择器
intro_paragraph = soup.p
print("Intro Paragraph:", intro_paragraph)# 方法选择器
another_paragraph = soup.find("p")
print("Another Paragraph:", another_paragraph)# CSS 选择器
link = soup.select_one("a")
print("Link:", link)# 获取节点信息
text = intro_paragraph.get_text()
print("Text:", text)# 获取节点的属性值
link_href = link["href"]
print("Link Href:", link_href)# 遍历文档树
for paragraph in soup.find_all("p"):print(paragraph.get_text())# 获取父节点
parent = intro_paragraph.parent
print("Parent:", parent)# 获取兄弟节点
sibling = intro_paragraph.find_next_sibling()
print("Next Sibling:", sibling)# 使用 CSS 选择器选择多个节点
selected_tags = soup.select("p.intro, a")
for tag in selected_tags:print("Selected Tag:", tag)# 修改节点文本内容
intro_paragraph.string = "Modified Text"
print("Modified Paragraph:", intro_paragraph)# 添加新节点
new_paragraph = soup.new_tag("p")
new_paragraph.string = "New Paragraph"
soup.body.append(new_paragraph)# 移除节点
link.extract()
print("Link Extracted:", link)
3 使用代理
3.1 代理种类 HTTP、HTTPS 和 SOCKS5
- HTTP代理: 用于HTTP协议的代理,适用于浏览网页等HTTP请求。
- HTTPS代理: 用于HTTPS协议的代理,能够处理加密的HTTPS请求。
- SOCKS5代理: 更通用的代理协议,支持TCP和UDP流量,适用于各种网络请求。
抓取免费代理:
可以使用爬虫技术从免费代理网站获取代理IP和端口。
使用付费代理:
付费代理通常提供更稳定和更快速的连接,适用于需要高质量代理的情况。
3.2 使用 urllib
和 requests
库使用代理
urllib:
import urllib.requestproxy_handler = urllib.request.ProxyHandler({'http': 'http://proxy.example.com:8080'})
opener = urllib.request.build_opener(proxy_handler)
response = opener.open('https://www.example.com')
requests:
import requestsproxies = {'http': 'http://proxy.example.com:8080'}
response = requests.get('https://www.example.com', proxies=proxies)
3.3 案例:自建代理池
import requests
from bs4 import BeautifulSoup
import random# 获取代理IP列表
def get_proxies():proxy_url = "https://www.example.com/proxy-list"response = requests.get(proxy_url)soup = BeautifulSoup(response.text, "html.parser")proxies = [proxy.text for proxy in soup.select(".proxy")]return proxies# 从代理池中随机选择一个代理
def get_random_proxy(proxies):return random.choice(proxies)# 使用代理发送请求
def send_request_with_proxy(url, proxy):proxies = {'http': proxy, 'https': proxy}response = requests.get(url, proxies=proxies)return response.textif __name__ == "__main__":proxy_list = get_proxies()random_proxy = get_random_proxy(proxy_list)target_url = "https://www.example.com"response_content = send_request_with_proxy(target_url, random_proxy)print(response_content)
这个案例演示了如何从代理池中随机选择一个代理,并使用选定的代理发送请求。请注意,示例中的URL和方法可能需要根据实际情况进行修改。
这些概念和示例可以帮助你了解如何使用代理,从而在网络爬虫或请求中保护你的身份和数据。
4 实战 提取视频信息并进行分析
import urllib.request
from bs4 import BeautifulSoup# 定义目标网页的 URL
url = 'https://www.example.com/videos'# 定义代理(如果需要使用代理)
proxies = {'http': 'http://proxy.example.com:8080'}# 发起请求,使用代理
req = urllib.request.Request(url, headers={'User-Agent': 'Mozilla/5.0'})
response = urllib.request.urlopen(req, proxies=proxies)# 解析网页内容
soup = BeautifulSoup(response, 'html.parser')# 创建一个空的视频列表
videos = []# 获取视频信息
video_elements = soup.find_all('div', class_='video')
for video_element in video_elements:title = video_element.find('h2').textvideo_link = video_element.find('a', class_='video-link')['href']videos.append({'title': title, 'video_link': video_link})# 输出提取到的视频信息
for video in videos:print(f"Title: {video['title']}")print(f"Video Link: {video['video_link']}")print()# 对视频信息进行分析
num_videos = len(videos)
print(f"Total Videos: {num_videos}")
在这个实例中,我们假设目标网页包含多个视频的信息,每个视频都有标题和视频链接。我们使用
urllib
库获取网页内容,然后使用Beautiful Soup
解析页面,从中提取视频的标题和链接。最后,我们输出提取到的视频信息并对其进行简单的分析,计算视频的数量。请注意,这个实例仅用于演示基本的数据提取和分析概念。在实际应用中,你可能需要根据目标网页的结构和内容,调整代码以适应实际情况。
相关文章:
【100天精通python】Day43:python网络爬虫开发_爬虫基础(urlib库、Beautiful Soup库、使用代理+实战代码)
目录 1 urlib 库 2 Beautiful Soup库 3 使用代理 3.1 代理种类 HTTP、HTTPS 和 SOCKS5 3.2 使用 urllib 和 requests 库使用代理 3.3 案例:自建代理池 4 实战 提取视频信息并进行分析 1 urlib 库 urllib 是 Python 内置的标准库,用于处理URL、发送…...
Linux:安全技术与防火墙
目录 一、安全技术 1.安全技术 2.防火墙的分类 3.防水墙 4.netfilter/iptables关系 二、防火墙 1、iptables四表五链 2、黑白名单 3.iptables命令 3.1查看filter表所有链 iptables -L 编辑3.2用数字形式(fliter)表所有链 查看输出结果 iptables -nL 3.3 清空所有链…...
Confluent kafka 异常退出rd_tmpabuf_alloc0: rd kafka topic info_new_with_rack
rd_tmpabuf_alloc0: rd kafka topic info_new_with_rack 根据网上的例子,做了一个测试程序。 C# 操作Kafka_c# kafka_Riven Chen的博客-CSDN博客 但是执行下面一行时,弹出上面的异常,闪退。 consumer.Subscribe(queueName) 解决方案&…...
最新ChatGPT网站程序源码+AI系统+详细图文搭建教程/支持GPT4.0/AI绘画/H5端/Prompt知识库
一、前言 SparkAi系统是基于国外很火的ChatGPT进行开发的Ai智能问答系统。本期针对源码系统整体测试下来非常完美,可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。 那么如何搭建部署AI创作ChatGPT?小编这里写一个详细图文教程吧!…...
chatGPT-对话柏拉图
引言: 古希腊哲学家柏拉图,在他的众多著作中,尤以《理想国》为人所熟知。在这部杰作中,他勾勒了一个理想的政治制度,提出了各种政体,并阐述了他对于公正、智慧以及政治稳定的哲学观点。然而,其…...
Java项目-苍穹外卖-Day04
公共字段自动填充 这些字段在每张表基本都有,手动进行填充效率低,且后期维护更改繁琐 使用到注解AOP主要 先答应一个AutoFill注解 再定义一个切面类进行通知 对应代码 用到了枚举类和反射 package com.sky.aspect; /*** 自定义切面类,…...
SQL递归获取完整的树形结构数据
在 SQL 中,WITH RECURSIVE 用于创建递归查询,它允许在查询中引用自身。这种查询通常用于处理具有层次结构的数据,例如树形结构。 以下是使用 WITH RECURSIVE 创建递归查询的一般语法: WITH RECURSIVE [alias] ([column1], [colu…...
如何使用营销活动,提升小程序用户的参与度
在当今数字化时代,小程序已成为企业私域营销的重要一环。然而,仅仅拥有小程序还不足以吸引用户的兴趣和参与。营销活动作为推动用户参与的有效手段,可以在激烈的市场竞争中脱颖而出。本文将深入探讨如何使用营销活动,提升小程序用…...
IDEA中使用Docker插件构建镜像并推送至私服Harbor
一、开启Docker服务器的远程访问 1.1 开启2375远程访问 默认的dokcer是不支持远程访问的,需要加点配置,开启Docker的远程访问 # 首先查看docker配置文件所在位置 systemctl status docker# 会输出如下内容: ● docker.service - Docker Ap…...
第7章 高性能门户首页构建
mini商城第7章 高性能门户首页构建 一、课题 高性能门户建设 二、回顾 1、了解文件存储系统的概念 2、了解常用文件服务器的区别 3、掌握Minio的应用 三、目标 1、OpenResty 百万并发站点架构 OpenResty 特性介绍 搭建OpenResty Web站点动静分离方案剖析 2、多级缓存架…...
用加持了大模型的 Byzer-Notebook 做数据分析是什么体验
Byzer-Notebook 是专门为 SQL 而研发的一款 Web Notebook。他的第一公民是 SQL,而 Jupyter 则是是以 Python 为第一公民的。 随着 Byzer 引擎对大模型能力的支持日渐完善, Byzer-Notebook 也在不自觉中变得更加强大。我和小伙伴在聊天的过程中才发现他已…...
学习设计模式之观察者模式,但是宝可梦
前言 作者在准备秋招中,学习设计模式,做点小笔记,用宝可梦为场景举例,有错误欢迎指出。 观察者模式 观察者模式定义了一种一对多的依赖关系,一个对象的状态改变,其他所有依赖者都会接收相应的通知。 所…...
课程项目设计--spring security--用户管理功能--宿舍管理系统--springboot后端
写在前面: 还要实习,每次时间好少呀,进度会比较慢一点 本文主要实现是用户管理相关功能。 前文项目建立 文章目录 验证码功能验证码配置验证码生成工具类添加依赖功能测试编写controller接口启动项目 security配置拦截器配置验证码拦截器 …...
学习设计模式之装饰器模式,但是宝可梦
装饰模式 为了不改变组件的结构,动态地扩展其功能。 通常,扩展功能通过子类进行,但是继承的方式具有静态特征,耦合度高。 意图:动态地给对象添加额外的功能 主要解决:继承方式是静态特征,扩…...
【AWS】创建IAM用户;无法登录IAM用户怎么办?错误提示:您的身份验证信息错误,请重试(已解决)
目录 0.背景问题分析 1.解决步骤 0.背景问题分析 windows 11 ,64位 我的问题情景: 首先我创建了aws的账户,并且可以用ROOT用户登录,但是在登录时选择IAM用户,输入ROOT的名字和密码,就会提示【您的身份验证…...
微服务基础知识
文章目录 微服务基础知识一、系统架构的演变1、单体应用架构2、垂直应用架构3、分布式SOA架构(1)什么是SOA(2)SOA架构 4、微服务架构5、SOA和微服务的关系(1)SOA(2)微服务架构 二、分…...
倒残差结构
倒残差结构: 倒残差结构是MobileNetV2中引入的一种设计,用于增强网络的表达能力和特征提取能力,同时保持轻量级的特点。它的核心思想是在每个瓶颈块中,先使用一个扩张卷积(Dilated Convolution)&#x…...
Docker的基本使用
Docker 概念 Docker架构 docker分为客户端,Docker服务端,仓库 客户端 Docker 是一个客户端-服务器(C/S)架构程序。Docker 客户端只需要向 Docker 服务端发起请求,服务端将完成所有的工作并返回相应结果。 Docker …...
paddlenlp安装踩坑记录
错误1 ModuleNotFoundError: No module named paddle.metric我下载paddlepaddle-gpu2.5.0.post117解决了,最开始下载的2.5.1报错,post后面的117是我的cuda版本,不要写你对应的版本号 python3 -m pip install paddlepaddle-gpu2.5.0.post117…...
微服务流程引擎:简单又灵活,实现流程全生命周期管理!
伴随着日益激烈的市场竞争,传统的办公操作已经无法满足发展需要了。如果采用微服务流程引擎加油助力,就可以帮助企业更好地管理数据资源,高效做好各种表单制作,实现高效率办公。流辰信息以市场为导向,用心钻研低代码技…...
Qt表格数据处理
概述 在Qt表格数据处理中,涉及到如下几个具体的类: QAbstractItemModel:这是一个抽象基类,定义了模型(Model)的接口规范。所有的模型类都应该派生自QAbstractItemModel,并实现它的纯虚函数&…...
EasyPOI 实战总结
EasyPOI实战总结 简介 easypoi功能如同名字easy,主打的功能就是容易,让一个没见接触过poi的人员 就可以方便的写出Excel导出,Excel模板导出,Excel导入,Word模板导出,通过简单的注解和模板 语言(熟悉的表达式语法),完成以前复杂的写法 使用EasyPOI 环境搭建 # 1.引入相关依…...
【LeetCode-困难题】42. 接雨水
题目 题解一:暴力双重for循环(以行计算水量) 1.先找出最高的柱子有多高(max 3) 2.然后第一个for为行数(1,2,3) 3.第二个for计算每一行的雨水量(关键在于去除…...
npm install 安装依赖,报错 Host key verification failed
设置 git 的身份和邮箱 git config --global user.name "你的名字" > 用户名 git config --global user.email “你的邮箱" > 邮箱进入 > 用户 > [你的用户名] > .ssh文件夹下,删除 known_hosts 文件即可 进入之后有可能会看到 known_hosts…...
SOLIDWORKS焊件是什么?
SOLIDWORKS是一款广泛应用于机械设计领域的三维计算机辅助设计软件。SOLIDWORKS提供了强大的焊件功能,可以帮助工程师们以更高的效率设计焊接件。本文将介绍SOLIDWORKS焊件的概念、特点以及使用方法,以期帮助读者更好地理解和应用这一关键技术。 SOLIDWO…...
2023国赛数学建模D题思路模型代码 高教社杯
本次比赛我们将会全程更新思路模型及代码,大家查看文末名片获取 之前国赛相关的资料和助攻可以查看 2022数学建模国赛C题思路分析_2022国赛c题matlab_UST数模社_的博客-CSDN博客 2022国赛数学建模A题B题C题D题资料思路汇总 高教社杯_2022国赛c题matlab_UST数模社…...
git协议实现管理(三个步骤)
GitHub官网访问: https://github.com/dashboard 初次使用git的用户要使用git协议大概需要三个步骤: 一、生成密钥对 二、设置远程仓库(本文以github为例)上的公钥 三、把git的remote url远程仓库URL可访问路径修改为git协议(以上两个步骤初次设置过以后,…...
“深入理解JVM:探索Java虚拟机的内部机制“
标题:深入理解JVM:探索Java虚拟机的内部机制 摘要: Java虚拟机(Java Virtual Machine,JVM)是Java语言的核心,负责将Java源代码编译成可执行的字节码并运行。本篇博客将深入探索JVM的内部机制&a…...
Unity——各种特效的基本使用方法
特效是游戏制作不可或缺的一环,作为游戏开发者最重要的工作就是将特效添加到游戏中,并在合适的时机、合适的位置将特效播放出来,同时还要注意特效的管理和销毁。 某些种类的特效,如动效、贴花,还要编写脚本代码以实现…...
smiley-http-proxy-servlet 实现springboot 反向代理,结合项目鉴权,安全的引入第三方项目服务
项目中反向代理 集成第三方的服务接口或web监控界面,并实现与自身项目相结合的鉴权方法 依赖 smiley-http-proxy-servlet GitHub链接 2.0 版开始,代理切换到jakarta servlet-api<!--HTTP 代理 Servlet--><dependency><groupId>org.mit…...
简约网站设计欣赏/网站关键词优化软件
今天我们团队进行了数据输出和数据处理两个任务,我在完成数据输出任务后,和马世杰一起进行了数据处理的后续任务,站立会议我们们讨论遇到的问题有:在计算归零观测值时没有分析出具体算法。 转载于:https://www.cnblogs.com/nigula…...
上海网站论坛建设/湖南网站网络推广哪家奿
一、为什么跳槽? 我做后端五年多了,同很多人一样,我大学的专业和程序员这个行业没有任何的关系。毕业后,很迷茫,就做了门槛相对来说较低的服务行业,之后,就一个偶然的机会接触了程序员这个行业…...
赚钱网站入口/百度指数官网入口登录
污水中含磷量过高,是不允许排放的,过高的含磷量会导致水体富营养化,从而引发“绿潮”“水华”等水体污染,破坏水生态的自我净化能力,导致水底生物因为缺氧而死亡。所以不管是需要处理才能排放的污水,还是已…...
宁津华企动力做网站的电话多少/刷赞网站推广免费链接
作者:被偷De贼 Excel的导入一定给客户规定统一的模板,这样才能方便做业务处理. 我是这样做的. 首先将Excel的所有Sheet页全都读出来,请用户选择要处理的Sheet的页,获取Sheet页代码如下 Code/ // /// 获取Excel的表名[Sheet1$] /// ///…...
营销型网站整体优化/网络口碑营销名词解释
camera.SetReplacementShader(shader,"tag"); 可以切了测试性能 转载于:https://www.cnblogs.com/minggoddess/p/10362582.html...
哪个网站可以做担保交易/广告营销策略
重新看《JavaScript设计模式与开发实践》一书,第32页发现个简易版的Function.prototype.bind实现,非常容易理解,记录在这了。 Function.prototype.bind function (context) {var self this;return function () {return self.apply(context,…...