# -*- coding:utf-8 -*- # 需要下载bs4包 pip install bs4 from bs4 import BeautifulSoup import codecs # beautifulSoup 是python支持的一个第三方的包,作用就是用来解析html网页,提取数据 # lxml第三方的解析包,解析html速度比较快,功能强大,底层是c语言实现的 # 1.html源代码 2.解析器 lxml # 这个bs为根节点对象 bs = BeautifulSoup(codecs.open('index.html','r',encoding='utf-8'),'lxml') # bs 是BeautifulSoup 类型的对象 # print(bs) print(bs.head) # bs4.element.Tag 子节点 print(type(bs.body)) # name:节点的名称,bs.name获取到的是document # 对于a \ p \ div等标签来说,获取到的就是标签的名称 print(bs.name) print(bs.title.name) # attrs 获取标签节点的属性,返回的是一个key:value形式的字典,如果某个属性有多个值,返回value就是一个列表 print(bs.a.attrs) print('****--******') # 获取某一个属性值 print(bs.a['href']) print(bs.a['id']) # 如果有多个属性值,得到的是一个列表 print(bs.a['class']) # 获取节点之间的text文本 print(bs.a.string) #------------------------------------------------------- # bs4 是将html代码转换为一个python对象(BeautifulSoup) # Tag:指的就是html中的一个标签(包含开始标签和结束标签在内的整个标签)name,attrs,string # NavigableString:指的就是标签中的文字,不包含标签 #------------------------------------------------------- # contents 获取直接子节点,返回的是一个列表 print(bs.head.contents) print(bs.body.contents) # 根据索引从所有节点中取出某一个 title = bs.head.contents[3] print(title.string) # children 返回的是列表生成器对象 res = bs.head.children # for循环遍历子节点,ele就是子节点 for ele in res: print(ele) # descendants 获取子孙节点(包含子节点,孙节点,每一个子节点的内容),返回的结果也是一个生成器对象 res = bs.body.descendants for ele in res: print(ele) # parent 获取子节点的父节点 print(bs.title.parent) #======================================================== # next_sibling获取节点的下一个兄弟节点 print(bs.meta.next_sibling.next_sibling) # previous_sibling获取节点的上一个兄弟节点 print(bs.meta.next_sibling.next_sibling) # 搜索文档树种的数据 # 直接通过标签名 查找标签 res = bs.find_all('p') print(res) # find_all() 可以同时根据多个标签名查找标签 res = bs.find_all(['a','p','title']) print(res) print('-------------------------------------------') # find()函数 查找唯一标签 print(bs.find(id='top')) # find_all() # 通过class类名查找,不能直接写class,因为class是python关键字,使用class_代替class print(bs.find_all(class_="two")) print('**************************************************************') # 通过css选择器查找标签,返回的是列表,列表中存放的是查找到的标签 print(bs.select('#data')) print(bs.select('#web span')) print(bs.select('.two')) # 找到指定标签名 指定属性值 print(bs.select('a[target="_blank"]')) # 找到某个标签下的 指定属性值的标签 print(bs.select('div .spider'))
基于python的-bs4的基本用法
最新推荐文章于 2024-10-24 10:10:09 发布
1323

被折叠的 条评论
为什么被折叠?



