前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >手把手教你用Python爬取快递100查询你的物流信息

手把手教你用Python爬取快递100查询你的物流信息

作者头像
刘早起
发布2020-09-15 11:16:00
2.1K0
发布2020-09-15 11:16:00
举报
文章被收录于专栏:早起Python早起Python

前言

我们经常会去查快递的物流单号,可是这些物流单号是从哪里来的呢?

快递鸟集合了多家快递公司查询接口,输入相应快递公司编码和快递单号就可以获取到对应的物流信息很方便快捷。

项目目标

教会大家如何用Python编程去查询自己的物流信息。

项目准备

软件:PyCharm

需要的库:urllib.requestjson

网站:https://www.kuaidi100.com

项目分析

如何获取真正的网址,拿到相对应的接口? chrome浏览器F12检查,随便输入一个快递单号,点击查找。如图:

找到

代码语言:javascript
复制
query?type=shentong&postid=773036432685909&temp=0.0

这个文件。找到Request URL:复制网址。分析网址:

代码语言:javascript
复制
https://www.kuaidi100.com/query?type=shentong&postid=773036432685909&temp=0.03191355265516216&phone=

可以看到postid就是我们的快递单号,type就是各个快递公司的名字拼音的简称。那等下就可以定义这个字典去存放各个公司名字的简称拼接网址。

找到Preview=>>对应的data可以看到context就是物流信息。等下可以通过js解析获取对应的字段。

项目实现

定义一个class类继承object。导入需要的库和网址。定义一个字典kd_dict存放快递公司简称。

代码语言:javascript
复制
import urllib.request
import json

kd_dict = {1: 'shentong', 2: 'youzhengguonei', 3: 'yuantong', 4: 'shunfeng', 5: 'yunda', 6: 'zhongtong'}

class YU(object):
     pass

建立查询框架。

代码语言:javascript
复制
  while True:
      print("输入要查询快递公司:")
      print("1.申通  2.EMS邮政  3.圆通 4.顺风 5.韵达 6.中通  0.退出\n ")

      choose = int(input("请选择您的快递公司:"))
      while choose not in range(0, 7):
          choose = int(input("抱歉暂不支持此公司请重新选择:"))
      if choose == 0:
          break
      kd_num = input("请输入快递单号:")

对js文件进行解析

代码语言:javascript
复制
    url = "http://www.kuaidi100.com/query?type=%s&postid=%s" % (kd_dict[choose], kd_num)
    response = urllib.request.urlopen(url)
    html = response.read().decode('utf-8')
    target = json.loads(html)

判断status的是不是200,是200才可以正常访问 ,获取对应的data

代码语言:javascript
复制
 if status == '200':
      data = target['data']
      # print(data)
      data_len = len(data)
      # print(data_len)
      # print("\n")

for循环遍历,获取对应的字段。

代码语言:javascript
复制
  for i in range(data_len):
        print("\n时间: " + data[i]['time'])
        print("状态: " + data[i]['context'] + "")
    print("\n感谢使用!\n")
    break
else:
    print("输入有误请重新输入!\n")

程序循环。

代码语言:javascript
复制
   while True:
      YU.Check()
      out = input("按任意数字退出(其他键继续).........")
      if out >= '0' and out <= '7':
          break
      else:
          print("\n")
          continue

效果展示

点击绿色小三角运行,之后输入快递公司代表的编号

输入你的快递单号,之后在控制台上可以看到显示结果,如下图所示。

小结

  1. 不建议抓取太多数据,容易对服务器造成负载,浅尝辄止即可。
  2. 本文章就python爬取快递100,介绍了如何去拼接字符串,以及列表如何进行类型的转换。
  3. 通过文中Python程序,可以清晰的看到你的快递的物流信息。
  4. 欢迎大家积极尝试,有时候看到别人实现起来很简单,但是到自己动手实现的时候,总会有各种各样的问题,切勿眼高手低,勤动手,才可以理解的更加深刻。
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-09-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 早起Python 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 项目目标
  • 项目准备
  • 项目分析
  • 项目实现
  • 效果展示
  • 小结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档