BS4基本使用
时间:2023-02-07
本文章向大家介绍BS4基本使用,主要内容包括bs4、使用bs4流程、用法、select、获取标签数据、实战、使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
bs4
- 数据解析的原理: - 1.标签定位 - 2.提取标签、标签属性中存储的数据值 - bs4数据解析的原理: - 1.实例化一个BeautifulSoup对象,并且将页面源码数据加载到该对象中 - 2.通过调用BeautifulSoup对象中相关的属性或者方法进行标签定位和数据提取
bs4是一个HTML/XML的解析器,主要的功能是解析和提取HTML/XML数据。它不仅支持CSS选择器,而且支持Python标准库中的HTML解析器,以及lxml的XML解析器,通过使用这些转化器,实现了惯用的文档导航和查找方式,节省了大量的工作时间,提高了开发项目的效率。
bs4库会将复杂的HTML文档换成树结构(HTML DOM),这个结构中的每个节点都是一个Python对象,这些对象可以归纳为如下四种:
bs4.element.Tag类:表示HTML中的标签,最基本的信息组织单元。它有两个非常重要的属性,分别为表示标签名字的name属性,表示标签属性的attrs属性。
bs4.element.NavigableString类:表示HTML中标签的文本(非属性字符串)。
bs4.BeautifulSoup类:表示HTML DOM中的全部内容,支持遍历文档树和搜索文档树的大部分方法。
bs4.element.Comment类:表示标签内字符串的注释部分,是一种特殊的NavigableString对象。
- 对象的实例化:
- 1.将本地的html文档中的数据加载到该对象中
fp = open('./test.html','r',encoding='utf-8')
soup = BeautifulSoup(fp,'lxml')
- 2.将互联网上获取的页面源码加载到该对象中
page_text = response.text
soup = BeatifulSoup(page_text,'lxml')
使用bs4流程
- 第1步:创建一个BeautifulSoup类型的对象
根据HTML或者文件创建BeautifulSoup对象。
- 第2步:通过上述对象的操作方法进行解读搜索
根据DOM树进行各种节点的搜索(比如,find_all方法可以搜索出所有满足要求的节点,find方法只 会搜索出第一个满足要求的节点),只要获得了一个节点,就可以访问节点的名称、属性和文本。
- 第3步:利用DOM树结构标签的特性,进行更为详细的节点信息提取
用法
soup.tagName:返回的是文档中第一次出现的tagName对应的标签
print(soup.a)
>>> <a name="top"></a>
soup.find():
- find('tagName'):等同于soup.div
- 属性定位:
-soup.find('div',class_/id/attr='song')
soup.find_all('tagName'):返回符合要求的所有标签(列表)
select
- select:
- select('某种选择器(id,class,标签...选择器)'),返回的是一个列表。
- 层级选择器:
- soup.select('.tang > ul > li > a'):>表示的是一个层级
- soup.select('.tang > ul a'):空格表示的多个层级
获取标签数据
- soup.a.text/string/get_text() - text/get_text():可以获取某一个标签中所有的文本内容 - string:只可以获取该标签下面直系的文本内容 获取属性值: soup.img['alt']
实战
根据层级可以找到章节名字
url = 'http://www.shicimingju.com/book/sanguoyanyi.html'
headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36'}
page_text = requests.get(url=url,headers=headers).text
from bs4 import BeautifulSoup
soup = BeautifulSoup(page_text,'lxml')
book_list = soup.select('.book-mulu > ul > li')
with open('chapters.txt', 'w', encoding='utf-8') as fp:
for i in book_list:
title = text = i.a.string
detail_url = 'https://www.shicimingju.com/' + i.a['href']
detail = requests.get(url=detail_url,headers=headers).text
detail_soup = BeautifulSoup(detail,'lxml')
context = detail_soup.find('div',class_ = 'chapter_content').text
fp.write(title +': ' + context+ '\n')
原文地址:https://www.cnblogs.com/ivanlee717/p/17098501.html
- ggolot2 画ROC曲线
- 47. 访问MySql数据库实现增删改查 | 厚土Go学习笔记
- 39. channel管道 | 厚土Go学习笔记
- springmvc学习第二天
- 厚土Go学习笔记 | 38. goroutine轻量级线程
- 厚土Go学习笔记 | 37. 图片(image)生成器
- 编写地道的Go代码
- 开发你不能忽略的问题?JavaScript(JS)
- 厚土Go学习笔记 | 36. web服务指定路径下的get参数接收与处理
- 用R进行文本分析初探——包含导入词库和和导入李白语句
- Golang事务模型
- 厚土Go学习笔记 | 35. web服务器实现动态路径
- 过滤器Filter精华知识点,怎能不看
- JavaMail开发示例,学习要看对资料
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- CentOS 7上为PHP5安装suPHP的方法(彭哥)
- Linux修改主机名命令详解
- 在CentOS 7.2上安装SuPHP的详细方法
- centos6-7 yum安装php的方法(推荐)
- Linux修改用户所属组的方法
- centos通过yum安装php的教程
- 树莓派4安装Ubuntu 19.10的教程详解
- Linux系统(CentOS7安装)安装JDK8的教程详解
- Deepin中安装与使用virtualenv的教程
- linux安装jdk并设置环境变量的方法教程(看这一篇够了)
- hadoop基于Linux7的安装配置图文详解
- Linux paste命令的使用方法
- ubuntu下迁移home目录至新的分区教程详解
- SVN服务备份操作步骤分享
- Linux磁盘挂载、分区、扩容操作的实现方法