bs4库的用法
导入包
from bs4 import BeautifulSoup # 用于解析爬取的文件
file = open('./baidu.html','rb') # 指定要读取的文件,以二进制方式打开
html = file.read().decode("utf-8") # 读取文件,以utf-8编码方式读取
bs = BeautifulSoup(html,"html.parser") # 告诉BeautifulSoup我们要解析的是html,用的是html.parser解析器
查询
- find_all()——
字符串过滤:查找字符串完全匹配的内容
t_list = bs.find_all("a") # 查询所有包含a的
print(t_list)
# 结果:
[<a class="mnav" href="http://news.baidu.com/" name="tj_trnews"><!--新闻--></a>, <a class="mnav" href="http://news.baidu.com/" name="tj_trnews">新闻</a>, <a class="mnav" href="https://www.hao123.com/" name="tj_trhao123">hao123</a>, <a class="mnav" href="http://map.baidu.com/" name="tj_trmap">地图</a>, <a class="mnav" href="http://v.baidu.com/" name="tj_trvideo">视频</a>, <a class="mnav" href="http://tieba.baidu.com/" name="tj_trtieba">贴吧</a>, <a class="bri" href="//www.baidu.com/more/" name="tj_briicon" style="...">更多产品</a>]
- search()——
正则表达式搜索:使用search()方法来匹配内容
import re # 导入正则表达式的库
t_list = bs.find_all(re.compile("a")) # 搜索所有包含a的内容
print(t_list)
3.kwargs 参数
t_list = bs.find_all(id='head') # 根据参数的特点来搜索内容
t_list = bs.find_all(class_=True) # 搜索包含class属性的内容
t_list = bs.find_all(href=True) # 搜索包含href属性的内容
l_list = bs.find_all(content='always') # 搜索content='always'的内容
- text 文本
t_list = bs.find_all(text="地图") # 查找文本内容为“地图”的内容
t_list=bs.find_all(text=['地图','视频','贴吧','更多产品'])
t_list = bs.find_all(text=re.compile('\d')) # 匹配包含数字的内容
- limit参数——限制显示的搜索内容条数
t_list = bs.find_all('a', limit=3) # 限制选中的内容条数为3条
- css选择器
print(bs.select('title')) # 通过标签来查找,结果:[<title>百度一下,你就知道</title>]
print(bs.select('.bri')) # 通过class来查找,结果:[<a class="bri" href="//www.baidu.com/more/" name="tj_briicon" style="...">更多产品</a>]
print(bs.select('#u1')) # 通过id来查找
print(bs.select("a[class='bri']"))
print(bs.select("head > title")) #查找head下的子标签title
print(bs.select(".mnav~.bri")) # 通过兄弟节点来查找
t_list = bs.select(".mnav~.mnav")
print(t_list[0].get_text()) # 新闻
print(t_list[1].get_text()) # hao123