2、bs4进行数据解析
2.1 数据解析的原理
- 1.标签定位
- 2.提取标签、标签属性中存储的数据值
2.2、bs4数据解析的原理:
-
1、实例化一个BeautifulSoup对象,并且将页面源码数据加载到该对象中
-
2、通过调用BeautifulSoup对象中相关的属性或者方法进行标签定位和数据提取
2.3、环境安装
pip install bs4
pip install lxml
2.4、如何实例化BeautifulSoup对象:
from bs4 import BeautifulSoup
-
对象的实例化:
-
1.将本地的html文档中的数据加载到该对象中
from bs4 import BeautifulSoup if __name__=="__main__": #将本地的html文档中的数据加载到该对象呢中 fp=open('./01.html','r',encoding='utf-8') soup=BeautifulSoup(fp,'lxml') print(soup)
-
2.将互联网上获取的页面源码加载到该对象中
page_text =response.text soup=BeatifulSoup( page_text, 'lxml ')
-
-
提供的用于数据解析的方法和属性:
-
1、 soup.tagName:返回的是文档中第一次出现的tagName对应的标签
soup.a #suop.tagName :suop.后面跟随的是一个标签名 print(soup.a) #suop.tagName返回的是html中第一次出现tagName标签 ''' 输出: <a href="/article/124910652" target="_blank"> <img alt="糗事#124910652" class="illustration" height="auto" src="//pic.qiushibaike.com/system/pictures/12491/124910652/medium/JH2JHAXTS44IPI2Q.jpg" width="100%"/> </a> '''
-
2、soup.find():
(1)find( ‘tagName’):等同于soup.divsoup.find('div') #等同于soup.div
(2)属性定位:
soup- find (‘div’ ,classr-‘song’)soup.find('div',class_='song') #class_加下划线表示一个参数,定位
-
3、soup.find_all(‘tagName’):返回符合要求的所有标签(列表)
soup.find_all('a')
-
4、select:
(1)、select(‘某种选择器(id,class,标签…选择器)’),返回的是一个列表。
suop.select('.tang') #html中的class=tang的
(2)层级选择器
#1、> 表示的是一个层级 soup.select('.tang > ul > li > a') #返回的是列表 soup.select('.tang > ul > li > a')[0]#返回的是列表 #2、空格表示的是多个层级 soup.select('.tang > ul a')[0]#返回的是列表
-
5、获取标签之间的文本数据:
-
soup.a.text / string / get_text()
-
text/get_text():可以获取某一个标签中所有的文本内容
-
string:只可以获取该标签下面直系的文本内容
soup.select('.tang > ul a')[0].text soup.select('.tang > ul a')[0].string soup.select('.tang > ul a')[0].get_text()
-
-
6、获取标签中属性值:
soup.a[ 'href' ]
-