手动撸一个快递接口
开发环境:win-xp python2.7.9 firefox
使用的库 标准库
最近有做查物流相关项目,需要用到物流接口,先百度下,看有没有现成的
还一天限制500次,还要填那么多信息,玩个蛋
自己撸一个得了
先看下在线查询的网站,百度第一个出来的是快递100,上面广告不算
就撸你了,谁让你排第一个
1,打开网站,按f12,查看元素,调掉网络,开始监控数量
2输入一个单号
可以看下发送了不少请求,选xhr过滤下,下面2条就是我们需要跟踪的请求数据
一条条来分析
第二条是一个post请求,看下请求参数,参数就一个text,值就是单号
请求链接是 http://www.kuaidi100.com/autonumber/autoComNum?text=XXXXXXX
返回参数如下,就一个comCode,看来这个请求是判断单号是什么快递的
ok,看另外一条请求
链接是
http://www.kuaidi100.com/query?type=shentong&postid=xxxx&id=1&valicode=&temp=0.462558009486876
响应如下,这个就是物流信息,是一个json数据
回头再看下链接,几个字段type,postid,id,temp
type明显是快递名称,postid就是单号,id貌似固定是1,temp看情况是时间戳,valicode是空的
去掉temp直接再浏览器打开链接,看到可以获取数据,没啥用的数据
到这里,可以看出网站提供了2个接口,第一个是用来判断物流公司
第二个接口才是真正查询接口
还要什么申请啊,这不有现成的么
基本分析完成了,接下来就是python开撸
先写第一个接口
#!/usr/bin/env python #coding:utf-8 import urllib,urllib2 import json,sys reload(sys) sys.setdefaultencoding("utf-8") #获取快递名称 def get_kd_name(danhao): url = "http://www.kuaidi100.com/autonumber/autoComNum?text=" if type(danhao)!=long: return False try: return json.loads(urllib2.urlopen(url+str(danhao)).read())["auto"][0]['comCode'] except Exception, e: return False
先判断下单号是不是long类型数值
然后拼接url,访问数据,讲真,其实还要伪装下浏览器啥的,懒的弄了
这样就可以通过单号判断物流公司了
下面第二个接口
#获取物流信息 def get_wuliu(danhao): url = "http://www.kuaidi100.com/query?id=1&valicode=" code = get_kd_name(danhao) if code: url = url+"&type=%s&postid=%s"%(code,danhao) try: return json.loads(urllib2.urlopen(url).read())["data"] except Exception, e: return False else: return False
这个接口用到了第一个的接口,只需要输入单号就可以得到物流信息
不过如果知道物流公司的话,type就不用获取了,可以省一次访问接口,速度更快
#获取物流信息 def get_wuliu(code,danhao): url = "http://www.kuaidi100.com/query?id=1&valicode=" if code: url = url+"&type=%s&postid=%s"%(code,danhao) try: return json.loads(urllib2.urlopen(url).read())["data"] except Exception, e: return False else: return False
就这样,一个快递接口就撸出来了,后面在集成到自己程序里面,想怎么查就怎么查
今天的分享就到这里,如果大家觉得还可以呀,记得打赏呦