bs4简介
- bs4是一个html的解析工具,根据html的特征和属性来查找节点
1 from bs4 import BeautifulSoup 2 3 fp = open("./test.html", "r", encoding="utf-8") 4 print(fp)
- 初始化一个BeautifulSoup对象
1 soup = BeautifulSoup(fp, 'lxml') 2 # 参数1,是一个HTML字符串 3 # 参数2,代表一个解析器,因为bs4本身没有解析器,可以借助于外界的解析器来解析 4 5 print(soup)
- 1、根据标签来查找对象
1 print(soup.title) 2 print(soup.a) # 如果标签有多个,只提取第一个
- 2、获取标签的属性
1 a = soup.a 2 print(a.get("href")) # 用get函数来获取 3 print(a["href"]) # 用键值方式获取 4 print(a.attrs)
- 3、获取内容
1 li = soup.li 2 print(li.string) # 通过string属性获取,可以获取当前标签的字符串内容(包括注释),但是如果当前内容中有子标签则获取为空 3 print(li.get_text()) #通过get_text函数获取,获取出当前节点的字符串和后代节点中所有的字符串并且拼接在一起,但是如果有注释则忽略
- 4、获取后代节点
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:
- 5、用函数来查找
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']"))