05bs4

发布时间 2023-04-05 00:48:27作者: LePenseur

二、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']