ImageVerifierCode 换一换
格式:DOCX , 页数:71 ,大小:50.53KB ,
资源ID:577846      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-577846.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(Beautiful Soup 420 文档.docx)为本站会员(b****2)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

Beautiful Soup 420 文档.docx

1、Beautiful Soup 420 文档Beautiful Soup 4.2.0 文档Beautiful Soup是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式.Beautiful Soup会帮你节省数小时甚至数天的工作时间.这篇文档介绍了BeautifulSoup4中所有主要特性,并切有小例子.让我来向你展示它适合做什么,如何工作,怎样使用,如何达到你想要的效果,和处理异常情况.文档中出现的例子在Python2.7和Python3.2中的执行结果相同你可能在寻找Beautiful Soup3的文档,Beautif

2、ul Soup 3 目前已经停止开发,我们推荐在现在的项目中使用Beautiful Soup 4, 移植到BS4寻求帮助如果你有关于BeautifulSoup的问题,可以发送邮件到讨论组 .如果你的问题包含了一段需要转换的HTML代码,那么确保你提的问题描述中附带这段HTML文档的代码诊断1快速开始下面的一段HTML代码将作为例子被多次用到.这是爱丽丝梦游仙境的的一段内容(以后内容中简称为爱丽丝的文档):html_doc =The Dormouses storyThe Dormouses storyOnce upon a time there were three little sisters

3、; and their names wereElsie,Lacie andTillie;and they lived at the bottom of a well.使用BeautifulSoup解析这段代码,能够得到一个BeautifulSoup的对象,并能按照标准的缩进格式的结构输出:frombs4import BeautifulSoupsoup = BeautifulSoup(html_doc)print(soup.prettify()# # # # The Dormouses story# # # # # # The Dormouses story# # # # Once upon a

4、 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# The Dormouses storysoup.title.name# utitlesoup.title.string# uThe Dormouses storysoup.title.parent.name# uheadsoup.

5、p# The Dormouses storysoup.pclass# utitlesoup.a# Elsiesoup.find_all(a)# Elsie,# Lacie,# Tilliesoup.find(id=link3)# Tillie从文档中找到所有标签的链接:for link in soup.find_all(a):print(link.get(href)# # # 从文档中获取所有文字内容:print(soup.get_text()# The Dormouses story# The Dormouses story# Once upon a time there were thre

6、e little sisters; and their names were# Elsie,# Lacie and# Tillie;# and they lived at the bottom of a well.# .这是你想要的吗?别着急,还有更好用的安装 Beautiful Soup如果你用的是新版的Debain或ubuntu,那么可以通过系统的软件包管理来安装:$ apt-get install Python-bs4Beautiful Soup 4 通过PyPi发布,所以如果你无法使用系统包管理安装,那么也可以通过easy_install或pip来安装.包的名字是beautifulso

7、up4 ,这个包兼容Python2和Python3.$ easy_install beautifulsoup4$ pip install beautifulsoup4(在PyPi中还有一个名字是BeautifulSoup的包,但那可能不是你想要的,那是Beautiful Soup3的发布版本,因为很多项目还在使用BS3, 所以BeautifulSoup包依然有效.但是如果你在编写新项目,那么你应该安装的beautifulsoup4 )如果你没有安装easy_install或pip ,那你也可以下载BS4的源码 ,然后通过setup.py来安装.$ Python setup.py install

8、如果上述安装方法都行不通,Beautiful Soup的发布协议允许你将BS4的代码打包在你的项目中,这样无须安装即可使用.作者在Python2.7和Python3.2的版本下开发Beautiful Soup, 理论上Beautiful Soup应该在所有当前的Python版本中正常工作安装完成后的问题Beautiful Soup发布时打包成Python2版本的代码,在Python3环境下安装时,会自动转换成Python3的代码,如果没有一个安装的过程,那么代码就不会被转换.如果代码抛出了ImportError的异常: “No module named HTMLParser”, 这是因为你在P

9、ython3版本中执行Python2版本的代码.如果代码抛出了ImportError的异常: “No module named html.parser”, 这是因为你在Python2版本中执行Python3版本的代码.如果遇到上述2种情况,最好的解决方法是重新安装BeautifulSoup4.如果在ROOT_TAG_NAME = udocument代码处遇到SyntaxError “Invalid syntax”错误,需要将把BS4的Python代码版本从Python2转换到Python3. 可以重新安装BS4:$ Python3 setup.py install或在bs4的目录中执行Pyth

10、on代码版本转换脚本$ 2to3-3.2 -w bs4安装解析器Beautiful Soup支持Python标准库中的HTML解析器,还支持一些第三方的解析器,其中一个是lxml .根据操作系统不同,可以选择下列方法来安装lxml:$ apt-get install Python-lxml$ easy_install lxml$ pip install lxml另一个可供选择的解析器是纯Python实现的html5lib , html5lib的解析方式与浏览器相同,可以选择下列方法来安装html5lib:$ apt-get install Python-html5lib$ easy_insta

11、ll html5lib$ pip install html5lib下表列出了主要的解析器,以及它们的优缺点:解析器使用方法优势劣势Python标准库BeautifulSoup(markup,html.parser) Python的内置标准库 执行速度适中 文档容错能力强 Python 2.7.3 or 3.2.2)前的版本中文档容错能力差lxml HTML 解析器BeautifulSoup(markup,lxml) 速度快 文档容错能力强 需要安装C语言库lxml XML 解析器BeautifulSoup(markup,lxml, xml)BeautifulSoup(markup,xml) 速

12、度快 唯一支持XML的解析器 需要安装C语言库html5libBeautifulSoup(markup,html5lib) 最好的容错性 以浏览器的方式解析文档 生成HTML5格式的文档 速度慢 不依赖外部扩展推荐使用lxml作为解析器,因为效率更高. 在Python2.7.3之前的版本和Python3中3.2.2之前的版本,必须安装lxml或html5lib, 因为那些Python版本的标准库中内置的HTML解析方法不够稳定.提示: 如果一段HTML或XML文档格式不正确的话,那么在不同的解析器中返回的结果可能是不一样的,查看解析器之间的区别了解更多细节如何使用将一段文档传入Beautifu

13、lSoup 的构造方法,就能得到一个文档的对象, 可以传入一段字符串或一个文件句柄.frombs4import BeautifulSoupsoup = BeautifulSoup(open(index.html)soup = BeautifulSoup(data)首先,文档被转换成Unicode,并且HTML的实例都被转换成Unicode编码BeautifulSoup(Sacré bleu!)Sacr bleu!然后,Beautiful Soup选择最合适的解析器来解析这段文档,如果手动指定解析器那么Beautiful Soup会选择指定的解析器来解析文档.(参考解析成XML )

14、.对象的种类Beautiful Soup将复杂HTML文档转换成一个复杂的树形结构,每个节点都是Python对象,所有对象可以归纳为4种: Tag , NavigableString , BeautifulSoup , Comment .TagTag对象与XML或HTML原生文档中的tag相同:soup = BeautifulSoup(Extremely bold)tag = soup.btype(tag)# Tag有很多方法和属性,在遍历文档树和搜索文档树中有详细解释.现在介绍一下tag中最重要的属性: name和attributesName每个tag都有自己的名字,通过.name来获取:t

15、ag.name# ub如果改变了tag的name,那将影响所有通过当前Beautiful Soup对象生成的HTML文档:tag.name =blockquotetag# Extremely boldAttributes一个tag可能有很多个属性. tag 有一个 “class” 的属性,值为 “boldest” . tag的属性的操作方法与字典相同:tagclass# uboldest也可以直接”点”取属性, 比如: .attrs :tag.attrs# uclass: uboldesttag的属性可以被添加,删除或修改. 再说一次, tag的属性操作方法与字典一样tagclass =ver

16、yboldtagid =1tag# Extremely bolddel tagclassdel tagidtag# Extremely boldtagclass# KeyError: classprint(tag.get(class)# None多值属性HTML 4定义了一系列可以包含多个值的属性.在HTML5中移除了一些,却增加更多.最常见的多值的属性是 class (一个tag可以有多个CSS的class). 还有一些属性rel , rev , accept-charset , headers , accesskey . 在Beautiful Soup中多值属性的返回类型是list:css

17、_soup = BeautifulSoup()css_soup.pclass# body, strikeoutcss_soup = BeautifulSoup()css_soup.pclass# body如果某个属性看起来好像有多个值,但在任何版本的HTML定义中都没有被定义为多值属性,那么Beautiful Soup会将这个属性作为字符串返回id_soup = BeautifulSoup()id_soup.pid# my id将tag转换成字符串时,多值属性会合并为一个值rel_soup = BeautifulSoup(Back to the homepage)rel_soup.arel#

18、indexrel_soup.arel = index, contentsprint(rel_soup.p)# Back to the homepage如果转换的文档是XML格式,那么tag中不包含多值属性xml_soup = BeautifulSoup(, xml)xml_soup.pclass# ubody strikeout可以遍历的字符串字符串常被包含在tag内.Beautiful Soup用NavigableString类来包装tag中的字符串:tag.string# uExtremely boldtype(tag.string)# 一个NavigableString字符串与Pytho

19、n中的Unicode字符串相同,并且还支持包含在遍历文档树和搜索文档树中的一些特性. 通过unicode()方法可以直接将NavigableString对象转换成Unicode字符串:unicode_string =unicode(tag.string)unicode_string# uExtremely boldtype(unicode_string)# tag中包含的字符串不能编辑,但是可以被替换成其它的字符串,用replace_with()方法:tag.string.replace_with(No longer bold)tag# No longer boldNavigableStrin

20、g对象支持遍历文档树和搜索文档树中定义的大部分属性, 并非全部.尤其是,一个字符串不能包含其它内容(tag能够包含字符串或是其它tag),字符串不支持.contents或.string属性或find()方法.如果想在Beautiful Soup之外使用NavigableString对象,需要调用unicode()方法,将该对象转换成普通的Unicode字符串,否则就算Beautiful Soup已方法已经执行结束,该对象的输出也会带有对象的引用地址.这样会浪费内存.BeautifulSoupBeautifulSoup对象表示的是一个文档的全部内容.大部分时候,可以把它当作Tag对象,它支持遍历

21、文档树和搜索文档树中描述的大部分的方法.因为BeautifulSoup对象并不是真正的HTML或XML的tag,所以它没有name和attribute属性.但有时查看它的.name属性是很方便的,所以BeautifulSoup对象包含了一个值为 “document” 的特殊属性.namesoup.name# udocument注释及特殊字符串Tag , NavigableString , BeautifulSoup几乎覆盖了html和xml中的所有内容,但是还有一些特殊对象.容易让人担心的内容是文档的注释部分:markup =soup = BeautifulSoup(markup)commen

22、t = soup.b.stringtype(comment)# Comment对象是一个特殊类型的NavigableString对象:comment# uHey, buddy. Want to buy a used parser但是当它出现在HTML文档中时, Comment对象会使用特殊的格式输出:print(soup.b.prettify()# # # Beautiful Soup中定义的其它类型都可能会出现在XML的文档中: CData , ProcessingInstruction , Declaration , Doctype .与Comment对象类似,这些类都是Navigable

23、String的子类,只是添加了一些额外的方法的字符串独享.下面是用CDATA来替代注释的例子:frombs4import CDatacdata = CData(A CDATA block)comment.replace_with(cdata)print(soup.b.prettify()# # # 遍历文档树还拿”爱丽丝梦游仙境”的文档来做例子:html_doc =The Dormouses storyThe Dormouses storyOnce upon a time there were three little sisters; and their names wereElsie,Lacie andTillie;and they lived at the bottom of a well.frombs4import BeautifulSoupsoup = BeautifulSoup(html_doc)通过这段例子来演示怎样从文档的一段内容找到另一段内容子节点一个Tag可能包含多个字符串或其它的Tag,这些都是这个Tag的子节点.Beautiful Soup提供了许多操作和遍历子节点的属性.注意: Beautiful Soup中字符串节点不支持这些属性,因为字符串没有子节点tag的名字

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2