今天就介绍Beautiful Soup哦,下次再更新PyQuery的用法
Request、Beautiful Soup、PyQuery的用法
在前面的教程中我们已经讲解了正则表达式的使用,但是相对于我们来说还是有些麻烦,一不小心就会出错;在python中我们可以使用一个更加强大的工具,使用它我们可以快速从HTML和XML标签中提取我们想要的内容。
一、Beautiful Soup的简介与安装
Beautiful Soup是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的功能.Beautiful Soup会帮你节省数小时甚至数天的工作时间.
二、Beautiful Soup 安装
Beautiful Soup 3目前已经停止开发,推荐在现在的项目中使用Beautiful Soup 4,不过它已经被移植到BS4了,也就是说导入时我们需要 import bs4。所以这里我们用的版本是Beautiful Soup 4.4.0(简称BS4),另外据说BS4对Python3的支持不够好,不过我用的是Python2.7.7,如果有小伙伴用的是Python3版本,可以考虑下载BS3版本。
我们可以使用pip或easy_install来安装Beautiful Soup库:
easy_install beautifulsoup4
pip install beautifulsoup4# 在Python3中安装pi3 install beautifulsoup4
三、安装Lxml与html5lib
Beautiful Soup支持Python标准库中的HTML解析器,还支持一些第三方的解析器,其中一个是lxml.根据操作系统不同,可以选择下列方法来安装lxml:
apt-get install Python-lxmleasy_install lxmlpip install lxml# python3版本pip3 install lxml
另一个可供选择的解析器是纯Python实现的html5lib, html5lib的解析方式与浏览器相同,可以选择下列方法来安装html5lib:
apt-get install Python-html5libeasy_install html5libpip install html5libpip3 install html5lib
推荐使用lxml作为解析器,因为效率更高. 在Python2.7.3之前的版本和Python3中3.2.2之前的版本,必须安装lxml或html5lib, 因为那些Python版本的标准库中内置的HTML解析方法不够稳定。
三、开始使用Beautiful Soup
由于Beautiful Soup文档的内容比较多,我们只整理一些常用的用法,更多可以参考Beautiful Soup官方文档
1、创建Beautiful Soup对象
使用BeautifulSoup前需要引入bs4库,我们仅需要将一段文档传入BeautifulSoup的构造器,就能得到一个文档的对象,;同时我们也可以传入一段字符串或者一个文件。
from bs4 import BeautifulSoupsoup = BeautifulSoup(open("index.html"))soup = BeautifulSoup("data")
首先,文档被转换成Unicode,并且HTML的实例都被转换成Unicode编码
soup = BeautifulSoup("spider test")print(soup)#
spider test
然后,Beautiful Soup会选择最合适的解析器来解析这段文档,如果手动指定解析器那么Beautiful Soup会选择指定的解析器来解析文档。
2、四大对象种类
Beautiful Soup将复杂HTML文档转换成一个复杂的树形结构,每个节点都是Python对象,所有对象可以归纳为4种:
Tag
NavigableString
BeautifulSoup
Comment
下面我们进行一一介绍
(1)、TagTag对象与XML或HTML原生文档中的tag相同,我们可以理解为Html中的标签:
soup = BeautifulSoup('Extremely bold')tag = soup.btype(tag)#
从上面的Demo可以看到其实b就是一个Tag,我们可以快速使用BeautifulSoup来获取tag:
# 快速提取a标签a = soup.a# 快速提取p标签p = soup.p# 快速提取img标签img = soup.img# 快速提取title标签title = soup.title# 快速提取head标签head = soup.head# 快速提取div标签div = soup.div
Tag有很多方法和属性,其中最重要的属性: name和attributes
(2)、name每个tag都有自己的名字,通过.name来获取:
print soup.nameprint soup.head.name
(3)、attrs一个tag可能有很多个属性,你可以使用如下两种方法获取。
tag['class']tag.attrs
如果你想获取一个标签的多值属性,你可以使用如下方法获取所有的p的class
print soup.p['class']# ["body", "strikeout"]
除了上面的方法,你还可以使用get方法获取
print soup.p.get('class')# ["body", "strikeout"]
修改tag的名称和属性
soup = BeautifulSoup('Extremely bold')tag = soup.btag.name = "blockquote"tag['class'] = 'verybold'tag['id'] = 1tag#
Extremely bold
del tag['class']del tag['id']tag#
Extremely bold
今天就介绍Beautiful Soup哦,下次再更新PyQuery的用法
最后,小编分享一波2019最新的python全套教程最后小编为大家准备了6月份新出的python自学视频教程,共计415集,可以免费分享给大家!可加小编的学习群就能免费领取了:1084028245
python学习资料获取方式1.右上角点击关注
2.评论区任意评论或者转发一下
3.做完1、2步,然后私信我回复“资料”哦
2019Python自学教程全新升级为《Python+数据分析+机器学习》,九大阶段能力逐级提升,打造技能更全面的全栈工程师。