惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
J
Java Code Geeks
Blog — PlanetScale
Blog — PlanetScale
F
Fortinet All Blogs
腾讯CDC
大猫的无限游戏
大猫的无限游戏
Jina AI
Jina AI
WordPress大学
WordPress大学
雷峰网
雷峰网
小众软件
小众软件
D
DataBreaches.Net
V
Visual Studio Blog
博客园 - Franky
IT之家
IT之家
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
B
Blog RSS Feed
博客园 - 聂微东
T
Tailwind CSS Blog
有赞技术团队
有赞技术团队
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Microsoft Security Blog
Microsoft Security Blog
G
Google Developers Blog
云风的 BLOG
云风的 BLOG

博客园 - 小采采

python之jieba库 Python 标准库笔记(1) — String模块 python爬虫---selenium库的用法 Python 字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、分割等) python字符串截取、查找、分割 jupyter notebook快捷键使用指南 python中防止字符串转义 Python之print()函数 使用腾讯电脑管家清理电脑后,上不了网了 Python正则表达式指南 python之format函数 python安装media报错 Python version 2.7 required, which was not found in the registry python第三方库之PyGraphics 83款 网络爬虫开源软件 基于CRF工具的机器学习方法命名实体识别的过 几款开源分词工具比较 win7中安装mysql JDK安装与环境变量配置
Python中第三方的用于解析HTML的库:BeautifulSoup
小采采 · 2015-01-21 · via 博客园 - 小采采

背景

在Python去写爬虫,网页解析等过程中,比如:

如何用Python,C#等语言去实现抓取静态网页+抓取动态网页+模拟登陆网站

常常需要涉及到HTML等网页的解析。

当然,对于简单的HTML中内容的提取,Python内置的正则表达式Re模块,就足够用了,

但是对于复杂的HTML的处理,尤其是一些非法的,有bug的html代码的处理,那么最好还是用专门的HTML的解析的库。

Python中的,专门用于HTML解析的库,比较好用的,就是BeautifulSoup。

BeautifulSoup简介

Python中,专门用于HTML/XML解析的库;

特点是:

即使是有bug,有问题的html代码,也可以解析。

功能很强大;

BeautifulSoup的主页是:

http://www.crummy.com/software/BeautifulSoup/

BeautifulSoup的版本

BeautifulSoup主要有两个版本:

BeautifulSoup 3

之前的,比较早的,是3.x的版本。

BeautifulSoup 3的在线文档

最新的,可用的,在线文档是:

http://www.crummy.com/software/BeautifulSoup/bs3/documentation.html

中文版的是:

http://www.crummy.com/software/BeautifulSoup/bs3/documentation.zh.html

下载BeautifulSoup 3

http://www.crummy.com/software/BeautifulSoup/bs3/download//3.x/

中可以下载到很多版本,比如我常用的3.0.6的版本:

BeautifulSoup-3.0.6.py

http://www.crummy.com/software/BeautifulSoup/bs3/download//3.x/BeautifulSoup-3.0.6.py

BeautifulSoup 4:缩写为bs4

最新的v4版本的BeautifulSoup,改名为bs4了。

注意:

使用bs4时,导入BeautifulSoup的写法是:

1

from bs4 import BeautifulSoup;

然后就可以像之前3.x中一样,直接使用BeautifulSoup了。

详见:

【已解决】Python3中,已经安装了bs4(Beautifulsoup 4)了,但是却还是出错:ImportError: No module named BeautifulSoup

bs4的在线文档

http://www.crummy.com/software/BeautifulSoup/bs4/doc/

下载bs4

http://www.crummy.com/software/BeautifulSoup/bs4/download/

可以下载到对应的bs4的版本,比如:

此时最新的版本是:

beautifulsoup4-4.1.3.tar.gz

http://www.crummy.com/software/BeautifulSoup/bs4/download/beautifulsoup4-4.1.3.tar.gz

BeautifulSoup的用法

如何安装BeautifulSoup

3.0.6之前:无需安装,放到和Python文件同目录下即可使用

3.0.6之前,都是不需要安装的,所以使用起来最简单,直接下载对应的版本,比如:

http://www.crummy.com/software/BeautifulSoup/bs3/download//3.x/BeautifulSoup-3.0.6.py

得到了BeautifulSoup-3.0.6.py,然后改名为:BeautifulSoup.py

然后,放到和你当前的python文件同目录下,比如我当前python文件是:

D:\tmp\tmp_dev_root\python\beautifulsoup_demo\beautifulsoup_demo.py

那就放到

D:\tmp\tmp_dev_root\python\beautifulsoup_demo\

下面,和beautifulsoup_demo.py同目录。

3.0.6之后:需要安装BeautifulSoup后才可使用

关于如何安装一个Python的第三方模块,简单说就是,进入对应目录,运行:

详细解释可参考:

【总结】Python安装第三方的库、package的方法

如何使用BeautifulSoup

在你的Python文件,此处为beautifulsoup_demo.py,中直接import即可。

关于示例html代码,比如使用:

【教程】抓取网并提取网页中所需要的信息 之 Python版

相关参考文档:

3.x版本的:

find(name, attrs, recursive, text, **kwargs)

使用BeautifulSoup提取html中的某个内容

关于最简单的,最基本的用法,提取html中的某个内容,具体用法,就死使用对应的find函数。

完整代码是:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

from BeautifulSoup import BeautifulSoup;

def beautifulsoupDemo():

    demoHtml = 

;

    soup = BeautifulSoup(demoHtml);

    print "type(soup)=",type(soup); 

    print "soup=",soup;

    h1userSoup = soup.find(name="h1", attrs={"class":"h1user"});

    print "h1userSoup=",h1userSoup; 

    h1userUnicodeStr = h1userSoup.string;

    print "h1userUnicodeStr=",h1userUnicodeStr; 

if __name__ == "__main__":

    beautifulsoupDemo();

输出为:

1

2

3

4

5

6

7

8

9

10

11

12

13

D:\tmp\tmp_dev_root\python\beautifulsoup_demo>beautifulsoup_demo.py

type(soup)= <type 'instance'>

soup=

<html>

<body>

<div class="icon_col">

<h1 class="h1user">crifan</h1>

</div>

</body>

</html>

h1userSoup= <h1 class="h1user">crifan</h1>

h1userUnicodeStr= crifan

使用BeautifulSoup修改/改变/替换原先html中的某个内容

如果需要改变原先html中的某个值,可以参考官网解释:

修改属性值

后来证实,只能改(Tag的)中的属性的值,不能改(Tag的)的值本身

完整示例代码为:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

from BeautifulSoup import BeautifulSoup;

def beautifulsoupDemo():

    demoHtml = 

;

    soup = BeautifulSoup(demoHtml);

    print "type(soup)=",type(soup); 

    print "soup=",soup;

    print '{0:=^80}'.format(" 1. extract content ");

    h1userSoup = soup.find(name="h1", attrs={"class":"h1user"});

    print "h1userSoup=",h1userSoup; 

    h1userUnicodeStr = h1userSoup.string;

    print "h1userUnicodeStr=",h1userUnicodeStr; 

    print '{0:=^80}'.format(" 2. demo change tag value and property ");

    print '{0:-^80}'.format(" 2.1 can NOT change tag value ");

    print "old tag value=",soup.body.div.h1.string; 

    changedToString = u"CrifanLi";

    soup.body.div.h1.string = changedToString;

    print "changed tag value=",soup.body.div.h1.string; 

    print "After changed tag value, new h1=",soup.body.div.h1; 

    print '{0:-^80}'.format(" 2.2 can change tag property ");  

    soup.body.div.h1['class'= "newH1User";

    print "changed tag property value=",soup.body.div.h1; 

if __name__ == "__main__":

    beautifulsoupDemo();

总结

更多的,用法和使用心得,部分内容,已整理到:

【总结】Python的第三方库BeautifulSoup的使用心得

【整理】关于Python中的html处理库函数BeautifulSoup使用注意事项