步骤:
首先找到城市的接口通过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)