前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一键查询物流信息

一键查询物流信息

作者头像
佛系编程人
发布2019-08-14 15:03:48
1.2K0
发布2019-08-14 15:03:48
举报
文章被收录于专栏:佛系编程人佛系编程人

背景

前一段时间跳舞

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

然后就去淘宝买了双鞋

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

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

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

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

流程

  • 确定目标
  • 分析目标
  • 写代码
  • 检验结果

确定目标

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

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

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

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

分析目标

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

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

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

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

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

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

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

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

不管,先盘它。。

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

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

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

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

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

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

哦吼~我看到了啥!!

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

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

点击headers,查看 Request URL 和 Request Method

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

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

看看这个的请求网址是啥

点击headers查看一下

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

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

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

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

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

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

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

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

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

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

编写代码

代码语言:javascript
复制
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}')

检验结果

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-05-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 佛系编程人 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云开发 CLI 工具
云开发 CLI 工具(Cloudbase CLI Devtools,CCLID)是云开发官方指定的 CLI 工具,可以帮助开发者快速构建 Serverless 应用。CLI 工具提供能力包括文件储存的管理、云函数的部署、模板项目的创建、HTTP Service、静态网站托管等,您可以专注于编码,无需在平台中切换各类配置。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档