掌握Python的X篇_30_使用python解析网页HTML

本篇将会介绍beutifulsoup4模块,可以用于网络爬虫、解析HTML和XML,对于没有接触过前端,不了解HTML是如何工作的,需要先解释一下什么事HTML。

1. HTML

网页中的各种布局等的背后都是非常简单的纯文本格式,那种格式称为HTML

关于HTML不用刻意的去学习,所谓的HTML就是一堆<>括起来的符合或单词,不同的单词就是标签,其对应了不同的作用。

如果在网络上进行通信,获取网页,实际上不会得到我们打开的网页的界面,得到的就是html的代码,而我们关心的可能就是HTML中的一部内容,就需要对HTTML也就是字符串进行解析,找出我们需要的部分。通过python的字符串来进行处理也是可行的,但是考虑到处理的效率,也有相应的开发的模块。

2. 安装bs4

bash 复制代码
pip install beutifulsoup4

官网文档(中文版):
https://www.crummy.com/software/BeautifulSoup/bs4/doc.zh/

3. 使用BeautifulSoup解析HTML实例

使用的HTML代码如下:来自于官方文档中的范例:ap均为标签

bash 复制代码
html_doc = """
<html><head><title>The Dormouse's story</title></head>
<body>
<p class="title"><b>The Dormouse's story</b></p>

<p class="story">Once upon a time there were three little sisters; and their names were
<a href="http://example.com/elsie" class="sister" id="link1">Elsie</a>,
<a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and
<a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>;
and they lived at the bottom of a well.</p>

<p class="story">...</p>
"""

将其拷贝到一个txt文件,改后缀为html,利用浏览器打开就是一个网页如下:

  • bs4中提供了BeautifulSoup的方法,它可以将html字符串,转化为一个soup对象。
  • soup对象中提供了各种属性方法,对应了htm文档,使得我们可以很方便地提取相关信息

以下演示如何进行安装、导入模块、进行HTML的缩进美化

bash 复制代码
C:\Users\>pip install beautifulsoup4
C:\Users\>ipython
In [1]: from bs4 import BeautifulSoup
In [2]: html_doc = """
   ...: <html><head><title>The Dormouse's story</title></head>
   ...: <body>
   ...: <p class="title"><b>The Dormouse's story</b></p>
   ...:
   ...: <p class="story">Once upon a time there were three little sisters; and their names were
   ...: <a href="http://example.com/elsie" class="sister" id="link1">Elsie</a>,
   ...: <a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and
   ...: <a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>;
   ...: and they lived at the bottom of a well.</p>
   ...:
   ...: <p class="story">...</p>
   ...: """

In [3]: soup = BeautifulSoup(html_doc, 'html.parser') #转变为soup对象

In [4]: print(soup.prettify()) #把原有HTML源码进行缩进美化
<html>
 <head>
  <title>
   The Dormouse's story
  </title>
 </head>
 <body>
  <p class="title">
   <b>
    The Dormouse's story
   </b>
  </p>
  <p class="story">
   Once upon a time there were three little sisters; and their names were
   <a class="sister" href="http://example.com/elsie" id="link1">
    Elsie
   </a>
   ,
   <a class="sister" href="http://example.com/lacie" id="link2">
    Lacie
   </a>
   and
   <a class="sister" href="http://example.com/tillie" id="link3">
    Tillie
   </a>
   ;
and they lived at the bottom of a well.
  </p>
  <p class="story">
   ...
  </p>
 </body>
</html>

构造得到的soup对象中提供了各种操作的方法。

find_all:找到所有的标签,返回一个list,list中的每个元素,是标签对象。

bash 复制代码
In [5]: soup.find_all("a")
Out[5]:
[<a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>,
 <a class="sister" href="http://example.com/lacie" id="link2">Lacie</a>,
 <a class="sister" href="http://example.com/tillie" id="link3">Tillie</a>]
 In [6]: for i in soup.find_all("a"):
   ...:     print(i)
   ...:
<a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>
<a class="sister" href="http://example.com/lacie" id="link2">Lacie</a>
<a class="sister" href="http://example.com/tillie" id="link3">Tillie</a>

In [7]: mylist = soup.find_all("a")

In [8]: tag0 = mylist[0]

In [9]: tag0
Out[9]: <a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>

In [10]: tag0['href'] #标签类似dict的封装,得到href的value
Out[10]: 'http://example.com/elsie'
In [11]: for item in mylist:
    ...:     print(item["href"])
    ...:
http://example.com/elsie
http://example.com/lacie
http://example.com/tillie

4.学习视频地址: 使用python解析网页HTML

相关推荐
懒大王爱吃狼1 小时前
Python 向量检索库Faiss使用
开发语言·python·自动化·python基础·python教程
Jackilina_Stone2 小时前
【论文阅读笔记】SCI算法与代码 | 低照度图像增强 | 2022.4.21
论文阅读·人工智能·笔记·python·算法·计算机视觉
糖炒狗子3 小时前
2.Web安全——HTML基础
安全·web安全·html
sysu634 小时前
59.螺旋矩阵Ⅱ python
数据结构·python·算法·leetcode·面试
小码贾4 小时前
OpenCV-Python实战(14)——轮廓拟合
人工智能·python·opencv
游客5205 小时前
自动化办公 | 根据成绩进行自动评级
开发语言·python·自动化
AI航海家(Ethan)5 小时前
Ragas自动化评测整体后端流程
python
余生H5 小时前
前端Python应用指南(七)使用SQLAlchemy与Django ORM:数据库操作的Python实践
前端·python·django
是萝卜干呀5 小时前
Frontend - 分页(针对 python / Django )
python·ajax·django·jsonresponse·paginator