爬虫基础-bs4数据解析基础
bs4进行数据解析
- 数据解析原理
- 1. 标签定位
- 2. 提取标签, 标签属性中存储的数据值
- bs4数据解析原理
- 1. 实例化一个BeautifulSoup对象,并且将页面源码加载到该对象中
- 2. 通过调用BeautifulSoup对象中相关的属性或者方法进行标签定位或者数据提取
- 环境安装
pip install bs4
pip install lxml
- 实例化BeautifulSoup
from bs4 import BeautifulSoup
import lxml
- 对象的实例化:
- 1. 将本地的html文档中的数据加载到该对象中
1). 打开本地文件
fp = open('./localfile.html', 'r', enconding='utf-8')
2). 加载实例, xml参数固定
soup = BeautifulSoup('fp', 'xml')
- 2. 将互联网获取的页面源码加载到该对象中
1). 获取互联网源码文件(text格式)
page_text = response.text
2). 加载实例
soup = BeautifulSoup('page_text', 'xml')
- 3. 提供的用于数据解析的方法和属性:
- soup.tagName #返回的是第一次出现的标签,比如soup.div
- soup.find()
soup.find('div') #相当于soup.div,返回的是单数
soup.find('div', class_='list') #属性定位,可以是class(后面需要加_,否则就是关键字),也可以是id
- soup.find_all()
soup.find_all('div') #返回的是符合要求的所有div标签(列表)
soup.find_all('div', id='manlist')
- soup.select()
soup.select('.id值') #参数为某种选择器,可以是类属性或者标签,返回的是复数(列表)
soup.select('.classTag > ul > li > a')[0] #层级选择器-单个层级: 定位到classTag属性的div标签中ul子标签中的a标签(列表),然后输出第一个[0]
soup.select('.classTag > ul a')[0] #层级选择器-多个层级: 空格表示多个层级
- 获取标签之间的文本数据
- soup.div.text/string/get_text()
- 几种方法的区别:
- text/get_text() #获取某一个标签中所有的文本
- string #只可以获取该标签下直系的文本内容
- 获取标签中的属性值
soup.a['href']