当前位置: 首页 > news >正文

python中如何解析Html

在最近需要的需求中,需要 python 获取网页内容,并从html中获取到想要的内容。这里记录一下两个比较常用的python库对html的解析。

1. BeautifulSoup

它是一个非常流行的python脚本库,用于解析HTML和XML文档。如果你对 java 很熟悉,那么就会容易想到java中也存在一个类似的java库,叫Jsoup,名称相似,效果也差不多。BeautifulSoup提供了简单易用的API,可以通过标签名、属性、CSS选择器等各种方式查找和提取HTML元素.

安装

   pip install beautifulsoup4


​ 实例代码:

from bs4 import BeautifulSoup
import requests# 发送请求获取到 html 内容
response = requests.get("https://www.example.com")
html_content = response.text # 创建 BeautifulSoup 对象
soup = BeautifulSoup(html,'html.parser')# 创建 CSS 选择器查找元素
elements = soup.select(".class-name")
for element in elements:print(element.text)

demo:
比如我现在想获取新浪新闻的列表:
在这里插入图片描述
对 html 进行分析,我们可以发现 class name:
在这里插入图片描述
那么我们可以直接填入代码:

def try_to_get_world_news() :response = requests.get("https://news.sina.com.cn/world/")response.encoding = "utf-8"html_data = response.text# 创建 BeautifulSoup 对象soup = BeautifulSoup(html_data, "html.parser")# 通过css选择器cha查找元素elements =  soup.select(".news-item")for element in elements:if element is not None:a_links = element.find_all('a')if a_links is not None and len(a_links) > 0 :a_link = a_links[0]a_text = a_link.text.strip()a_href = a_link.get('href')print("文本:" + a_text + ",链接:" + a_href)

可以看到结果:
在这里插入图片描述

2. lxml

另外一个强大的python库,也是用来处理 HTML 和 XML 文档。当然,它提供了XPath和CSS选择器等功能,也可以很方面的定位和提取HTML库。

安装

   pip install lxml

​当然你还可能需要安装一下 cssselect 这个库

pip install cssselect

​ 代码实例

from lxml import html
import requests
import cssselect# 创建请求对象,获取请求内容
response = requests.get("https://www.example.com")
html_content = response.text# 创建 lxml 的 HTML 对象
tree = html.fromstring(html_content)# 通过 css 选择器查找
elements = tree.cssselect(".class-name")
for element in elements:print(element.text)

demo:
同样也是上面的例子,直接贴代码:

response = requests.get("https://news.sina.com.cn/world/")response.encoding = "utf-8"html_data = response.texttree = html.fromstring(html_data)elements =  tree.cssselect(".news-item")for element in elements:print(element)

直接看结果
在这里插入图片描述

3. BeautifulSoup 和 lxml 优缺点

BeautifulSoup和lxml都是Python中广泛使用的HTML和XML解析库,它们各自有其优势和特点。以下是BeautifulSoup和lxml的主要区别和优势:

BeautifulSoup的优势:

  1. 简单易用:BeautifulSoup提供了一个简单而直观的API,使得解析HTML和XML文档变得非常容易。它的语法简洁明了,即使是初学者也可以快速上手。
  2. 强大的解析能力:BeautifulSoup可以处理不规范的HTML和XML文档,即使文档中存在错误或不完整的标签,它仍然能够正确解析。
  3. 支持多种解析器:BeautifulSoup支持多种底层解析器,如lxml、html.parser和html5lib等。你可以根据需要选择合适的解析器来提高解析性能或处理特定的文档。
  4. 灵活的导航和搜索:BeautifulSoup提供了多种方法来导航和搜索文档树,如通过标签名、属性、CSS选择器等。它还支持使用正则表达式进行搜索和匹配。
  5. 对Python开发者友好:BeautifulSoup是一个纯Python库,它与Python的数据结构和编程风格紧密集成。对于Python开发者来说,使用BeautifulSoup更加自然和便捷。

lxml的优势:

  1. 高性能:lxml是一个高性能的HTML和XML解析库,它使用C语言编写的libxml2和libxslt库作为底层引擎,因此解析速度非常快。
  2. 支持XPath:lxml内置了对XPath的支持,XPath是一种强大的语言,用于在XML和HTML文档中进行导航和查询。使用XPath可以方便地定位和提取所需的元素。
  3. 支持CSS选择器:lxml同样支持使用CSS选择器来查找和提取元素,这对于Web开发者来说非常熟悉和便捷。
  4. 支持XML和HTML的转换:lxml可以将HTML文档转换为well-formed的XML文档,也可以将XML文档转换为HTML文档,这在某些情况下非常有用。
  5. 与其他库的集成:lxml可以与其他Python库很好地集成,如pandas、NumPy等,可以方便地进行数据处理和分析。

区别:

  1. 解析速度:lxml的解析速度通常比BeautifulSoup更快,特别是在处理大型文档时。如果性能是主要考虑因素,lxml可能是更好的选择;
  2. 易用性:BeautifulSoup的API更加简单和直观,对于初学者来说更容易上手。而lxml的API相对更加底层和复杂,需要一定的学习成本。
  3. 文档支持:BeautifulSoup对于处理不规范的HTML文档更加宽容,而lxml更倾向于处理well-formed的XML文档。
  4. 依赖项:BeautifulSoup是一个纯Python库,没有外部依赖。而lxml依赖于C语言编写的libxml2和libxslt库,需要单独安装。

当然,我们的选择就是看自己的需求和偏好了。如果你是性能要求高,追求XPath和其它库的继承,lxml将会是一个比较好的选择;当然,就像我,比较重视简单易用,而且面对的HTML并不是特别的规范,我就会选择 BeautifulSoup。

相关文章:

python中如何解析Html

在最近需要的需求中,需要 python 获取网页内容,并从html中获取到想要的内容。这里记录一下两个比较常用的python库对html的解析。 1. BeautifulSoup 它是一个非常流行的python脚本库,用于解析HTML和XML文档。如果你对 java 很熟悉&#xff…...

Hystrix的原理及应用:构建微服务容错体系的利器(一)

本系列文章简介: 本系列文章旨在深入剖析Hystrix的原理及应用,帮助大家理解其如何在微服务容错体系中发挥关键作用。我们将从Hystrix的核心原理出发,探讨其隔离、熔断、降级等机制的实现原理;接着,我们将结合实际应用场…...

win10企业版LTSC可以识别鼠标,无法识别移动硬盘问题

1. USB控制器重置:在设备管理器中,展开"通用串行总线控制器"。右键点击每个USB控制器,选择"卸载设备"。完成后,重新启动计算机。操作系统将自动重新安装USB控制器驱动程序。这可能有助于解决与USB控制器相关的…...

[经验分享]OpenCV显示上一次调用的图片的处理方法

最近在研究OpenCV时发现,重复调用cv::imshow("frame", frame)时,会显示出上一次的图片。 网上搜索了方法,有以下3种因素可能导致: 1. 图像变量未正确更新:可能在更新 frame 变量之前就已经调用了 imshow。…...

NFS性能优化参考 —— 筑梦之路

CentOS 7 NFS服务优化的配置参考—— 筑梦之路_nfs 读取优化-CSDN博客 核心原则是减少客户端与服务端的交互次数,因此我们在访问文件的时候应该尽量保持文件的打开状态,避免重复打开关闭文件,这样NFS全路径的逐级检查。这种方法对NFSv4以后的…...

Vue3学习日记 Day4 —— pnpm,Eslint

注:此课程需要有Git的基础才能学习 一、pnpm包管理工具 1、使用原因 1.1、速度快,远胜过yarn和npm 1.2、节省磁盘空间 2、使用方式 2.1、安装方式 npm install -g pnpm 2.2、创建项目 pnpm create vue 二、Eslint配置代码风格 1、环境同步 1、禁用Pret…...

二叉树遍历(牛客网)

描述 编一个程序,读入用户输入的一串先序遍历字符串,根据此字符串建立一个二叉树(以指针方式存储)。 例如如下的先序遍历字符串: ABC##DE#G##F### 其中“#”表示的是空格,空格字符代表空树。建立起此二叉树…...

语音识别:whisper部署服务器(远程访问,语音实时识别文字)

Whisper是OpenAI于2022年发布的一个开源深度学习模型,专门用于语音识别任务。它能够将音频转换成文字,支持多种语言的识别,包括但不限于英语、中文、西班牙语等。Whisper模型的特点是它在多种不同的音频条件下(如不同的背景噪声水…...

Faust勒索病毒:了解最新变种[nicetomeetyou@onionmail.org].faust,以及如何保护您的数据

导言: 在一个快节奏的数字世界中,我们经常忽视数据安全的重要性。然而,最新的勒索病毒——[nicetomeetyouonionmail.org].faust、[support2022cock.li].faust、[tsai.shenmailfence.com].faust 、[Encrypteddmailfence.com].faust、[Deciphe…...

EI Scopus检索 | 第二届大数据、物联网与云计算国际会议(ICBICC 2024) |

会议简介 Brief Introduction 2024年第二届大数据、物联网与云计算国际会议(ICBICC 2024) 会议时间:2024年12月29日-2025年1月1日 召开地点:中国西双版纳 大会官网:ICBICC 2024-2024 International Conference on Big data, IoT, and Cloud C…...

判断闰年(C语言)

一、运行结果&#xff1b; 二、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h>int main() {//初始化变量值&#xff1b;int year 2000;//执行循环判断&#xff1b;while (year < 2010){//执行流程&#xff1b;//判断能否整除4&#xff1…...

2024全国水科技大会【协办单位】凌志环保股份有限公司

凌志环保股份有限公司成立于1998年5月&#xff0c;集团共有20余家经营主体组成&#xff0c;凌志环保作为村镇污水处理领域的领军企业、农村污水处理“家电化”的开创者&#xff0c;深耕水治理行业25年&#xff0c;2022年被工信部认定为国家级专精特新“小巨人”企业。公司的核心…...

以太坊开发学习-solidity(二)值类型

文章目录 第一个Solidity程序编译并部署代码变量值类型1. 布尔型2. 整型3. 地址类型4. 定长字节数组 第一个Solidity程序 开发工具&#xff1a;remix 本教程中&#xff0c;我会用remix来跑solidity合约。remix是以太坊官方推荐的智能合约开发IDE&#xff08;集成开发环境&#…...

实景剧本杀小程序儿童公园剧本杀小程序系统开发

开发实景剧本杀小程序儿童公园剧本杀系统需要考虑以下几个方面&#xff1a; 1. 游戏设计&#xff1a;设计适合儿童玩耍的剧本杀游戏&#xff0c;考虑场景、角色、任务、线索等因素&#xff0c;以适应儿童的理解力和参与度。 2. 技术实现&#xff1a;利用小程序技术框架进行系…...

AJAX——综合案例

1 Bootstrap弹框 功能&#xff1a;不离开当前页面&#xff0c;显示单独内容&#xff0c;供用户操作 步骤&#xff1a; 引入bootstrap.css和bootstrap.js准备弹框标签&#xff0c;确认结构通过自定义属性&#xff0c;控制弹框的显示和隐藏 <!DOCTYPE html> <html la…...

数字化社会的新纪元:揭秘 Web3 的社交网络

随着区块链技术的不断发展和普及&#xff0c;Web3作为其重要组成部分&#xff0c;正逐渐改变着社交网络的面貌。Web3的出现不仅为社交网络带来了新的技术和理念&#xff0c;还为用户提供了更加开放、透明和安全的社交体验。本文将深入探讨Web3的社交网络&#xff0c;揭示其在数…...

旋转花键的制造工艺

旋转花键的制造工艺是一门精细的技术&#xff0c;涉及多个步骤和精细的操作&#xff0c;以确保最终产品的质量和性能&#xff0c;下面简单介绍下旋转花键的制造工艺。 1、原材料准备&#xff1a;制造旋转花键的核心是选择合适的材料&#xff0c;根据花键的规格和性能要求&#…...

python--高阶函数

python--高阶函数 mapmap的用法map的代码示例 filterfilter的用法filter的代码示例 reducereduce的用法reduce的代码示例 返回函数IO编程打开文件文件打开--打开格式文件打开--上下文管理器打开文件&#xff08;会自动close文件&#xff09; 文件读取文件读取--file.read(m)文件…...

Vue/Uni-app/微信小程序 v-if 设置出场/退出动画(页面交互不死板,看起来更流畅)

天梦星服务平台 (tmxkj.top)https://tmxkj.top/#/ 在Vue.js中&#xff0c;使用v-if进行条件渲染时设置动画可以通过<transition>组件来实现。 具体操作步骤如下&#xff1a; 包裹条件渲染的元素&#xff1a;您需要将要通过v-if控制显示隐藏的元素包裹在<transition…...

加速量子计算机商业化!富士通日立NEC等联合成立新量子计算公司

内容来源&#xff1a;量子前哨&#xff08;ID&#xff1a;Qforepost&#xff09; 编辑丨王珩 编译/排版丨沛贤 深度好文&#xff1a;700字丨5分钟阅读 日本工业界和学术界将在 2024 年联合成立新一家公司&#xff0c;研发量子计算机并将其商业化。包括富士通、日立和NEC在内…...

(十)学生端搭建

本次旨在将之前的已完成的部分功能进行拼装到学生端&#xff0c;同时完善学生端的构建。本次工作主要包括&#xff1a; 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...

K8S认证|CKS题库+答案| 11. AppArmor

目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作&#xff1a; 1&#xff09;、切换集群 2&#xff09;、切换节点 3&#xff09;、切换到 apparmor 的目录 4&#xff09;、执行 apparmor 策略模块 5&#xff09;、修改 pod 文件 6&#xff09;、…...

Python爬虫实战:研究feedparser库相关技术

1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...

dedecms 织梦自定义表单留言增加ajax验证码功能

增加ajax功能模块&#xff0c;用户不点击提交按钮&#xff0c;只要输入框失去焦点&#xff0c;就会提前提示验证码是否正确。 一&#xff0c;模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...

[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...

数据链路层的主要功能是什么

数据链路层&#xff08;OSI模型第2层&#xff09;的核心功能是在相邻网络节点&#xff08;如交换机、主机&#xff09;间提供可靠的数据帧传输服务&#xff0c;主要职责包括&#xff1a; &#x1f511; 核心功能详解&#xff1a; 帧封装与解封装 封装&#xff1a; 将网络层下发…...

高危文件识别的常用算法:原理、应用与企业场景

高危文件识别的常用算法&#xff1a;原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件&#xff0c;如包含恶意代码、敏感数据或欺诈内容的文档&#xff0c;在企业协同办公环境中&#xff08;如Teams、Google Workspace&#xff09;尤为重要。结合大模型技术&…...

C# 类和继承(抽象类)

抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...

04-初识css

一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...

【C语言练习】080. 使用C语言实现简单的数据库操作

080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...