掌握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·能源
浦信仿真大讲堂1 小时前
从重复操作到自动化闭环:如何让 CST 与 Python 真正协同起来
python·自动化·cst·仿真软件·达索软件
Gu Gu Study2 小时前
ScoutLoop开放域深度研究引擎(agent的初步设计想法)
人工智能·python
卷无止境2 小时前
写代码这件事,到底该讲究点什么?
后端·python
卷无止境2 小时前
循环复杂度到底在算什么,Python 代码怎么才能写得让人一看就懂
后端·python
lpfasd1233 小时前
MediaCrawler 项目深度分析
chrome·python·chrome devtools
Dxy12393102163 小时前
Python项目打包成EXE完整教程(PyInstaller实战避坑)
开发语言·python
bamb004 小时前
一个项目带你入门AI应用开发01
python
0566464 小时前
Python康复训练——常用标准库
开发语言·python·学习
昆曲之源_娄江河畔4 小时前
Python如何安装flask, pymssql
开发语言·python·flask·pymssql