vlambda博客
学习文章列表

酷!利用 Python 一键查询物流信息!

酷!利用 Python 一键查询物流信息!


背景

前一段时间跳舞

发现鞋子磨了个洞(又得买鞋了

然后就去淘宝买了双鞋

不过发现每次查物流都得登一次淘宝

然后又要点击这个点击那个的

作为懒虫的我觉得好麻烦啊~

于是乎就想写一个简单的查快递物流的程序,偷偷懒。过程中踩了一点坑


流程


  • 确定目标

  • 分析目标

  • 写代码

  • 检验结果


确定目标


百度上搜到一个'快递100'的网站,可以查询货物的物流信息,所以选择了它作为这次的小白鼠


但是运单号这么长,一位一位输进去也挺烦人的,还可能输错


所以这次想达到的效果是复制一个要查询的运单号,然后再运行程序直接显示最新的物流状态


给大佬递上该网址:' http://www.kuaidi100.com/'


分析目标


打开网址,进入到这个界面


酷!利用 Python 一键查询物流信息!


爬虫常规操作:打开开发者工具,我喜欢直接按 f12

什么都没有,建议不要刷新,方便待会寻找目标

一般这种需要提交信息的,内容都不会在 element,而是在network , 并且一般在XHR中


然后在输入框内输入一个运单号

建议粘贴上去,也是为了方便寻找目标

我用框框下面提供的运单号进行测试的

然后你会看到开发者工具的左边会出现一个不知道是啥的东西


酷!利用 Python 一键查询物流信息!


不管,先盘它。。

点击之后再点击Preview , 看看里面是啥


酷!利用 Python 一键查询物流信息!


好像没有我们想要的东西,算了,先不管它。。


继续往下走,看看会不会出现什么线索

点击下拉框中的第一个选项

然后它跳转到了这个界面,并且发现开发者工具左边又出现了一个不知是啥的东西

点开看看它的Preview里会不会有什么我们需要的线索


酷!利用 Python 一键查询物流信息!


哦吼~我看到了啥!!

太棒了,看来找到目标了,而且还是json格式,提取就简单多了


淡定淡定~先来分析分析它的请求网址

点击headers,查看 Request URL 和 Request Method


酷!利用 Python 一键查询物流信息!


Request URL : 

' https://www.kuaidi100.com/query?type=jd&postid=VC55230341272&temp=0.8083403728887184&phone='


Request Method : get


分析一下这个网址,它是由 ' https://www.kuaidi100.com/query ' 以及 ' ? '后面的参数组成的


那我们再来分析一下这些参数从哪获得


首先是 type ,它的值是 jd,是京东的字母缩写,说明这个快递来自京东,好像在前面见过,返回去找找看


酷!利用 Python 一键查询物流信息!


原来就在之前第一次跳出的未知是啥的里面,那我们只要提取出这个 ' jd ' 作为 type的值就可以了


看看这个的请求网址是啥

点击headers查看一下


酷!利用 Python 一键查询物流信息!


请求网址是:' http://www.kuaidi100.com/autonumber/autoComNum?resultv2=1&text=VC55230341272 '


并且以post方式向服务器进行请求


这里面又有两个参数resultv2和text


参数text 的值好理解,就是运单号嘛

参数resultv2是啥,目前未知,也先不管,照写上去,待会看看会不会有影响


参数type 的值暂时解决了,继续看看下一个


下一个是参数temp, 目前未知,不过看上去像时间戳,先不管它,待会再看看会不会有什么影响


下一个是参数phone , 这个就简单了,因为它的值啥也没有,照写上去就好了


最后就是知道它的请求方式是 get 请求。


最后总结一下,刚才出现的几个未知的参数,你多找几个运单号测试对比一下就可以发现resultv2的值不会变,所以直接照抄上去就好了。temp是随机的,应该是时间戳,我试着不变,只改变运单号,结果是一样的,所以这个没什么影响,也是照搬就行。网址参数解决后就用json提取数据就可以完成我们的目标了


编写代码


import requestsimport pyperclip #用于复制、粘贴
print('运行本程序需先复制快递订单号')
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36','Referer': 'https://www.kuaidi100.com/','Host': 'www.kuaidi100.com','Cookie': 'WWWID=WWW3A2D82C41E5A3F9618CCA4FF90F7C225; Hm_lvt_22ea01af58ba2be0fec7c11b25e88e6c=1556960166,1556960535,1556969377; csrftoken=mGs4KEcLyMdFFxQFw61Om9MQjgLYmF9-Z8LDb0bLEOI; Hm_lpvt_22ea01af58ba2be0fec7c11b25e88e6c=1556969389'} # 这就是我踩的坑,这些参数不加还不行,不加它玩你!#注意上面的cookie可能会过期
#输入快递单号并获取相应物流公司url_id = 'https://www.kuaidi100.com/autonumber/autoComNum'params_id = {'resultv2': '1','text': pyperclip.paste() } # pyperclip.paste()输出复制的内容req_id= requests.post(url_id,params=params_id,headers = headers)result_id = req_id.json() # 将文本转换为json格式comde = result_id['auto'][0]['comCode']print(f'物流公司字母:{comde}')

#获取物流信息url_mes = f'https://www.kuaidi100.com/query?type={comde}&postid={ params_id["text"]}&temp=0.457913985512678&phone='req = requests.get(url_mes,headers = headers)js = req.json()time = js['data'][0]['time']context = js['data'][0]['context']print(f'时间:{time}\n物流状态:{context}')


检验结果


酷!利用 Python 一键查询物流信息!


酷!利用 Python 一键查询物流信息!


  
    
    
  
酷!利用 Python 一键查询物流信息!
酷!利用 Python 一键查询物流信息!

分享

酷!利用 Python 一键查询物流信息!

收藏

点赞

在看