Python爬虫BeautifulSoup4教程|安装,获取标签属性文本,NavigatableString,Comment,html5lib,select

发表时间:2019-12-16

一、简介

和lxml一样,Beautiful Soup也是一个HTML/XML的解析器,主要的功能也是如何解析和提取HTML/XML数据,lxml只会局部遍历,而Beautiful Soup是基于HTML DOM(Document Object Model)的,会载入整个文档,解析整个DOM树,因此时间和内存的开销都会大很多,所以性能要低于lxml.


二、安装Beautiful Soup

windows: win+r ---->cmd---->pip install bs4

linux: pip install bs4


 三、四个常用的对象

Beautiful Soup将复杂的HTML文档转换成一个复杂的树形结构,每一个节点都是Python对象,所有对象可归纳为四种:Beautiful Soup、Tag、NavigatableString、Comment.


四、创建Beautiful Soup对象

from bs4 import BeautifulSoup

soup = BeautifulSoup('text','lxml') #<class 'bs4.BeautifulSoup'>

Snipaste_2019-12-15_21-15-43.png

注意:(1)BeautifulSoup这个类的父类是Tag,因此Tag里面能用的方法BeautifulSoup都能用。(2)部分网站的代码不规范,明明写的解析没有问题,但是程序找不到结点,这时候我们用html5lib进行解析。


五、Tag对象

5.1 Tag通俗讲是HTML中的一个个标签。

soup = BeautifulSoup('<b classs="boldest">Extremely bold<b>')
tag = soup.b
type(tag) #<class 'bs4.element.Tag'>

5.2 Tag中的两个属性

每个tag都有自己的名字,通过name来获取:

tag.name   #'b'

一个tag可能有多个属性,tag的属性操作方法与字典相同

tag['class']    #'boldest'
tag.attrs # {'class':['boldest']}


六、.NavigatableString对象

如果拿到标签后,还想获取标签中的内容,name可以通过tag.string获取标签中的文字

soup = BeautifulSoup('<b class="boldest">Extremely bold</b>')
print(soup.string) #Extremely bold
print(type(soup.string)) #<class 'bs4.element.NavigatableString'>


七、Comment对象

标签内字符串注释部分

markup = '<b><!--Hey,buddy. Want to buy a used parse?--></b>'
soup = BeautifulSoup(markup)
comment = soup.b.string
type(comment) #<class 'bs4.element.Comment'>


八、四个解析库

8.1 find()和find_all()

(1): find方法是找到一个满足条件的标签后立即返回,只返回一个元素

(2): find_all方法是把所有满足条件的标签选取到,然后返回回去

8.2 select_one()和select()

使用上面这两种方法可以方便找出元素,但有时使用css选择器的方式更加方便。

(1): 通过标签查找

print(soup.select('a)

(2): 通过类名查找

print(soup.select('.sister'))

(3):通过id查找

print(soup.select('#link1')

(4):组合查找

#查找p标签中,id=link1的内容,二者要用空格分开
print(soup.select('p #link1')
#直接子标签查找,则用 > 分割
print(soup.select("head > title"))

(5):通过属性查找

#属性需要用中括号括起来,注意属性和标签属于一个节点
print(soup.select('a[href="http//example.com]/elsie"]'))


九、获取属性值和文本

9.1 获取标签属性

(1)通过下标获取:href=a["href"]

(2)通过attrs属性获取:href=a.attrs['href']

9.2 获取标签文本

(1)string:获取某个标签下的非标签字符串(NavigatableString类型)

(2)strings:获取某个标签下的子孙非标签字符串(返回的是迭代器,里面可能包含换行)

(3)stripeed_strings:获取某个标签下的子孙非标签字符串(返回的是迭代器,可以通过list转换为列表)

(4)get_text:获取某个标签下的子孙非标签字符串,直接返回字符串,它可以获得\n这样的,string不可以。

文章来源互联网,如有侵权,请联系管理员删除。邮箱:417803890@qq.com / QQ:417803890

微配音

Python Free

邮箱:417803890@qq.com
QQ:417803890

皖ICP备19001818号
© 2019 copyright www.pythonf.cn - All rights reserved

微信扫一扫关注公众号:

联系方式

Python Free