BeautifulSoup中⼀些函数的⽤法归纳
BeautifulSoup作为⼀个强⼤的从HTML或则XML⽂件中提取数据的Python库,它能通过解析⽂档为⽤户提供需要抓取的数据。同时,它
可以很好的处理不规范标记并⽣成剖析树(partree)并提供简单⼜常⽤的导航(navigating),搜索以及修改剖析树的操作。它可以⼤⼤
节省你的编程时间。
接下来归纳⼀下之前在看书过程中发现的⼀些不懂的对数据爬取得⽅法
解释器
BeautifulSoup⽀持Python标准库中的HTML解析器,还⽀持⼀些第三⽅的解析器,其中包括lxml和html5lib。可以通过pip或
easy_install来安装这两个解释器。这⼏者之间的差别见这⾥。
BeautifulSoup介绍
⾸先,Beautifulsoup将复杂的HTML或者XML⽂件解析成复杂的树形结构,每个节点都是Python对象,所有的4个节点可以分为:
Tag,NavigableString,BeautifulSoup,Comment。
TAG
Tag与HTML原⽣⽂档中的Tag标签⼀致
例如:
soup=BeautifulSoup('
a=
print(a)
输出结果为
Tag中有两个重要的属性:name和attributes.
:
每个Tag都有⾃⼰的名字,例如同样是上⾯的例⼦:
soup=BeautifulSoup('
a=
a=
print(a)
输出结果:title
总结:Tag的name属性即为标签的名字,可以通过’.’操作符进⾏访问
utes:
attributes代表的是Tag标签内的属性,例如:
soup=BeautifulSoup('
a=soup.p
a=a['id']
print(a)
输出结果为:firstpara
同时,Python提供了attrs⽅法以字典的形式返回Tag内的所有属性。例如:
soup=BeautifulSoup('
a=soup.p
a=
print(a)
输出结果为:{'id':'firstpara','align':'center'}
NavigableString
既然我们已经得到了标签的内容,那么要想获取标签内部的⽂字怎么办呢?很简单,⽤.string即可,例如
soup=BeautifulSoup('
a=
print(a)
输出结果为:Thisisparagraph
它的类型是⼀个NavigableString,翻译过来叫可以遍历的字符串,不过我们最好还是称它英⽂名字吧
BeautifulSoup
BeautifulSoup
BeautifulSoup对象表⽰的是⼀个⽂档的全部内容。⼤部分时候,可以把它当作Tag对象,它⽀持遍历⽂档树和搜索⽂档树中描述的⼤部
分的⽅法.
因为BeautifulSoup对象并不是真正的HTML或XML的tag,所以它没有name和attribute属性。但有时查看它的.name属性是很⽅便
的,所以BeautifulSoup对象包含了⼀个值为[document]的特殊属性.name
例如:
soup=BeautifulSoup('
a=
print(a)
输出结果为:[document]
Comment
Comment对象是⼀个特殊类型的NavigableString对象:
markup=""
soup=BeautifulSoup(markup)
comment=
type(comment)
输出结果为:
b标签⾥的内容实际上是注释,但是如果我们利⽤.string来输出它的内容,我们发现它已经把注释符号去掉了,所以这可能会给我们带来
不必要的⿇烦。
另外我们打印输出下它的类型,发现它是⼀个Comment类型,所以,我们在使⽤前最好做⼀下判断,判断代码如下
iftype()==t:
BeautifulSoup中常⽤⽅法总结
⽅法
上⾯说到过,BeautifulSoup将复杂的HTML或者XML⽂件解析成复杂的树形结构,每个节点都是Python对象。所以parent⽅法顾名思
义,代表的是⽗节点。通过.parent可以访问某标签的上⼀个标签
例如:
doc=['
'
'
'
'']
soup=BeautifulSoup(''.join(doc),'')
v=soup.p
c=
print(c)
输出结果为body
从doc中可以看出p标签的上⼀个标签(⽗标签)为body
ts⽅法
parent⽅法⽤于向上遍历树节点,contents⽅法⽤于向下遍历树节点,即向下访问某节点的⼦节点。
tag的.contents属性可以将tag的⼦节点以列表的⽅式输出。
例如同样是上⾯的例⼦:
soup=BeautifulSoup(''.join(doc),'')
v=soup.p
c=ts
print(c)
输出结果为:['Thisisparagraph',one,'.']
⼜如:soup=BeautifulSoup(”.join(doc),’’)
v=
a=ts
b=ts[0]
c=ts
print(a)
print(b)
print(c)
输出结果为:[
['Pagetitle']
在b=ts[0]这⼀⾏代码中,因为ts返回的是列表,所以不能直接⽤ts取出标签title中的内容,只能将列表中的Tag
取出,在访问⼦节点。
⽅法
为了⽅便,如果⼀个标签只有⼀个⼦节点,⽽且该⼦节点还是字符串类型的,则该⼦节点可以通过的形式访问。同时,如果⼀个
节点仅有⼀个⼦节点,则该⼦节点也可以⽤.string进⾏访问,输出结果与当前唯⼀⼦节点的.string结果相同。
例如:
soup=BeautifulSoup(''.join(doc),'')
v=soup.b
b=
print(b)
输出结果为:one
soup.b返回包含标签b的字典。因为b标签仅有⼀个⼦节点,且该⼦节点是字符串类型(同时也满⾜仅有⼀个⼦节点的条件),所以可以直
接⽤.string⽅法访问该⼦节点。
注意:返回的是None,因为p标签的⼦节点并不是只有⼀个,⽽是有多个⼦节点,这时候不满⾜使⽤string的条件,所以会
返回None。同时虽然
Tag只有⼀个⼦节点,但是这个⼦节点是Tag类型(
本文发布于:2022-12-27 03:06:56,感谢您对本站的认可!
本文链接:http://www.wtabcd.cn/fanwen/fan/90/37721.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |