二、BeautifulSoup4
和lxml
一样,BeautifulSoup4
也是一个HTML/XML的解析器,主要的功能是解析和提取HTML/XML数据。
安装:pip install bs4
由于BS4
解析页面时需要依赖文档解析器,所以还需要安装lxml
作为解析库
解析原理
- 数据解析的原理:
1.定位标签
2.提取标签,标签属性中存储的数据
- bs4数据解析的原理:
1.实例化一个BeautifulSoup对象,并且将页面源码加载到对象中
2.调用BeautifulSoup对象中的方法或属性进行标签定位和数据提取
使用流程
1. 导入模块:
from bs4 import BeautifulSoup
2. 对象实例化:
-.将本地的html加载到该对象中去
fp = open('yaojianju.html','r',encoding='utf-8')
soup = BeautifulSoup(fp,'lxml')
fp.close()
-.将互联网获取的页面源码加载到该对象中
content = response.text
soup = BeautifulSoup(content,'lxml')
3.书写bs4表达式,数据提取
解析方法和属性
3. 数据解析的方法和属性:
- soup.tagname :返回的是文档第一次出现的tagname标签下的所有内容,返回的是`bs4.element.Tag`对象
- soup.find('') :
(1)soup.find('tagname') = soup.tagname
(2)属性定位:soup.find('tagname',class_/id = ' ')
soup.find('tagname',attars={'class':''})
返回该属性下的所以内容
(3)soup.find_all(''): 返回符合要求的所有标签 (返回一个列表)
- soup.select():
(1)soup.select('某种选择器(id,class,标签).book-mulu') 返回一个列表
例子:soup.select('.book-mulu') --通过类名查找
soup.select('a') --通过标签名查找
soup.select("#link1") --通过id查找
soup.select('[href]') --通过属性查找
soup.select('a[href="https://www.baidu.com/"]') --通过属性查找
soup.select("p #link1") --组合查找
soup.select("head > title") ----组合查找
(2)层级选择器: > 表示一个层级 空格表示多个层级
例子:soup.select('.book-mulu > ul > li > a')
soup.select('.book-mulu > ul a')[0]
- 获取标签之间的文本数据:
-soup.a.text/get_text() 获得的是该标签下的所有文本内容
-soup.string 获得的是直系标签下的单个文本内容,返回字符串
-soup.strings:获取某个标签下的子孙非标签字符串,返回生成器
-soup.stripped_strings:获取某个标签下的子孙非标签字符串,会去掉空白字符,返回生成器
- 获取标签中的属性值:
-soup.a[''] 例子:soup.a['href']