BeautifulSoup中文文档

更新时间:2023-08-11 21:47:58 阅读: 评论:0

BeautifulSoup中⽂⽂档
⼏个简单的浏览结构化数据的⽅法:
from bs4 import BeautifulSoup soup = BeautifulSoup (html_doc )
print (soup .prettify ())# # # # #
#
#
# 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.#
#
# ...#
# #
从⽂档中找到所有标签的链接:
从⽂档中获取所有⽂字内容:
soup .title #
soup .title .name # u'title'
soup .title .string
# u'The Dormou's story'
soup .title .parent .name # u'head' soup .p
#
The Dormou's story
soup .p ['class']# u'title' soup .a
# Elsie
soup .find_all ('a')
# [Elsie,# Lacie,# Tillie]
soup .find (id ="link3")
# Tillie
for link in soup .find_all ('a'): print (link .get ('href')) #
/doc/760dd45fba68a98271fe910ef12d2af90342a816.html /elsie #
/doc/760dd45fba68a98271fe910ef12d2af90342a816.html /lacie #
/doc/760dd45fba68a98271fe910ef12d2af90342a816.html /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.## ...
$ 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
解析器使⽤⽅法
优势
劣势
Python 标准库BeautifulSoup(markup, "html.parr")
Python 的内置标准库执⾏速度适中⽂档容错能⼒强
Python 2.7.3 or 3.2.2前的版本中⽂档容错能⼒差
lxml HTML 解析器BeautifulSoup(markup, "lxml")速度快⽂档容错能⼒强需要安装C 语⾔库
lxml XML 解析器
BeautifulSoup(markup, ["lxml", "xml"])
BeautifulSoup(markup, "xml")速度快唯⼀⽀持XML 的解析器
需要安装C 语⾔库
html5lib
BeautifulSoup(markup, "html5lib")
最好的容错性以浏览器的⽅式解析⽂档⽣成HTML5格式的⽂档
速度慢不依赖外部扩展
可能英语推荐使⽤lxml 作为解析器,因为效率更⾼. 在Python2.7.3之前的版本和Python3中3.2.2之前的版本,必须安装lxml 或html5lib, 因为那些Python 版本的标准库中内置的HTML 解析⽅法不够稳定.
提⽰: 如果⼀段HTML 或XML ⽂档格式不正确的话,那么在不同的解析器中返回的结果可能是不⼀样的,查看解析器之间的区别了解更多细节
如何使⽤
将⼀段⽂档传⼊BeautifulSoup 的构造⽅法,就能得到⼀个⽂档的对象, 可以传⼊⼀段字符串或⼀个⽂件句柄.
⾸先,⽂档被转换成Unicode,并且HTML 的实例都被转换成Unicode 编码
然后,Beautiful Soup 选择最合适的解析器来解析这段⽂档,如果⼿动指定解析器那么Beautiful Soup 会选择指定的解析器来解析⽂档.(参考解析成XML ).
对象的种类
Beautiful Soup 将复杂HTML ⽂档转换成⼀个复杂的树形结构,每个节点都是Python 对象,所有对象可以归纳为4种:
Tag , NavigableString , BeautifulSoup , Comment .
Tag
from bs4 import BeautifulSoup soup = BeautifulSoup (open ("index.html"))soup = BeautifulSoup ("data")
BeautifulSoup ("Sacr bleu!")Sacré bleu !
Tag 对象与XML 或HTML 原⽣⽂档中的tag 相同:
nail up
Tag 有很多⽅法和属性,在遍历⽂档树和搜索⽂档树中有详细解释.现在介绍⼀下tag 中最重要的属性: name 和attributes Name
integration每个tag 都有⾃⼰的名字,通过 .name 来获取:
quotation如果改变了tag 的name,那将影响所有通过当前Beautiful Soup 对象⽣成的HTML ⽂档:
Attributes
⼀个tag 可能有很多个属性. tag 有⼀个 “class” 的属性,值为 “boldest” . tag 的属性的操作⽅法与字典相同:
也可以直接”点”取属性, ⽐如: .attrs :
晋书翻译tag 的属性可以被添加,删除或修改. 再说⼀次, tag 的属性操作⽅法与字典⼀样
soup = BeautifulSoup ('Extremely bold')tag = soup .b type (tag )commercialinvoice
#
tag .name # u'b'
tag .name = "blockquote"tag
#
Extremely bold
tag ['class']# u'boldest'
tag .attrs # {u'class': u'boldest'}
多值属性
HTML 4定义了⼀系列可以包含多个值的属性.在HTML5中移除了⼀些,却增加更多.最常见的多值的属性是 class (⼀个tag 可以有多个CSS 的class). 还有⼀些属性 rel , rev , accept -chart , headers , accesskey . 在Beautiful Soup 中多值属性的返回类型是list:
如果某个属性看起来好像有多个值,但在任何版本的HTML 定义中都没有被定义为多值属性,那么Beautiful Soup 会将这个属性作为字符串返回
将tag 转换成字符串时,多值属性会合并为⼀个值
tag ['class'] = 'verybold'tag ['id'] = 1tag
#shure
Extremely bold
del tag ['class']del tag ['id']tag
#
咒愿Extremely bold
tag ['class']# KeyError: 'class'print (tag .get ('class'))# None
css_soup = BeautifulSoup ('
')css_soup .p ['class']# ["body", "strikeout"]
css_soup = BeautifulSoup ('
')css_soup .p ['class']# ["body"]
id_soup = BeautifulSoup ('
')id_soup .p ['id']# 'my id'
如果转换的⽂档是XML 格式,那么tag 中不包含多值属性
可以遍历的字符串
字符串常被包含在tag 内.Beautiful Soup ⽤ NavigableString 类来包装tag 中的字符串:
⼀个 NavigableString 字符串与Python 中的Unicode 字符串相同,并且还⽀持包含在遍历⽂档树和搜索⽂档树中的⼀些特性. 通过 unicode() ⽅法可以直接将 NavigableString 对象转换成Unicode 字符串:
tag 中包含的字符串不能编辑,但是可以被替换成其它的字符串,⽤ replace_with() ⽅法:
NavigableString 对象⽀持遍历⽂档树和搜索⽂档树中定义的⼤部分属性, 并⾮全部.尤其是,⼀个字符串不能包
含其它内容(tag 能够包含字符串或是其它tag),字符串不⽀持 .contents 或 .string 属性或 find() ⽅法.如果想在Beautiful Soup 之外使⽤ NavigableString 对象,需要调⽤ unicode() ⽅法,将该对象转换成
普通的Unicode 字符串,否则就算Beautiful Soup 已⽅法已经执⾏结束,该对象的输出也会带有对象的引⽤地址.这样会浪费内存.
rel_soup = BeautifulSoup ('
Back to the homepage
')rel_soup .a ['rel']# ['index']
experience可数吗rel_soup .a ['rel'] = ['index', 'contents']print (rel_soup .p )
#
Back to the homepage
xml_soup = BeautifulSoup ('
', 'xml')xml_soup .p ['class']# u'body strikeout'

本文发布于:2023-08-11 21:47:58,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/90/194056.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:属性   安装   代码   解析器   对象   版本   字符串
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图