几个简单的浏览结构化数据的方法:
from bs4 import BeautifulSoup soup = BeautifulSoup (html_doc )
print (soup .prettify ())
# <html>
我要大蜥蜴# <head>
# <title>
# The Dormou's story
曹操手下
# </title>
# </head>
# <body>
# <p class="title">
# <b>
# The Dormou's story
# </b>
# </p>
# <p class="story">
# Once upon a time there were three little sisters; and their names were
# <a class="sister" href="/elsie" id="link1">
# Elsie
# </a>
# ,
# <a class="sister" href="/lacie" id="link2">
# Lacie
# </a>
# and
# <a class="sister" href="/tillie" id="link2">
# Tillie
# </a>如何理解创新
# ; and they lived at the bottom of a well.
# </p>
# <p class="story">
# ...
# </p>
# </body>
新郎对新娘的简短表白# </html>
从文档中找到所有<a>标签的链接:
从文档中获取所有文字内容:
soup .title # <title>The Dormou's story</title>
soup .title .name
# u'title'
soup .title .string
# u'The Dormou's story'
soup .title .parent .name
# u'head'
soup .p
# <p class="title"><b>The Dormou's story</b></p>
soup .p ['class']
# u'title'
soup .a
# <a class="sister" href="/elsie" id="link1">Elsie</a>
soup .find_all ('a')
# [<a class="sister" href="/elsie" id="link1">Elsie</a>,
# <a class="sister" href="/lacie" id="link2">Lacie</a>,
# <a class="sister" href="/tillie" id="link3">Tillie</a>]
soup .find (id ="link3")
# <a class="sister" href="/tillie" id="link3">Tillie</a>
for link in soup .find_all ('a'):
print (link .get ('href'))
# /elsie
# /lacie
# /tillie
这是你想要的吗?别着急,还有更好用的
安装 Beautiful Soup
如果你用的是新版的Debain 或ubuntu,那么可以通过系统的软件包管理来安装:
Beautiful Soup 4 通过PyPi 发布,所以如果你无法使用系统包管理安装,那么也可以通过 easy_install 或 pip 来安装.包的名字是 beautifulsoup4 ,这个包兼容Python2和Python3.
(在PyPi 中还有一个名字是 BeautifulSoup 的包,但那可能不是你想要的,那是 Beautiful Soup3 的发布版本,因为很多项目还在使用BS3, 所以 BeautifulSoup 包依然有效.但是如果你在编写新项目,那么你应该安装的
beautifulsoup4 )
如果你没有安装 easy_install 或 pip ,那你也可以 下载BS4的源码 ,然后通过tup.py 来安装.
如果上述安装方法都行不通,Beautiful Soup 的发布协议允许你将BS4的代码打包在你的项目中,这样无须安装即可使用.
作者在Python2.7和Python3.2的版本下开发Beautiful Soup, 理论上Beautiful Soup 应该在所有当前的Python 版本中正常工作
石湖居士安装完成后的问题
Beautiful Soup 发布时打包成Python2版本的代码,在Python3环境下安装时,会自动转换成Python3的代码,如果没有一个安装的过程,那么代码就不会被转换.print (soup .get_text ())# The Dormou's story
#
# The Dormou'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.
#
# ...
w908$ apt ‐get install Python‐bs4$ easy_install beautifulsoup4
$ pip install beautifulsoup4
有创意的画$ Python tup.py install
如果代码抛出了 ImportError 的异常: “No module named HTMLParr”, 这是因为你在Python3版本中执行Python2版本的代码.
如果代码抛出了 ImportError 的异常: “No module named html.parr”, 这是因为你在Python2版本中执行Python3版本的代码.
如果遇到上述2种情况,最好的解决方法是重新安装BeautifulSoup4.
如果在ROOT_TAG_NAME = u’[document]’代码处遇到 SyntaxError “Invalid syntax”错误,需要将把BS4的Python 代码版本从Python2转换到Python3. 可以重新安装BS4:
或在bs4的目录中执行Python 代码版本转换脚本
安装解析器
Beautiful Soup 支持Python 标准库中的HTML 解析器,还支持一些第三方的解析器,其中一个是 lxml .根据操作系统不同,可以选择下列方法来安装lxml:
另一个可供选择的解析器是纯Python 实现的 html5lib , html5lib 的解析方式与浏览器相同,可以选择下列方法来安装html5lib:
下表列出了主要的解析器,以及它们的优缺点:$ Python3 tup.py install $ 2to3‐3.2 ‐w bs4
$ apt ‐get install Python‐lxml $ easy_install lxml
$ pip install lxml $ apt ‐get install Python‐html5lib $ easy_install html5lib
$ pip install html5lib