一键查询快递物流信息

背景

前一段时间跳舞,发现鞋子磨了个洞(又得买鞋了),然后就去淘宝买了双鞋,不过发现每次查物流都得登一次淘宝,然后又要点击这个点击那个的,作为懒虫的我觉得好麻烦啊~,于是乎就想写一个简单的查快递物流的程序,偷偷懒。过程中踩了一点坑。。。

流程

  • 确定目标

  • 分析目标

  • 代码实操

  • 检验结果

确定目标

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

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

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

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

分析目标

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

一键查询快递物流信息_第1张图片

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

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

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

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

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

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

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

一键查询快递物流信息_第2张图片

不管,先盘它。。

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

一键查询快递物流信息_第3张图片

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

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

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

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

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

一键查询快递物流信息_第4张图片

哦吼~我看到了啥!!

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

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

点击headers,查看 Request URL 和 Request Method

一键查询快递物流信息_第5张图片

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,是京东的字母缩写,说明这个快递来自京东,好像在前面见过,返回去找找看

一键查询快递物流信息_第6张图片

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

看看这个的请求网址是啥

点击headers查看一下

一键查询快递物流信息_第7张图片

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

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

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

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

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

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

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

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

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

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

代码实操

import requests
import 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}')

检验结果

一键查询快递物流信息_第8张图片
nice~目标达成

本人也运营了一个公众号–【佛系学python】,大部分文章会在里面发布。
希望大家多多支持,谢谢

你可能感兴趣的:(python爬虫)