当前位置: 首页 > article >正文

尚硅谷爬虫note009

一、jsonpath

1.安装

        pip install jsonpath

2.使用

        只能解析本地文件

.json文件

{"store": {"book": [{"category": "reference","author": "Nigel Rees","title": "Sayings of the Century","price": 8.95},{"category": "fiction","author": "Evelyn Waugh","title": "Sword of Honour","price": 12.99},{"category": "fiction","author": "Herman Melville","title": "Moby Dick","isbn": "0-553-21311-3","price": 8.99},{"category": "fiction","author": "J. R. R. Tolkien","title": "The Lord of the Rings","isbn": "0-395-19395-8","price": 22.99}],"bicycle": {"color": "red","price": 19.95}},"expensive": 10
}

.py文件

# _*_ coding : utf-8 _*_
# @Time : 2025/2/19 12:34
# @Author : 20250206-里奥
# @File : demo09_jsonpath_淘票票
# @Project : PythonPro17-21#导入
import json
import jsonpath#到文件
obj = json.load(open('test.json','r',encoding = 'utf-8'))
print(obj)#书店所有书的作者
author_list = jsonpath.jsonpath(obj,'$.store.book[*].author')
print(author_list)#所有的作者
author_list1 = jsonpath.jsonpath(obj,'$..author')
print(author_list1)#store下的所有元素
tag_list = jsonpath.jsonpath(obj,'$.store.*')
print(tag_list)# store里面所有东西的价格
price_list = jsonpath.jsonpath(obj,'$.store..price')
print(price_list)#第3本书
book_third = jsonpath.jsonpath(obj,'$..book[2]')
print(book_third)# 最后一本书
book_last = jsonpath.jsonpath(obj,'$..book[(@.length - 1)]')
print(book_last)# 前2本书
book_firstAndSecond = jsonpath.jsonpath(obj,'$..book[0,1]')
print(book_firstAndSecond)
print("\n")
book_firstAndSecondNew = jsonpath.jsonpath(obj,"$..book[:2]")
print(book_firstAndSecondNew)# 过滤出所有包含isbn的书
# 条件过滤: 需要在()前加?
book_list3 = jsonpath.jsonpath(obj,"$..book[?(@.isbn)]")
print(book_list3)
#超过十块钱的书
book_list4 = jsonpath.jsonpath(obj,"$..book[?(@.price > 10)]")
print(book_list4)# CTRL + alt + L ————》排版生成的.json文件

xpath和jsonpath对比:

jsonpath解析淘票票-城市地址

# _*_ coding : utf-8 _*_
# @Time : 2025/2/19 13:26
# @Author : 20250206-里奥
# @File : demo08_jsonpath_解析淘票票
# @Project : PythonPro17-21import urllib.requesturl = 'https://dianying.taobao.com/cityAction.json?activityId&_ksTS=1739942948773_108&jsoncallback=jsonp109&action=cityAction&n_s=new&event_submit_doGetAllRegion=true'headers = {#请求头中,以“:”符号开头的注释掉。
# ':authority':'dianying.taobao.com',
# ':method':'GET',
# ':path':'/cityAction.json?activityId&_ksTS=1739942948773_108&jsoncallback=jsonp109&action=cityAction&n_s=new&event_submit_doGetAllRegion=true',
# ':scheme':'https',
'accept':'text/javascript, application/javascript, application/ecmascript, application/x-ecmascript, */*; q=0.01',
#默认不支持utf-8的编码格式。   'gzip, deflate, br, zstd'
# 'accept-encoding':'gzip, deflate, br, zstd',
'accept-language':'zh-CN,zh;q=0.9',
'bx-v':'2.5.28',
'cookie':'t=3f22f9c912700c231e2e9e22079d2cec; cookie2=19434e4c86fbda6d54c07ee336bc2027; v=0; _tb_token_=763b7139648b9; cna=CVo8IB2qjWwCAW8CsA6MaAcB; xlly_s=1; isg=BFdXeyfL_BuZhHiX9b7tGjF05suhnCv-ej4MFKmE9SaN2HYasWwNT3T2OnhGMAN2',
'priority':'u=1, i',
'referer':'https://dianying.taobao.com/',
'sec-ch-ua':'"Not(A:Brand";v="99", "Google Chrome";v="133", "Chromium";v="133"',
'sec-ch-ua-mobile':'?0',
'sec-ch-ua-platform':'"Windows"',
'sec-fetch-dest':'empty',
'sec-fetch-mode':'cors',
'sec-fetch-site':'same-origin',
'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36',
'x-requested-with':'XMLHttpRequest',
}#请求对象定制
request = urllib.request.Request(url = url,headers=headers)#模拟浏览器向服务器发送请求
response = urllib.request.urlopen(request)#返回响应内容
content = response.read().decode('utf-8')# 解决jsonpath.用split切割
#[1]表示取第2个元素——》被切割的左边第一个位置的元素没了
#[0]表示取第1个元素————》被切割的右边元素没了
#split( '(' )、split( ')' )分别表示:切割“(”符号左边的数据,和切割“)”符号右边的数据
content = content.split('(')[1].split(')')[0]#打印
print(content)with open('淘票票.json','w',encoding='utf-8') as fp:fp.write(content)# 只要生成文件里的"regionName": "阿拉尔"...,其余的不要
import json
import jsonpath# 加载文件
obj = json.load(open('淘票票.json','r',encoding='utf-8'))city_list = jsonpath.jsonpath(obj,'$..regionName')
print(city_list)#在线
#json.cn--->json在线解析---》赋值打印的运行结果--->
# 粘贴到json在线解析---》删除“jsonxx(” 以及结束的 “)...”   原因:他们不是json字符串中的内容
# ---》

二、BeautifulSopu

        简称bs4

功能

        解析和提取数据

 缺点:

        没有lxml效率高

优点:

        接口人性化,使用方便

1. 安装

        pip install bs4

2. 使用

        解析本地文件

        解析服务器响应文件

.HTML文件

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<div><ul><li id="l1">zs</li><li id="l2">ls</li><li>ww</li><a href="" id="" class="a1">25219</a><span>hhhaa</span></ul></div><ul><li>吃</li><li>喝</li><l>睡</l></ul><a href="" title="a2">百度</a><div id="d1"><span>hhhee</span></div><p id="p1" class="p1">wawww</p>
</body>
</html>

.py文件

# _*_ coding : utf-8 _*_
# @Time : 2025/2/19 16:05
# @Author : 20250206-里奥
# @File : demo10_bs4的基本使用
# @Project : PythonPro17-21#导入
from bs4 import BeautifulSoup# 通过解析本地文件学习bs4的基础语法
# 加载本地文件
# 默认打开的文件,的编码格式是gbk,需要指定编码格式
soup = BeautifulSoup(open('bs4的基本使用.html',encoding='utf-8'),'lxml')
print(soup)#根据标签名查找节点
#找到的是第一个符合条件的数据
print(soup.a)
#获取标签的属性和属性值
print(soup.a.attrs)#bs4的一些函数
#1)find()
#2)find_all()
#3)select()# find()
# 返回第一个符号条件的数据
print(soup.find('a'))
# 根据title的值找到对应的标签对象
print(soup.find('a',title = "a2"))
# 根据class的值找到对应的标签对象
#class是关键字,不能使用。可以加个_————》class_,表示既能代表class,又不是class
print(soup.find('a',class_ = 'a1'))#find_all()
# 返回所有a标签组成的列表
print(soup.find_all('a'))
#如果想获取多个标签数据,那么在find_all的参数中需要添加列表数据
print(soup.find_all(['a','span']))
#获取所有li标签
print(soup.find_all('li'))
# 获取部分li标签.limit的作用:查找前几个li标签
print(soup.find_all('li',limit=2))#select【推荐】,5个用法
#通过标签获取节点对象,返回的是多个数据的一个列表
print(soup.select('a'))
#类选择器。可以通过”.“符号代表class
print(soup.select('.a1'))
#id.
print(soup.select('#l1'))
# 属性选择器,获取具有id属性的li标签
print(soup.select('li[id]'))
# 查找id为l2的li标签
print(soup.select('li[id = "l2"]'))
# 层级选择器[3个:1:空格;2.大于号>;3.逗号,]#后代选择器。获取div标签下的li标签    [空格]
print(soup.select('div li'))
#子代选择器  [大于号> ]
# 很多计算机编程语言中,如果不加空格————》不会输出内容,但是在bs4中会显示内容,不会报错
print(soup.select('div > ul > li'))
# 组合。   【逗号,】
# 找到a标签和li标签所有对象
print(soup.select('a,li'))# 4)节点信息
#获取节点内容.    select返回值是一个列表,可以通过下标获取列表中内容
obj = soup.select('#d1')[0]
# 如果标签对象中只有内容,string和get_text()都可以使用
#如果标签对象中不仅有内容,还有标签。那么string获取不到内容,get_text()能获取内容
#推荐使用get_text()
print(obj.string)
print(obj.get_text())#节点属性
#select返回值是一个列表,没有name属性。通过下标访问
obj = soup.select('#p1')[0]
# name是标签名
print(obj.name)
#将属性值作为一个字典返回
print(obj.attrs)# 获取节点属性
obj = soup.select('#p1')[0]
# 以下3种获取方式
print(obj.attrs.get('class'))
print(obj.get('class'))
print(obj['class'])

相关文章:

尚硅谷爬虫note009

一、jsonpath 1.安装 pip install jsonpath 2.使用 只能解析本地文件 .json文件 {"store": {"book": [{"category": "reference","author": "Nigel Rees","title": "Sayings of the Century&qu…...

verilog笔记

Verilog学习笔记&#xff08;一&#xff09;入门和基础语法BY电棍233 由于某些不可抗拒的因素和各种的特殊原因&#xff0c;主要是因为我是微电子专业的&#xff0c;我需要去学习一门名为verilog的硬件解释语言&#xff0c;由于我是在某西部地区的神秘大学上学&#xff0c;这所…...

Java+SpringBoot+Vue+数据可视化的综合健身管理平台(程序+论文+讲解+安装+调试+售后)

感兴趣的可以先收藏起来&#xff0c;还有大家在毕设选题&#xff0c;项目以及论文编写等相关问题都可以给我留言咨询&#xff0c;我会一一回复&#xff0c;希望帮助更多的人。 系统介绍 在当今社会&#xff0c;随着人们生活水平的不断提高和健康意识的日益增强&#xff0c;健…...

正确清理C盘空间

一.系统清理 正确清理C盘空间主要是删除不需要的文件和应用程序&#xff0c;以释放磁盘空间。以下是一些常用的方法&#xff1a; 删除临时文件&#xff1a;在Windows搜索框中输入“%temp%”&#xff0c;打开临时文件夹&#xff0c;将其中的文件全部删除。 清理回收站&#xf…...

网站快速收录:如何设置robots.txt文件?

为了网站快速收录而合理设置robots.txt文件&#xff0c;需要遵循一定的规则和最佳实践。robots.txt文件是一个纯文本文件&#xff0c;它告诉搜索引擎爬虫哪些页面可以访问&#xff0c;哪些页面不可以访问。以下是如何设置robots.txt文件以助于网站快速收录的步骤和要点&#xf…...

python绘制年平均海表温度、盐度、ph分布图

python绘制年平均海表温度、盐度、ph图 文章目录 python绘制年平均海表温度、盐度、ph分布图前言一、数据准备二、代码编写2.1. python绘制年平均海表温度&#xff08;主要&#xff09;2.2. python绘制年平均海表盐度&#xff08;选看&#xff09;2.3. python绘制年平均海表ph&…...

网络空间安全(2)应用程序安全

前言 应用程序安全&#xff08;Application Security&#xff0c;简称AppSec&#xff09;是一个综合性的概念&#xff0c;它涵盖了应用程序从开发到部署&#xff0c;再到后续维护的整个过程中的安全措施。 一、定义与重要性 定义&#xff1a;应用程序安全是指识别和修复应用程序…...

HTTPS 通信流程

HTTPS 通信流程时序图&#xff1a; #mermaid-svg-HWoTbFvfih6aYUu6 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-HWoTbFvfih6aYUu6 .error-icon{fill:#552222;}#mermaid-svg-HWoTbFvfih6aYUu6 .error-text{fill:#…...

全链路优化:如何让单点登录认证接口并发性能翻倍?

背景 最近针对一个单点登录认证项目进行性能优化&#xff0c;在 8核 16G 环境下的认证并发能力从每秒800次提升至每秒1600次&#xff0c;性能提升一倍&#xff0c;整理此次优化过程中的相关性能优化操作总结和大家分享一下。 Nginx配置优化 在并发认证场景下&#xff0c;Ngi…...

http代理IP怎么实现?如何解决代理IP访问不了问题?

HTTP代理是一种网络服务&#xff0c;它充当客户端和目标服务器之间的中介。当客户端发送请求时&#xff0c;请求首先发送到代理服务器&#xff0c;然后由代理服务器转发到目标服务器。同样&#xff0c;目标服务器的响应也会先发送到代理服务器&#xff0c;再由代理服务器返回给…...

设计模式教程:迭代器模式(Iterator Pattern)

迭代器模式&#xff08;Iterator Pattern&#xff09;是设计模式中的一种行为型模式&#xff0c;它允许顺序访问一个集合对象中的元素&#xff0c;而无需暴露集合对象的内部结构。换句话说&#xff0c;迭代器模式提供了一个方法&#xff0c;能让你遍历集合中的元素&#xff0c;…...

AI Agent架构深度解析:从ReAct到AutoGPT,自主智能体的技术演进与工程实践

前言 觉得不错就点个赞吧&#xff01;。 一、AI Agent技术架构演进图谱 &#xff08;配图&#xff1a;AI Agent架构演进时间轴&#xff0c;标注关键技术节点&#xff09; 1.1 三代架构对比分析 架构类型代表系统核心特征局限性反应式DeepBlue预置规则库无长期记忆认知式Wats…...

USC安防平台之地图临近资源列表

USC安防平台通过配置多层地图&#xff0c;并把相关的摄像机和门禁对象配置到数据上&#xff0c;用户可以方便的在地图上查看并操作。 但是对于大型的视频监控项目&#xff0c;同一个经纬度可能安装了很多台摄像机&#xff0c;这时候就需要显示同一个经纬度的临近资源列表&…...

Flutter 启动优化

Dart VM在Flutter中的作用是什么&#xff1f;它负责执行Dart代码&#xff0c;无论是JIT还是AOT模式都需要它。在JIT模式下&#xff0c;VM随应用一起运行&#xff0c;而在AOT模式下&#xff0c;代码已经被编译成机器码&#xff0c;VM可能不需要运行时存在&#xff1f;不过实际上…...

JavaScript数组方法reduce详解

JavaScript数组方法reduce详解 目录 JavaScript数组方法reduce详解一&#xff0c;前言二&#xff0c;核心语法三&#xff0c;案例1.求和2.找最大值3.数组转对象4.复合操作&#xff08;同时实现 map filter&#xff09; 四&#xff0c;常见错误1.空数组没有初始值2.没有返回累加…...

计算机毕业设计SpringBoot+Vue.js服装商城 服装购物系统(源码+LW文档+PPT+讲解+开题报告)

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…...

Web自动化中Selenium下Chrome与Edge的Webdriver常用Options参数

目录 引言 说明 Add_argument() 添加方式 常用参数 Add_experimental_option() 添加方式 常用方法 任务结束后仍然保持浏览器打开 禁用“Chrome 正受到自动测试软件的控制”提示 设置下载路径 禁用弹窗拦截 禁用图片加载 禁用 JavaScript 注意 引言 …...

现代未来派品牌海报徽标设计无衬线英文字体安装包 THANKS LAB

THANK LAB 是一种高级未来主义的软字体&#xff0c;将时尚的现代设计与光滑圆润的边缘相结合&#xff0c;营造出大胆而平易近人的美感。这款字体非常适合品牌、海报、标题、UI/UX 和科幻主题项目&#xff0c;旨在激发创造力。THANK LAB Futuristic Soft Font 完全支持拉丁字母、…...

《AI与NLP:开启元宇宙社交互动新纪元》

在科技飞速发展的当下&#xff0c;元宇宙正从概念逐步走向现实&#xff0c;成为人们关注的焦点。而在元宇宙诸多令人瞩目的特性中&#xff0c;社交互动体验是其核心魅力之一。人工智能&#xff08;AI&#xff09;与自然语言处理&#xff08;NLP&#xff09;技术的迅猛发展&…...

【算法通关村 Day6】二叉树层次遍历

树与层次遍历青铜挑战 理解树的结构 通过中序和后序遍历序列恢复二叉树是一个经典的二叉树构建问题。给定二叉树的中序遍历序列和后序遍历序列&#xff0c;我们可以利用以下步骤进行恢复。 思路&#xff1a; 后序遍历的特点&#xff1a; 后序遍历的最后一个节点是树的根节点…...

安全面试2

文章目录 简单描述一下什么是水平越权&#xff0c;什么是垂直越权&#xff0c;我要发现这两类漏洞&#xff0c;那我代码审计要注意什么地方水平越权&#xff1a;垂直越权&#xff1a;水平越权漏洞的审计重点垂直越权漏洞的审计重点 解释一下ssrf漏洞原理攻击场景修复方法 横向移…...

【JavaScript进阶】构造函数数据常用函数

目录 本章节用到的所有素材都可以找到&#xff1a;素材自取~~~~ 1、深入对象 1.1创建对象三种方式 1.2 构造函数 练习 利用构造函数创建多个对象 实例化执行过程 1.3实例成员&静态成员 2. 内置构造函数 2.1 Object 2.2 Array 练习 员工涨薪计算成本 2.3 St…...

在PiscTrace开发者版上直接处理图像色阶分布

在图像处理和计算机视觉中&#xff0c;色阶分布&#xff08;或称灰度分布&#xff09;是描述图像中像素强度分布的一个重要概念。它对于理解图像的亮度、对比度、纹理和细节等方面具有关键作用。通过色阶分布的分析&#xff0c;我们能够获得图像的整体信息&#xff0c;从而帮助…...

趣味数学300题1981版-十五个正方形

分析&#xff1a;移动两根变成11个正方形很简单&#xff1a; 移动4根变成15个正方形&#xff0c;分析&#xff1a; 一个田字格包含5个正方形&#xff0c;若要15个正方形需要3个田字格&#xff0c;如果3个田字格完全不重合&#xff0c;需要6*318根火柴。如果合并正方形的边&…...

Selenium实战案例1:论文pdf自动下载

在上一篇文章中&#xff0c;我们介绍了Selenium的基础用法和一些常见技巧。今天&#xff0c;我们将通过中国科学&#xff1a;信息科学网站内当前目录论文下载这一实战案例来进一步展示Selenium的web自动化流程。 目录 中国科学&#xff1a;信息科学当期目录论文下载 1.网页内…...

前端面试-JavaScript 数据类型检测全解

目录 一、基础检测方法 二、方法深度解析 1. typeof 运算符 2. instanceof 运算符 3. 终极检测方案 三、特殊场景检测方案 四、手写实现原理 1. 通用类型检测函数 2. 改进版数组检测&#xff08;兼容旧浏览器&#xff09; 五、常见面试陷阱 六、最佳实践指南 七、扩…...

nginx 反向代理 配置请求路由

nginx | 反向代理 | 配置请求路由 nginx简介 Nginx&#xff08;发音为“Engine-X”&#xff09;是一款高性能、开源的 Web 服务器和反向代理服务器&#xff0c;同时也支持邮件代理和负载均衡等功能。它由俄罗斯程序员伊戈尔西索夫&#xff08;Igor Sysoev&#xff09;于 2004…...

用户中心项目教程(十)---注册里面的重定向排查和相关的修改

文章目录 1.注册逻辑的设计和实现2.解决自带的这个重定向的问题3.增加属性的相关操作4.关于如何修改页面上面的绿色按钮 1.注册逻辑的设计和实现 上次说到了的是登录功能&#xff0c;我们使用数据库里面存在的这个存在的账户和密码进行登录&#xff0c;但是是无法进行跳转的&a…...

根据音频中的不同讲述人声音进行分离音频 | 基于ai的说话人声音分离项目

0.研究背景 在实际的开发中可能会遇到这样的问题&#xff0c;老板让你把音频中的每个讲话人的声音分离成不同的音频片段。你可以使用au等专业的音频处理软件手动分离。但是这样效率太慢了&#xff0c;现在ai这么发达&#xff0c;我们能否借助ai之力来分离一条音频中的不同的说…...

【单片机】【UDS】 (单帧与多帧) 数据传输

对于使用 CAN 的诊断通信系统&#xff0c;每个单帧 (SF)、 第一帧 (FF)、 连续帧 (CF) 或流控 制帧 (FC) 有 8 字节数据场&#xff1b;其中单帧的 CAN_DL≤8 且第一帧的 FF_DL≤4095&#xff1b;下表 中已定义 每个报文的类型。 CAN FD 帧的数据场支持最大 64 个字节&#xff0…...