bs4简介
- bs4是一个html的解析工具,根据html的特征和属性来查找节点
1 from bs4 import BeautifulSoup
2
3 fp = open("./test.html", "r", encoding="utf-8")
4 print(fp)
1 soup = BeautifulSoup(fp, 'lxml')
2 # 参数1,是一个HTML字符串
3 # 参数2,代表一个解析器,因为bs4本身没有解析器,可以借助于外界的解析器来解析
4
5 print(soup)
1 print(soup.title)
2 print(soup.a) # 如果标签有多个,只提取第一个
1 a = soup.a
2 print(a.get("href")) # 用get函数来获取
3 print(a["href"]) # 用键值方式获取
4 print(a.attrs)
1 li = soup.li
2 print(li.string) # 通过string属性获取,可以获取当前标签的字符串内容(包括注释),但是如果当前内容中有子标签则获取为空
3 print(li.get_text()) #通过get_text函数获取,获取出当前节点的字符串和后代节点中所有的字符串并且拼接在一起,但是如果有注释则忽略
1 body = soup.body
2
3 # 1)获取直接子节点
4 children = body.children
5 print(children) 3打印结果:<list_iterator object at 0x0000026E8ED16080>
6
7 # 2)获取后代节点
8 des = body.descendants
9 print(des) # 打印结果:<generator object descendants at 0x00000203556CD048>
10
11 # 3)对节点进行遍历
12 for node in des:
1 # 1)find函数
2 print(soup.find("a"))
3 print(soup.find("li",class_='hehe'))
4 print(soup.find("li",id='hehe'))
5
6 # 2)find_all函数
7 print(soup.find_all("a"))
8
9 # 3) select函数,根据css选择器来选取节点,返回值是一个列表
10 print(soup.select(".heihei"))
11 print(soup.select("#hehe"))
12 print(soup.select("[href='http://mi.com']"))
13 print(soup.select("[name='ok']"))
- 基础选择器:id选择器,#id值。class选择器,.class值。标签选择器,标签名。通用选择器,*。属性选择器 [某属性='某值']
- 组合选择器:选择器1选择器2...选择器n (如果这些选择器中有标签要放在最前面)
- 派生选择器:后代选择器:选择器1 选择器2 ... 选择器n
- 子选择器: 选择器1 > 选择器2 > ... > 选择器n