Python

BS库

Version:1.0StartHTML:000000207EndHTML:000022974StartFragment:000002707EndFragment:000022888StartSelection:000002707EndSelection:000022884SourceURL:https://www.cnblogs.com/hanmk/p/8724162.html

BeautifulSoup库通俗来说是【解析、遍历、维护“标签树”(例如html、xml等格式的数据对象)的功能库 】一个简单的使用BeautifulSoup库的demo:

# coding:utf-8frombs4import BeautifulSoupimport requests

url ='http://python123.io/ws/demo.html'r = requests.get(url)

demo = r.text# 服务器返回响应soup = BeautifulSoup(demo,"html.parser")"""demo 表示被解析的html格式的内容

html.parser表示解析用的解析器"""print(soup)# 输出响应的html对象print(soup.prettify())# 使用prettify()格式化显示输出

得到一个BeautifulSoup对象后,一般通过BeautifulSoup类的基本元素来提取html中的内容

2.提取html中的信息

demo中的html内容如下:

(1)

print(soup.title)# 获取html的title标签的信息print(soup.a)# 获取html的a标签的信息(soup.a默认获取第一个a标签,想获取全部就用for循环去遍历)print(soup.a.name)# 获取a标签的名字print(soup.a.parent.name)# a标签的父标签(上一级标签)的名字print(soup.a.parent.parent.name)# a标签的父标签的父标签的名字

(2)

print('a标签类型是:', type(soup.a))# 查看a标签的类型print('第一个a标签的属性是:', soup.a.attrs)#获取a标签的所有属性(注意到格式是字典)print('a标签属性的类型是:', type(soup.a.attrs))# 查看a标签属性的类型print('a标签的class属性是:', soup.a.attrs['class'])#因为是字典,通过字典的方式获取a标签的class属性print('a标签的href属性是:', soup.a.attrs['href'])#同样,通过字典的方式获取a标签的href属性

(3)

print('第一个a标签的内容是:', soup.a.string)# a标签的非属性字符串信息,表示尖括号之间的那部分字符串print('a标签的非属性字符串的类型是:', type(soup.a.string))# 查看标签string字符串的类型print('第一个p标签的内容是:', soup.p.string)# p标签的字符串信息(注意p标签中还有个b标签,但是打印string时并未打印b标签,说明string类型是可跨越多个标签层次)

介绍一下find_all()方法:

常用通过find_all()方法来查找标签元素:<>.find_all(name, attrs, recursive, string, **kwargs) ,返回一个列表类型,存储查找的结果

• name:对标签名称的检索字符串

• attrs:对标签属性值的检索字符串,可标注属性检索

• recursive:是否对子孙全部检索,默认True

• string:<>…</>中字符串区域的检索字符串

(1)

print('所有a标签的内容:', soup.find_all('a'))# 使用find_all()方法通过标签名称查找a标签,返回的是一个列表类型print('a标签和b标签的内容:', soup.find_all(['a','b']))# 把a标签和b标签作为一个列表传递,可以一次找到a标签和b标签

(2)

fortinsoup.find_all('a'):# for循环遍历所有a标签,并把返回列表中的内容赋给tprint('t的值是:', t)# link得到的是标签对象print('t的类型是:', type(t))

      print('a标签中的href属性是:', t.get('href'))# 获取a标签中的url链接

(3)

foriinsoup.find_all(True):#如果给出的标签名称是True,则找到所有标签print('标签名称:', i.name)# 打印标签名称

(4)

print('href属性为http..的a标签元素是:', soup.find_all('a', href='http://www.icourse163.org/course/BIT-268001'))# 标注属性检索print('class属性为title的标签元素是:', soup.find_all(class_='title'))# 指定属性,查找class属性为title的标签元素,注意因为class是python的关键字,所以这里需要加个下划线'_'print('id属性为link1的标签元素是:', soup.find_all(id='link1'))# 查找id属性为link1的标签元素

 (5)

print(soup.head)# head标签print(soup.head.contents)# head标签的儿子标签,contents返回的是列表类型print(soup.body.contents)# body标签的儿子标签"""对于一个标签的儿子节点,不仅包括标签节点,也包括字符串节点,比如返回结果中的 \n"""

(6)

print(len(soup.body.contents))# 获得body标签儿子节点的数量print(soup.body.contents[1])# 通过列表索引获取第一个节点的内容

(7)

print(type(soup.body.children))# children返回的是一个迭代对象,只能通过for循环来使用,不能直接通过索引来读取其中的内容foriinsoup.body.children:# 通过for循环遍历body标签的儿子节点print(i.name)# 打印节点的名字

作业

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容