一、介绍

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. POJ 2235 Frogger / UVA 534 Frogger /ZOJ 1942 Frogger(图论,最短路径)

    POJ 2235 Frogger / UVA 534 Frogger /ZOJ 1942 Frogger(图论,最短路径) Description Freddy Frog is sitting on ...

  2. HDU 2255 KM算法 二分图最大权值匹配

    奔小康赚大钱 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Subm ...

  3. C++委托模式

    希望想理解C++委托的同学,能够从代码中悟出其中的原理.有什么不太清楚的地方,欢迎留言交流. #include <bits/stdc++.h> using namespace std; # ...

  4. vue之props父子组件之间的谈话

    眨眼就来杭州两年了,时间真快. 我们今天来说说vue的一个api---->props 首先我们先看看一个例子,是我一个项目中写的. 看到这个:有木有一点懂了.要是没懂,继续往下看 这里我们用到了 ...

  5. ML—R常用多元统计分析包(持续更新中……)

    基本的R包已经实现了传统多元统计的很多功能,然而CRNA的许多其它包提供了更深入的多元统计方法,下面要综述的包主要分为以下几个部分: 1) 多元数据可视化(Visualising multivaria ...

  6. the error about “no such file or directory”

    CHENYILONG Blog the error about "no such file or directory" when you get the question like ...

  7. 记webpack下进行普通模块化开发基础配置(自动打包生成html、多入口多页面)

    写本记时(2018-06-25)的各版本 "webpack": "^4.6.0"  //可直接使用4x以上的开发模式,刷新很快 "webpack-de ...

  8. Jenkins的安装及使用(二)

    介绍两个方面:编译本地项目和拉取git代码并编译 在这之前,先要进行一个配置. 一.编译本地项目 开始添加任务,任务类型选择自由风格: 点击项目进入详情,源码管理选择无 在构建的地方选择项目,然后注意 ...

  9. 字符串格式化(百分号&format)

    字符串格式化 Python的字符串格式化有两种方式: 百分号方式.format方式 百分号方式: %[(name)][flags][width].[precision]typecode [  ]:表示 ...

  10. BAT脚本加防火墙455端口

    @echo off mode con: cols=85 lines=30 :NSFOCUSXA title WannaCry勒索病毒安全加固工具 color 0A cls echo. echo. ec ...