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.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的优势:

  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。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何在Linux系统部署Dupal CMS结合内网穿透实现无公网IP访问web界面

文章目录 前言1. Docker安装Drupal2. 本地局域网访问3 . Linux 安装cpolar4. 配置Drupal公网访问地址5. 公网远程访问Drupal6. 固定Drupal 公网地址 正文开始前给大家推荐个网站,前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默&a…

美摄科技剪同款SDK解决方案全面升级

视频内容已成为企业宣传、品牌塑造和市场营销的重要载体。然而,如何快速、高效地制作出高质量的视频内容,成为摆在众多企业面前的一大难题。针对这一挑战,美摄科技凭借深厚的技术积累和创新能力,推出了全新的剪同款SDK解决方案&am…

python 爬取杭州小区挂牌均价

下载chrome驱动 通过chrome浏览器的 设置-帮助-关于Google Chrome 查看你所使用的Chrome版本 驱动可以从这两个地方找: 【推荐】https://storage.googleapis.com/chrome-for-testing-publichttp://npm.taobao.org/mirrors/chromedriver import zipfile import os import r…

五、初识Django

初识Django 1.安装django2.创建项目2.1第一种方式:在终端2.2第二种方式:Pycharm 3.创建app4.快速上手4.1再写一个页面4.2templates模板4.3静态文件4.3.1static目录4.3.2引用静态文件 5.模板语法案例:伪联通新闻中心6.请求和相应案例&#xff…

23 OpenCV 直方图比较

文章目录 直方图比较的目的相关性计算 (CV_COMP_CORREL)卡方计算 (CV_COMP_CHISQR)十字计算(CV_COMP_INTERSECT)巴氏距离计算 (CV_COMP_BHATTACHARYYA )compareHist 直方图比较算子示例 直方图比较的目的 直方图比较的目的是衡量两幅图像之间的相似度或差异度。通过计算图像的颜…

数据可视化实战(三)

图书销量情况对比 import pandas as pd import matplotlib.pyplot as plt # 读取Excel数据 dfpd.read_excel(mrbook.xlsx) df序号书号序号.1月份销量rate0B189.787569e1211月15060.31B199.787569e1222月1200-0.32B259.787569e1233月33050.63B219.787569e1244月66100.54NaNNaN5…

redis从入门到实战

Redis基础 简介 Redis(Remote Dictionary Server)是一个开源的、基于内存的数据存储和缓存系统。它是一个高性能的键值存储数据库,,以其快速的读写能力、丰富的数据结构和多种应用场景而受到广泛关注。默认的database有16个&…

使用Docker搭建YesPlayMusic网易云音乐播放器并发布至公网访问

目录 ⛳️推荐 1. 安装Docker 2. 本地安装部署YesPlayMusic 3. 部署公有云YesPlayMusic播放器 3.1 安装cpolar内网穿透 3.2 固定YesPlayMusic公网地址 ⛳️推荐 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一…

Docker网桥、DockerFile自定义镜像、DockerCompose工具(二)

这里写目录标题 1、网桥1.1、网络相关操作1.1.1、创建网络1.1.2、列出网络1.1.3、加入网络1.1.4、查看网络详情1.1.5、删除网络 2、Dockerfile自定义镜像2.1、镜像结构2.2、Dockerfile语法2.2.1、概述2.2.2、快速入门2.2.1、FROM2.2.2、CMD2.2.3、ENV2.2.4、WORKDIR2.2.5、run2…

银行OA系统|基于SpringBoot架构+ Mysql+Java+ B/S结构的银行OA系统设计与实现(可运行源码+数据库+设计文档)

推荐阅读100套最新项目 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 2024年56套包含java,ssm,springboot的平台设计与实现项目系统开发资源(可…

基于FPGA的FFT图像滤波设计

1.FFT滤波算法介绍 FFT滤波就是通过傅里叶运算将图像转换到频域空间,然后在频域中对图像进行处理,最后将处理后的图像通过傅里叶逆运算将图像转会到时域空间。 在频域空间中,我们能够更好的对图像的噪声进行分析,然后找出相关规律…

MAC废纸篓删掉还能复原吗 MAC废纸篓倾倒掉的文件怎么恢复 删除的东西在哪里可以找回来 怎么找回已删除的文件

MAC系统中的废纸篓(Trash)通常指用来临时存放用户即将丢弃的文件的地方。MAC系统的废纸篓功能相当于Windows系统的垃圾回收站,通过废纸篓删除的文件,一般是无法从系统中操作还原。那么,MAC废纸篓删掉还能复原吗&#x…

5-隐藏层:神经网络为什么working

声明 本文章基于哔哩哔哩付费课程《小白也能听懂的人工智能原理》。仅供学习记录、分享,严禁他用!!如有侵权,请联系删除 目录 一、知识引入 (一)隐藏层 (二)泛化 (三…

UE4 Json事件设置Asset值(Asset如果都在同一目录下)

通过Json事件来设置,比如骨骼网格体(换皮)等等

202112青少年软件编程(Scratch图形化)等级考试试卷(三级)

第1题:【 单选题】 下列程序哪个可以实现: 按下空格键, 播放完音乐后说“你好! ” 2 秒? ( ) A: B: C: D: 【正确答案】: C 【试题解析】 : 第2题:【 单选题】 执行下列程序, 变量 N 的值不可能是? ( ) A:1 B:4 C:5 D:6 【正确答案】: D 【试题解析】…

Git进阶用法:Git分支轻松使用,配有图文

一、文章内容 git和分支相关的概念.git和分支有关的命令.git项目实战环节. 二、相关概念 分支:分支的概念好比树干的分支,每一跟分支都是从主干分出来的,营养是主干给的,所以在git里主干和分支也是如此,在git里主分…

day02_mysql-DDLDMLDQL_课后练习 - 参考答案

文章目录 day02_mysql_课后练习第1题第2题 day02_mysql_课后练习 第1题 案例: 1、创建数据库test02_library 2、创建表格books 字段名字段说明数据类型b_id书编号int(11)b_name书名varchar(50)authors作者varchar(100)price价格floatpub…

opengl 学习(六)-----坐标系统与摄像机

坐标系统与摄像机 分类引言坐标系统摄像机教程在CMake中使用全局定义预编译宏,来控制是否开启错误检查补充 分类 opengl c 引言 OpenGL希望在每次顶点着色器运行后,我们可见的所有顶点都为标准化设备坐标(Normalized Device Coordinate, NDC)。也就是说&#xff…

pcl采样:随机采样

pcl 随机采样,实际上就是抽稀 头文件 代码 结果

ubuntu系统下如何使用vscode编译和调试#小白入门#

编程环境:ubuntu系统为18.04.1,vscode版本为1.66.2 一、VSCode切换中文显示: 1、vscode安装完成后启动,在左侧externsions中搜索“简体中文”插件,并完成安装: 2、选择右下角齿轮形状的"Manage"&#xff…