首页 > 其他分享 >jsonpath解析淘票票城市

jsonpath解析淘票票城市

时间:2023-03-23 22:00:52浏览次数:37  
标签:utf 淘票票 content json jsonpath split obj 解析

image.png

步骤:

首先找到城市的接口通过F12打开检查点击北京即可得到爬取数据的接口 image.png

打开url发现显示的是jsonp121({"returnCode":"0","returnValue":{}});

原因:

​ 淘票票的请求头给了我们数据限制

复制表头参数 重要的一般是'cookie','referer','user-agent'

image.png

获取城市数据

image.png

发现这不是我们想要的json文件格式

image.png

解决方式进行切割

#split切割
content = content.split('(')[1].split(')')[0]

with open('淘票票.json','w',encoding='utf-8')as fp:
    fp.write(content)

print(content)

下载解析json文件

import json
import jsonpath

obj =json.load(open('淘票票.json','r',encoding='utf-8'))

city_list = jsonpath.jsonpath(obj,'$..regionName')

print(city_list)

补充知识:

jsonpath的使用:
obj = json.load(open('json文件', 'r', encoding='utf‐8'))
ret = jsonpath.jsonpath(obj, 'jsonpath语法')

注意:

load方法里不能用字符串

运行结果:

image.png

总结:

​ 首先最重要的是要找对接口,其次是对一般表头数据的要求要知道,对jsonp109({"returnCode":"0",...})处理方式就是通过字符的split方法进行删除。

源码:

# _*_ coding : utf-8 _*_
# @Time : 2023/3/22 16:35
# @Author : 断墨寻径
# @File : 解析_jsonpath
# @Project : pcdemo

import urllib.request

url = 'https://dianying.taobao.com/cityAction.json?activityId&_ksTS=1679575747018_108&jsoncallback=jsonp109&action=cityAction&n_s=new&event_submit_doGetAllRegion=true'
headers ={
    'cookie': 'cna=umrQGdUWKXoCAW/xdE1lTH4W; t=9bd59de8d4a9f4ec0cf4e18ee4897dc8; cookie2=1cdd430472150b3ca9976420464748bd; v=0; _tb_token_=fbe33ee5704ae; xlly_s=1; tb_city=110100; tb_cityName="sbG+qQ=="; tfstk=c6FVBRqWYsCqSGzOvbca4AS_gEnAZYmiAQuEnGUC0BdRN4Dci0KtrmgxzV8yjxf..; l=fBjD4TMVNPS2j0SUBO5BFurza77TrIRb4sPzaNbMiIEGa6_OTF1AgNCsp8Pe7dtjgTCmNetr24w81dLHR3A0hc0c07kqm0-Z3xvtaQtJe; isg=BCcnDl3mDyIPc4uuqWRXYGkQtlvxrPuODJE8JPmUj7bd6EeqAXxP3ijuCuj2ANMG',
    'referer': 'https://dianying.taobao.com/?spm=a1z21.3046609.header.1.77be112avBjLqb&n_s=new',
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36'
}


request = urllib.request.Request(url=url,headers=headers)

response = urllib.request.urlopen(request)

content = response.read().decode('utf-8')

print(content)

#split切割
content = content.split('(')[1].split(')')[0]

with open('淘票票.json','w',encoding='utf-8')as fp:
    fp.write(content)

print(content)

import json
import jsonpath

obj =json.load(open('淘票票.json','r',encoding='utf-8'))

city_list = jsonpath.jsonpath(obj,'$..regionName')

print(city_list)

标签:utf,淘票票,content,json,jsonpath,split,obj,解析
From: https://blog.51cto.com/u_15977171/6145994

相关文章

  • Revit BIM模型在ArcGIS Pro中的数据组织及转换成SLPK后的图层结构解析
    ArcGISPro对Revit数据有自己的一套分层方式。在ArcGISPro中打开bim文件会发现都是按照相同的方式组织数据: 将rvt格式数据转换成SLPK格式后的数据结构(将slpk数据直接......
  • 定位任意时刻性能问题,持续性能分析实践解析
    作者:义泊01持续性能剖析简介更好的应用性能,可以提供更好的用户体验,可以降低企业IT成本,可以让系统更稳定和可靠。在应用性能剖析技术出现以前,开发人员排查问题只能依赖各种......
  • 定位任意时刻性能问题,持续性能分析实践解析
    作者:义泊01持续性能剖析简介更好的应用性能,可以提供更好的用户体验,可以降低企业IT成本,可以让系统更稳定和可靠。在应用性能剖析技术出现以前,开发人员排查问题只能依赖......
  • 栈的实现:括号的解析
    一、问题引入在学习栈的过程中,教材有一个案例:利用栈结果解析括号的匹配问题。括号问题:[({}{})],说明[]、()、{}称为一对。号码位置对应的括号之间进行匹配,结果:0-7、......
  • 09-基础篇-入门案例解析:starter
    课程地址:starter和parent的不同之处:starter:是为了减少依赖配置parent:减少依赖冲突两者都是解决配置问题 1、开发SpringBoot程序需要导入坐标时通常导入对应的starter.2、每......
  • 08-基础篇-入门案例解析:parent
    课程地址:1、开发SpringBoot程序需要继承spring-boot-starter-parent2、spring-boot-starter-parent中定义了若干个依赖管理3、继承parent模块可以避免多个依赖使用相同技术......
  • 10-基础篇-入门案例解析:引导类
    课程地址:启动方式:@SpringBootApplicationpublicclassSpringboot01QuickstartApplication{publicstaticvoidmain(String[]args){SpringApplic......
  • CodeIgniter 的数据安全过滤全解析
    由于对CI的SQL安全这些不放心,今天寡人啃了一下午的代码,算是对其机制比较了解了,为了让各位兄弟姐妹少走弯路,特将战果公布,希望大家喜欢。1.无论如何在获取参数之时都建设将x......
  • 野火代码详细解析#define EEPROM_INFO(fmt,arg...) printf("<<-EEPROM-INFO->> "fmt"
    这是一个C语言中的宏定义,它的作用是在输出信息时添加一个前缀"<<-EEPROM-INFO->>",方便在输出信息中区分不同的信息来源。其中,fmt是一个格式化字符串,arg是可变参数,用于替换......
  • 使用uni-app写小程序,解析含有html标签的富文本
    最近在改一个项目,将html+js+css的项目改成小程序,我说使用的uni来写的,其中遇到一个问题,就是需要解析富文本,在vue中可以直接使用v-html,但是小程序中的标签都是view,text以及i......