1.找米下锅,安装bs4库
pip install BeautifulSoup
2.此物何用,BS4作用
Beautiful Soup库是解析、遍历、维护“html标签树”的功能库。在爬虫中用于解析数据。
3.bs4标签元素,解析其组成,方可庖丁解牛,游刃有余
by:
#导入BeautifulSoup库 from bs4 import BeautifulSoup r='''<!DOCTYPE html> <html> <div><!--这个文件是介绍BS4的基本的用法的--></div> <head> <title class="te" id="t"> 测试bd4方法</title> </head> <body> <p> <ul>标题一</ul> <a href="www.a">哈哈哈</a> </p> <p> <u>嘿嘿嘿</u> <u>呵呵呵</u><u2>标题2</u2><div class="d" id="d3">我是p标签中的div</div> <a href="www">我是a2</a> </p> <div class="d" id="d1">我是div</div> <div class="d" id="d2"></div> </body> </html>''' soup=BeautifulSoup(r,'html.parser')
3.1 tag:标签,最基本的单元,用<>和>开头和结尾
用法:.标签名
tag1=soup.title
print(tag1)
返回的是一个'bs4.element.Tag'对象
3.2 name:标签名,
用法:.name
name=tag1.name
print(name)
print(type(name))
返回标签的名字,'str'类型
3.3 Attributes:属性
用法:.attrs
a=tag1.attrs
print(a)
print(type(a))
返回的是标签的属性,存放在列表中,'dict'类型
3.4 NavigableString:非属性字符串
用法:.string
str1=tag1.string
print(str1)
print(type(str1))
返回标签中的字符串,‘str’类型
3.5 Comment:注释
用法:.comment
a1=soup.div.contents
print(a1)
print(type(a1))
返回注释,“list”类型
4.BS4的HTML遍历方法,连坐制度,寻其一可知其九族。
4.1 下行遍历,先找后辈
4.1.1 下行遍历所有儿子.cotents:获取子节点的列表
用法:.contents
tag2=soup.p
tag3=tag1.contents
print(tag3)
print(type(tag3))
将所有儿子节点村放入列表
4.1.2 下行遍历一个一个的找儿子.children:获取子节点的迭代类型
用法:
for tag4 in tag2.children:
print(tag4)
返回儿子节点的迭代类型,与.contents类似,用于循环遍历儿子节点
4.1.2 下行遍历找子子孙孙.descendants: 获取子孙节点的迭代类型
用法:
for tag5 in soup.body.descendants:
print(tag5)
返回全部子孙节点的迭代类型,用于循环遍历子孙节点
4.2 上行遍历,再找先辈
4.2 上行遍历找爸爸 .parent:获取节点的父标签
用法:.parent
tag6=soup.ul
print(tag6.parent)
返回负标签, 'bs4.element.Tag'类型
4.2.2上行遍历找祖宗 .parent:获取父标签,及父标签的父标签,及父标签的父标签的标签点,直到老祖宗html标签
用法:.parents
for tag7 in tag6.parents:
print(tag7)
返回迭代对象,'bs4.element.Tag'类型
4.3 平行遍历,不放过其兄弟姐妹
4.3.1平行遍历找最近的哥哥 .previous_sibling:返回上一个平行节点标签
用法:.previous_sibling
u2=soup.u2
print(u2.previous_sibling)
返回兄弟标签, 'bs4.element.Tag'类型
4.3.2平行遍历找所有的哥哥 .previous_siblings:迭代类型,返回前续的所有平行节点标签
用法:.previous_siblings
for tag8 in u2.previous_siblings:
print(tag8)
返回迭代对象,'bs4.element.Tag'类型
4.3.3平行遍历找最近的弟弟 .next_sibling:返回下一个平行节点标签
用法:.next_sibling
u2=soup.u2
print(u2.next_sibling)
返回兄弟标签, 'bs4.element.Tag'类型
4.3.4平行遍历找所有的弟弟 .next_siblings:迭代类型,返回后续的所有平行节点标签
用法:.next_siblings
for tag9 in u2.next_siblings:
print(tag9)
返回迭代对象,'bs4.element.Tag'类型
5.bs4中findAll方法,为防逃脱,还可用findAll方法查找。
5.1 标签参数tag:可以传递一个标签的名称或多个标签名称组成的Python列表做标签参数。
用法:.findAll("标签名")
tag=soup.findAll(["a","u"])
print(tag)
5.2 属性参数attributes:用一个Python字典封装一个标签的若干属性和对应的属性值。
用法:.findAll(属性=属性值)
ta2=soup.findAll(id='d1')
print(ta2)
5.3 find用法
6 bs4中select用法,兵贵神速,若想快速找到相关人物,可用select定点狙击目标
方法 | 内容 |
通过标签名查找 | soup.select('title')#直接填写标签名 |
通过类名查找 | soup.select('.d') # “ . ”代表类查找 |
通过id查找 | soup.select('#d2') # “#”代表id查找 |
组合查找 | soup.select('div #d2' ) # p标签且id为d2的对象 |
标签依次查找 | soup.select('p>a') # p标签下的a标签 |
通过href属性查找 | soup.select('a[href="www"]') |
Attri