步骤:
首先找到城市的接口通过F12打开检查点击北京即可得到爬取数据的接口
打开url发现显示的是jsonp121({"returnCode":"0","returnValue":{}});
原因:
淘票票的请求头给了我们数据限制
复制表头参数 重要的一般是'cookie','referer','user-agent'
获取城市数据
发现这不是我们想要的json文件格式
解决方式进行切割
#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方法里不能用字符串
运行结果:
总结:
首先最重要的是要找对接口,其次是对一般表头数据的要求要知道,对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