Python实现解析Html的方法与对比

 更新时间:2024年03月22日 15:51:42   作者:microhex  
在最近需要的需求中,需要 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)

比如我现在想获取新浪新闻的列表:

对 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.text
    tree = 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的优势:

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

lxml的优势:

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

区别:

解析速度:lxml的解析速度通常比BeautifulSoup更快,特别是在处理大型文档时。如果性能是主要考虑因素,lxml可能是更好的选择;

易用性:BeautifulSoup的API更加简单和直观,对于初学者来说更容易上手。而lxml的API相对更加底层和复杂,需要一定的学习成本。

文档支持:BeautifulSoup对于处理不规范的HTML文档更加宽容,而lxml更倾向于处理well-formed的XML文档。

依赖项:BeautifulSoup是一个纯Python库,没有外部依赖。而lxml依赖于C语言编写的libxml2和libxslt库,需要单独安装。

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

以上就是Python实现解析Html的方法与对比的详细内容,更多关于Python解析Html的资料请关注脚本之家其它相关文章!

相关文章

  • Python分聃 之数字雨加入潘周聃运动曲线的详细过程

    Python分聃 之数字雨加入潘周聃运动曲线的详细过程

    相信各位同学最近一定被潘周聃刷屏和洗脑了,互联网上也出现了这种各样的模仿者,下面通过本文给大家分享Python分聃之数字雨加入潘周聃运动曲线,需要的朋友可以参考下
    2022-05-05
  • Python绘制数据图表的超详细教程

    Python绘制数据图表的超详细教程

    画一个吸引人注意的图表相当重要,当你探索一个数据集,需要画图表,图表看起来令人愉悦是件很高兴的事,下面这篇文章主要给大家介绍了关于Python绘制数据图表的超详细教程,需要的朋友可以参考下
    2022-11-11
  • 属性与 @property 方法让你的python更高效

    属性与 @property 方法让你的python更高效

    这篇文章主要介绍了python 属性与 @property 方法的相关资料,帮助大家更好的理解和学习python,感兴趣的朋友可以了解下
    2020-09-09
  • 在Python的Django框架中调用方法和处理无效变量

    在Python的Django框架中调用方法和处理无效变量

    这篇文章主要介绍了在Python的Django框架中调用方法和处理无效变量的方法,是Django编程中的基础操作,需要的朋友可以参考下
    2015-07-07
  • python实现抓取网页数据并生成excel的实例

    python实现抓取网页数据并生成excel的实例

    数据抓取与Excel生成流程:使用requests获取网页内容,BeautifulSoup或lxml解析,Pandas整理为DataFrame,最后保存为Excel,动态内容需用Selenium
    2025-06-06
  • PyTorch基于Transformer架构的完整文本生成实现方案

    PyTorch基于Transformer架构的完整文本生成实现方案

    PyTorch文本生成代码模板与解析 本文提供了一个基于Transformer架构的完整文本生成实现方案,包含以下核心内容: 代码架构: 完整实现从数据预处理到模型训练的端到端流程 包含Transformer核心组件,需要的朋友可以参考下
    2026-04-04
  • 关于Python网络爬虫requests库的介绍

    关于Python网络爬虫requests库的介绍

    这篇文章主要介绍了关于Python网络爬虫requests库,而很多时候这些数据存储在网页中,手动下载需要花费的时间太长,这时候我们就需要网络爬虫帮助我们自动爬取这些数据,需要的朋友可以参考下
    2023-04-04
  • 详谈Pandas中iloc和loc以及ix的区别

    详谈Pandas中iloc和loc以及ix的区别

    今天小编就为大家分享一篇详谈Pandas中iloc和loc以及ix的区别,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-06-06
  • python单下划线和双下划线属性区别

    python单下划线和双下划线属性区别

    本文主要介绍了python单下划线和双下划线属性区别,主要在于命名规范、访问意图、名称改写机制以及子类继承中的表现,感兴趣的可以了解一下
    2025-12-12
  • 从入门到避坑详解Pyinstaller打包Python程序的详细指南

    从入门到避坑详解Pyinstaller打包Python程序的详细指南

    本文将通过3大核心模块(基础操作→常见问题→解决方案)详细解析PyInstaller打包Python程序的详细过程,有需要的小伙伴可以跟随小编一起学习一下
    2025-08-08

最新评论