python spider 爬虫 之 解析 xpath 、jsonpath、BeautifulSoup (三)

BeautifulSoup

简称:bs4

BeautifulSoup跟lxml 一样,是一个html文档的解析器,主要功能也是解析和提取数据
优缺点
缺点:效率没有lxml的效率高
优点:接口接口人性化,使用方便 延用了css选择器

在这里插入图片描述

安装BeautifulSoup

1、安装:pip install bs4
2、导入:from bs4 import BeautifulSoup
3、创建bs4 对象
① 服务器响应的文件生成对象
soup = BeautifulSoup(response.read().decode(‘utf-8’),‘lxml’)
② 本地文件生成对象 python对open默认打开文档是gbk
soup = BeautifulSoup(open(‘html文档.html’, ’r‘,encoding=‘utf-8’),‘lxml’)

from bs4 import BeautifulSoupsoup = BeautifulSoup(open('1.html','r',encoding='utf-8'))# 节点定义
# 1、根据标签查找节点 
print(soup.img)   # 只能找到1.html中第一个img标签元素   <img >     </img>
print(soup.img.name)   # 返回 img   元素名称
print(soup.img.attrs)  # 返回 img的属性,以字典形式输出# 2、函数式  find    find_all 	search
#   find     返回是是一个元素对象
print(soup.find('img'))					# 只能找到第一个img元素 对象  
print(soup.find('img'),alt='kitty')		# 获取 alt=kitty的img元素,也是符号条件的第一个对象
#  如果用class 匹配 要在      class_      下划线
print(soup.find('img'),class_='kitty')	# 获取 alt=kitty的img元素,也是符号条件的第一个对象  #	find_all 	返回是列表
print(soup.find_all('img'))					# 返回所有img元素   
print(soup.find_all(['img', 'span'])		# 获取 返回所有img和span元素print(soup.find_all('img'), limit=2)		# 返回前面2个 img元素#	select   根据选择器得到节点列表对象      跟CSS3 选择器一样
print(soup.select('div'))		#   返回 标签是div的所有元素   
print(soup.select('#p'))		#   返回 id=P的标签元素   
print(soup.select('.p'))		#   返回 class=p的所有标签元素列表   
print(soup.select('div>p'))		#   返回 选择所有父级是div的元素的p元素  
print(soup.select('div,p'))		#   返回 所有div和p的元素列表
print(soup.select('div p'))		#   返回 选择div元素内所有p元素 	#  属性选择器print(soup.select('div[id]'))		#   返回 选择有属性id的所有div元素列表	
print(soup.select('div[id="A2"]'))		#   返回 选择属性id="A2"的所有div元素列表	# 节点信息    
#	string      get_text()        xpath  用  text()#			获取节点内容obj = soup.select('#d1')[0]   #select()  返回是列表,   如果要得到第一个元素对象 [0]  才能用  obj.name
# 如果标签对象中 只有内容 string  和  get_text()  效果一样
# 如果标签对象中  出来内容还有标签,  string  就获取不到内容了,get_text() 是可以获取得的print(obj.string)
print(obj.get_text())#			获取节点属性
obj = soup.find('li')  	#find()  返回是元素对象  obj.nameprint(obj.name)    # 获取元素名称
print(obj.attrs)   # 将属性值作为一个  字典 返回
print(obj.attrs.get('title'))   #    推荐这种
print(obj.get('title'))   		# 
print(obj['title'])   			# 

xpath 、jsonpath、BeautifulSoup

如果是json格式,用 jsonpath

如果是html网页, 首选xpath

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/1293.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

项目——学生信息管理系统2

目录 用户类型&#xff0c;我们创建一个枚举类 在 org.xingyun.model 包下创建 UserType 枚举类 快速生成 get set 方法 修改代码&#xff0c;下拉框的内容&#xff0c;用我们的枚举类型 给登录按钮绑定事件 我们在 org.xingyun.utils 包下创建一个工具类 Eclipse 智能提…

四年之约不负等待,耕升 GeForce RTX 4060 踏雪+DLSS 3实现百帧玩光追

昨日&#xff0c;耕升正式发布了GeForce RTX 40系列的最新成员耕升 GeForce RTX 4060 追风。作为NVIDIA密切合作的核心AIC合作伙伴耕升&#xff0c;也将在今日为玩家带来了更多耕升GeForce RTX 40系列成员——耕升 GeForce RTX 4060 踏雪。作为耕升 GeForce RTX 4060系列中的双…

Axure教程—上传文件

本文介绍用Axure制作文件上传效果 预览 预览地址&#xff1a;https://6q4of2.axshare.com 功能 1、点击”文件上传“按钮&#xff0c;显示上传的文件 2、点击”删除“图片&#xff0c;显示提示”是否要删除“&#xff0c;点击”是“&#xff0c;删除数据&#xff0c;点击”否…

基于Java人力资源管理系统设计实现(源码+lw+部署文档+讲解等)

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

树形控件父节点不选中,只能选中子节点,如何实现?

rTree 树形控件一级菜单没有复选框&#xff0c;子菜单有复选框&#xff0c;如何实现&#xff1f;_阿 尭的博客-CSDN博客 接上一篇博客&#xff0c;继续深入功能&#xff0c;如何只选中叶子节点而不选中父节点。 1.在节点被点击时的回调&#xff0c;node-click中&#xff0c;返…

什么是域控服务器?域控服务器功能?部署域控需要考虑因素?域控组策略功能?

一、什么是域控制服务器&#xff1f; 域控制器&#xff08;Domain Controller&#xff09;是在Windows Server操作系统上运行的一个服务角色&#xff0c;它用于管理和控制一个或多个计算机的安全策略、用户身份验证和授权等任务。域控制器通常是用于企业网络中的主要身份验证和…

「C/C++」C++类与类的关系(UML类图+代码说明)

✨博客主页&#xff1a;何曾参静谧的博客 &#x1f4cc;文章专栏&#xff1a;「C/C」C/C学习 相关术语 &#x1f3af;依赖关系&#xff08;Dependency&#xff09;&#xff1a;表示一个类的实现需要另一个类的协助&#xff0c;虚线箭头&#xff0c;箭头指向被依赖的类。 &#…

简要介绍 | 基于Diffusion model的图像生成和重建

注1&#xff1a;本文系“简要介绍”系列之一&#xff0c;仅从概念上对基于Diffusion model的图像生成和重建进行非常简要的介绍&#xff0c;不适合用于深入和详细的了解。 基于Diffusion model的图像生成和重建 What are Stable Diffusion Models and Why are they a Step Forw…

泰坦尼克号幸存者预测

本文所有的代码及数据均存放与https://github.com/MADMAX110/Titanic 泰坦尼克号幸存者预测挑战赛是一个非常受欢迎的机器学习实践项目。这是 Kaggle.com 上最受欢迎的比赛之一。 数据中有3个文件:train.csv&#xff0c;test.csv&#xff0c;和gender_submit .csv。 train.csv包…

小研究 - Java 指针分析综述(三)

近年来静态程序分析已成为保障软件可靠性、安全性和高效性的关键技术之一. 指针分析作为基 础程序分析技术为静态程序分析提供关于程序的一系列基础信息&#xff0c;例如程序任意变量的指向关系、变量 间的别名关系、程序调用图、堆对象的可达性等. 介绍了 Java 指针分析的重要…

【Docker】LXC所实现的隔离性、Linux Namespace等讲解

前言 Docker 是一个开源的应用容器引擎&#xff0c;让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。 &#x1f4d5;作者简介&#xff1a;热…

volume 、namespace

顺带说一下 volume 和 namespace &#xff0c;咱们就开始分享一下 service 是什么 volume 是什么 还记得 docker 的 volume 吗&#xff0c;是一个数据卷 在 K8S 中&#xff0c;volume 是 pod 中能够被多个容器访问的共享目录 &#xff0c;实际上和 docker 是一样的 volume 是…