一、介绍

BeautifulSoup为一个python库,它可以接收一个HTML或XML的字符串或文件,并返回一个BeautifulSoup对象,之后我们可以使用BeautifulSoup提供的众多方法来对文件内容进行解析。

二、安装

1、使用pip安装

pip install beautifulsoup4
#安装BeautifulSoup解析器
pip install lxml
pip install html5lib

2、通过apt-get安装

sudo apt-get install Python-bs4
#安装BeautifulSoup解析器
sudo apt-get install Python-lxml
sudo apt-get install Python-html5lib

推荐使用lxml作为解析器,因为其效率更高。

三、常用方法

下面的例子将解析以下字符串:

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 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>
"""

1、将字符串包装厂BeautifulSoup对象

soup = BeautifulSoup(html, "lxml")
#使用标准的缩进结构输出
print soup.prettify()

输出:

<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>

2、使用name获取标签名称

print soup.a
print soup.a.name

输出:

<a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>
a

需要注意的是,使用soup.[tag]来访问标签只会返回第一个名为tag的标签,若想返回所有的或者根据条件返回,可以使用find_all()方法。

3、使用string获取标签内容

通过访问标签的string属性可以获取标签的内容。

print soup.title.string

输出:

The Dormouse's story

需要注意的是使用string来访问标签内容时,该标签内只能包含一个子节点,若有多个子节点,使用string会返回None,因为不知道该返回哪个子节点的内容。

print soup.body.string

输出:

None

string换成strings即可:

strings = soup.body.strings
for string in strings:
print string

输出:



The Dormouse's story

Once upon a time there were three little sisters; and their names were

Elsie
, Lacie
and Tillie
;
and they lived at the bottom of a well. ...

可以看到输出有很多多余的空行和空格,使用stripped_strings即可去除这些空行和空格:

strings = soup.body.stripped_strings
for string in strings:
print string

输出:

The Dormouse's story
Once upon a time there were three little sisters; and their names were
Elsie
,
Lacie
and
Tillie
;
and they lived at the bottom of a well.
...

4、获取标签的属性名称

#获取第一个<p>标签的class属性
soup.p["class"]

输出:

['title']

返回的为一个列表,因为class可能有多个值。

#获取第一个<a>标签的href属性
soup.a["href"]

输出:

'http://example.com/elsie'

5、更改标签的属性值

#更改第一个<p>标签的href属性
soup.p["class"] = "new-class"
print soup.p["class"] #更改第一个<a>标签的href属性
soup.a["href"] = "www.google.com"
print soup.a["href"] print soup.prettify()

输出:

new-class
www.google.com
<html>
<head>
<title>
The Dormouse's story
</title>
</head>
<body>
<p class="new-class">
<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="www.google.com" 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>

6、find_all方法

6.1 返回所有的标签

#返回文档中所有的<a>标签,返回值为列表
links = soup.find_all("a")
print links

输出:

[<a class="sister" href="www.google.com" 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>]

6.2、根据属性名返回标签

#返回文档中所有的类名为sister的<a>标签,返回值为列表
#class为python关键字,所以使用class_代替
links = soup.find_all("a", class_="sister")
print links
print '-'*20
#与上面的相同
links = soup.find_all("a", attrs={"class":"sister"})
print links
print '-'*20
#返回文档中所有的id为link2的<a>标签,返回值为列表
links = soup.find_all("a", id="link2")
print links

输出:

[<a class="sister" href="www.google.com" 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>]
--------------------
[<a class="sister" href="www.google.com" 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>]
--------------------
[<a class="sister" href="http://example.com/lacie" id="link2">Lacie</a>]

6.3、获取所有标签的href属性

links = soup.find_all("a")
for a in links:
print a["href"]

输出:

www.google.com
http://example.com/lacie
http://example.com/tillie

三、参考

1、https://www.crummy.com/software/BeautifulSoup/bs4/doc/index.zh.html

BeautifulSoup使用总结的更多相关文章

  1. Python爬虫小白入门(三)BeautifulSoup库

    # 一.前言 *** 上一篇演示了如何使用requests模块向网站发送http请求,获取到网页的HTML数据.这篇来演示如何使用BeautifulSoup模块来从HTML文本中提取我们想要的数据. ...

  2. 使用beautifulsoup与requests爬取数据

    1.安装需要的库 bs4 beautifulSoup  requests lxml如果使用mongodb存取数据,安装一下pymongo插件 2.常见问题 1> lxml安装问题 如果遇到lxm ...

  3. BeautifulSoup :功能使用

    # -*- coding: utf-8 -*- ''' # Author : Solomon Xie # Usage : 测试BeautifulSoup一些用法及容易出bug的地方 # Envirom ...

  4. BeautifulSoup研究一

    BeautifulSoup的文档见 https://www.crummy.com/software/BeautifulSoup/bs4/doc.zh/ 其中.contents 会将换行也记录为一个子节 ...

  5. BeautifulSoup

    参考:http://www.freebuf.com/news/special/96763.html 相关资料:http://www.jb51.net/article/65287.htm 1.Pytho ...

  6. BeautifulSoup Some characters could not be decoded, and were replaced with REPLACEMENT CHARACTER.

    BeautifulSoup很赞的东西 最近出现一个问题:Python 3.3 soup=BeautifulSoup(urllib.request.urlopen(url_path),"htm ...

  7. beautifulSoup(1)

    import re from bs4 import BeautifulSoupdoc = ['<html><head><title>Page title</t ...

  8. python BeautifulSoup模块的简要介绍

    常用介绍: pip install beautifulsoup4 # 安装模块 from bs4 import BeautifulSoup # 导入模块 soup = BeautifulSoup(ht ...

  9. BeautifulSoup 的用法

    转自:http://cuiqingcai.com/1319.html Beautiful Soup支持Python标准库中的HTML解析器,还支持一些第三方的解析器,如果我们不安装它,则 Python ...

  10. BeautifulSoup的选择器

    用BeautifulSoup查找指定标签(元素)的时候,有几种方法: soup=BeautifulSoup(html) 1.soup.find_all(tagName),返回一个指定Tag元素的列表 ...

随机推荐

  1. ZOJ 1314 Reactor Cooling | 上下界无源汇可行流

    ZOJ 1314 Reactor Cooling | 上下界无源汇可行流 题意 有一个网络,每条边有流量的上界和下界,求一种方案,让里面的流可以循环往复地流动起来. 题解 上下界无源汇可行流的模型: ...

  2. SP422 TRANSP2 - Transposing is Even More Fun——置换群+反演

    挺神仙的置换题 SP422 TRANSP2 - Transposing is Even More Fun 这个博客除了开始举例子别的都是对的: https://blog.csdn.net/Braket ...

  3. node.js 开发简易的小爬虫

    node.js  开发简易的小爬虫 最近公司开发一款医药类的软件,所以需要一些药品的基础数据,所以本人就用node.js写一个简易的小爬虫,并写记录这个Demo以供大家参考. 一.开发前的准备: 1, ...

  4. valgrind使用指南

    http://note.youdao.com/noteshare?id=5de9c049ccdb1defdc4368db83813dd3

  5. java生成棋盘

    第一步:新建java项目,具体的命名,看下面的文件结构. 第二步:代码区 DrawChessBoard类: package com.hp.chenyanlong; import java.awt.Gr ...

  6. Nginx模块之Nginx-Ts-Module学习笔记(一)抢险体验

    1.通过HTTP接收MPEG-TS2.生产和管理Live HLS 3.按照官方的编译和配置,当然了我是第一次编译没有通过,在作者重新调整下,编译成功,感谢:@arut https://github.c ...

  7. git 查看一个分支是否被合并过

    1.查看该分支的提交历史 git log 分支名 2.git log master |grep comitid 如果包含,就证明已经合并过 3.git branch -d 分支名,如果报错,就是没合并 ...

  8. [整理]WebAPP开发的框架

    http://www.zhihu.com/question/27210335 http://ionicframework.com/getting-started/ http://cordova.apa ...

  9. css左右等高问题

    先看看预览效果:http://lgdy.whut.edu.cn/index.php?c=home&a=detail&id=3394 再来谈谈css左右等高的应用场景:在内容管理系统(c ...

  10. 20155215 2016-2017-2 《Java程序设计》第8周学习总结

    20155215 2016-2017-2 <Java程序设计>第7周学习总结 教材学习内容总结 第十四章 NIO使用频道(Channel)来衔接数据节点.在处理数据时,NIO可以让你设置缓 ...