python新手教程 从零开始,python3.7从零开始学
bs4库之所以能快速找到我们想要的元素,是因为它用自己的方式解析html文件。不同的解析器有不同的效果。下面逐一介绍。
4 BSparser网络爬虫选择的最终目的是对网络信息进行筛选和选择,其中最重要的部分可以说是解析器。解析器决定了爬虫的速度和效率。Bs4库不仅支持之前使用的html.parser解析器,还支持很多第三方解析器。试比较分析这些。
推荐官方bs4库使用Lxml解析器。因为更高效,所以也应该采用lxml解析器。
安装lxml解析器:使用pip安装工具继续安装。
pip安装lxml
接下来,使用lxml解析器来描述web页面。
以之前的免费白猫文档为例。
html _ doc= html head title the Dormouse s story/title/head body class= title b the Dormouse s story/b/PP class an elsie class= sis ter id= link 1 elsie/a,a href= http://example.com/lacie class= sis ter id= link 2 lacie/aaandhref= 3358 example.com/tillie con
导入bs4#首先我们假设html文件已经lxml的方式是一锅汤soup=bs4 . beautiful soup(html _ doc, lxml )。输出后,显示出清晰的树形结构。print (soup.pretify))的输出如下
hmlheadtitlethedormouse s story/title/head body pclass= title b the Dormouse s story/b/pclass= story onceuporass()story()p)onceupormouse和theirnamewereaclass= sis ter href= http://example.com/aclass= sis ter href= http://example.com/lacie id= link 2 lacie/a class=姐姐 href= 3358Example和BS4库首先将传递的字符串或文件句柄转换为Unicode类型。这样在抓取中文信息时就不会有麻烦的编码问题。当然,如果有像‘大5’这样的稀有代码,就需要手动设置代码了。
Soup=beautifulsoup(markup,from_encoding="encoding ")
Type:bs4 库将复杂的html文档转化为一个复杂的树形结构,每个节点都是一个Python对象,所有对象分为四种类型:Tag、NavigableString、BeautifulSoup、Comment。
我来一一解释一下:
Tag:可导航字符串:tag中包含的字符串BeautifulSoup表示三个文档的所有内容。在大多数情况下,它是一个标签对象,支持遍历和搜索文档树。评论:这个特别。
当唯一的可导航对象出现在html文档中时,它将以一种特殊的格式输出,例如注释类型。搜索文档树最简单的方法是搜索您想要获得的标签的名称。
汤。睡鼠的故事/标题/头像。Title # Title睡鼠的故事/Title如果你想更深入的得到一个更小的标签:比如我们想找到身体下面被B标签包裹的部分。
Soup.body.b # bthedermouse的故事/b但是这个方法只能找到按顺序最先出现的标签,那么如何获取所有标签呢?
此时需要find_all()方法,它返回一个列表类型。
tag=soup . find _ all( A )#[A class= sis ter rel= external no follow href= http://example . com/Elsie id= link 1 Elsie/A,# A class= sis ter rel= external no follow href= 3358example.com/tillie id= link 3 tillie/Aneed=tag[1] tag的contents属性可以将tag的子节点输出为列表:
head _ tag=soup . head head _ tag # head Title睡鼠的故事/Title/head head _ tag . contents[Title睡鼠的故事/Title]Title _ tag=head _ tag . contents[0]print(Title _ tag)# Title睡鼠的故事/title title _ tag.contents # [u 睡鼠的故事]另外,通过。标签的子节点生成器,可以循环标签的子节点:
对于title _ tag.children中的child:print(child)#睡鼠的故事这样,只能遍历子节点。如何穿越一只稳定的羊?
稳羊:比如head.contents的子节点就是睡鼠的故事,其中标题本身也有一个子节点:‘睡鼠的故事’。睡鼠的故事在这里也被称为头的稳定的羊。
对于head _ tag中的子元素。后代:print (child) # title睡鼠的故事/title #睡鼠的故事如何找到标签下的所有文字内容?
如果标签只有一个子节点(NavigableString类型):可以直接用tag.string找到如果标签有很多子节点,稳定的羊,每个节点都有一个字符串:我们可以用迭代的方式全部找到:
for string in soup . strings:print(repr(string))# u 睡鼠的故事 # u\n\n # u 睡鼠的故事 # u\n\n # u 从前有三个小妹妹;他们的名字是\n # uElsie # u ,\n # uLacie # u 和\ n # u Tillie # u他们住在井底。 # u \ n \ n # u . # u \ n 好了,这里先介绍一下bs4库的基本用法。其余:父节点,兄弟节点,向后向前,类似于上面从子节点中查找元素的过程。如果你想了解更多,请看一下官方文件。
下一章我们将进行一次实战,抓取百度贴吧的内容信息。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。