怎么用脚本查询快递信息

wen 实用脚本 1

本文目录导读:

怎么用脚本查询快递信息

  1. 方法1:使用快递100 API(推荐)
  2. 方法2:使用第三方Python库
  3. 方法3:通用HTTP请求模板
  4. 方法4:简单爬虫方式(不推荐)
  5. 使用建议
  6. 常见快递公司编码

我可以帮你编写一个查询快递信息的脚本,以下是几种常用的方法:

方法1:使用快递100 API(推荐)

import requests
import json
def query_express_100(company_code, tracking_number, api_key):
    """
    使用快递100 API查询快递
    company_code: 快递公司编码,如 'yuantong' 圆通, 'shunfeng' 顺丰等
    tracking_number: 快递单号
    api_key: 快递100的API密钥
    """
    url = "https://poll.kuaidi100.com/poll/query.do"
    # 构建请求参数
    params = {
        "customer": api_key,
        "param": json.dumps({
            "com": company_code,
            "num": tracking_number
        })
    }
    # 添加签名(需要根据实际情况调整)
    # sign = md5(param + key + customer)
    try:
        response = requests.get(url, params=params)
        data = response.json()
        if data.get('status') == '200':
            tracks = data.get('data', [])
            print(f"快递单号: {tracking_number}")
            print("物流轨迹:")
            for track in tracks:
                print(f"  {track.get('ftime')}: {track.get('context')}")
        else:
            print(f"查询失败: {data.get('message', '未知错误')}")
    except Exception as e:
        print(f"错误: {e}")
# 使用示例
company_code = "yuantong"  # 快递公司编码
tracking_number = "YT123456789"  # 快递单号
api_key = "你的API密钥"
query_express_100(company_code, tracking_number, api_key)

方法2:使用第三方Python库

# 安装:pip install kuaidi100
from kuaidi100 import Kuaidi100
def query_with_library(api_key, tracking_number):
    client = Kuaidi100(api_key=api_key)
    try:
        result = client.query(tracking_number)
        print(f"快递状态: {result.get('state')}")
        for item in result.get('data', []):
            print(f"时间: {item.get('ftime')}")
            print(f"内容: {item.get('context')}")
            print("-" * 40)
    except Exception as e:
        print(f"查询失败: {e}")

方法3:通用HTTP请求模板

import requests
import time
import hashlib
import json
class ExpressTracker:
    def __init__(self, api_key, customer):
        self.api_key = api_key
        self.customer = customer
        self.base_url = "https://poll.kuaidi100.com/poll/query.do"
    def _generate_sign(self, param):
        """生成签名"""
        sign_str = f"{param}{self.api_key}{self.customer}"
        return hashlib.md5(sign_str.encode()).hexdigest().upper()
    def query(self, company_code, tracking_number):
        """查询物流信息"""
        param = json.dumps({
            "com": company_code,
            "num": tracking_number
        })
        sign = self._generate_sign(param)
        params = {
            "customer": self.customer,
            "param": param,
            "sign": sign
        }
        try:
            response = requests.get(self.base_url, params=params, timeout=10)
            data = response.json()
            if data.get('status') == '200':
                self._print_result(data)
            else:
                print(f"查询失败: {data.get('message')}")
        except requests.exceptions.Timeout:
            print("请求超时")
        except Exception as e:
            print(f"错误: {e}")
    def _print_result(self, data):
        """打印查询结果"""
        state = {
            '0': '在途',
            '1': '揽件',
            '2': '疑难',
            '3': '签收',
            '4': '退签',
            '5': '派件',
            '6': '退回'
        }
        print(f"快递单号: {data.get('nu')}")
        print(f"快递公司: {data.get('com')}")
        print(f"快递状态: {state.get(data.get('state'), '未知')}")
        print("=" * 50)
        for item in data.get('data', []):
            print(f"时间: {item.get('ftime')}")
            print(f"信息: {item.get('context')}")
            print("-" * 50)
# 使用示例
if __name__ == "__main__":
    tracker = ExpressTracker(
        api_key="你的API密钥",
        customer="你的customer编码"
    )
    # 查询示例
    tracker.query("yuantong", "YT123456789")

方法4:简单爬虫方式(不推荐)

import requests
from bs4 import BeautifulSoup
def query_express_by_web(tracking_number):
    """
    通过快递100网页版查询
    注意:这种方式可能不稳定,不推荐生产使用
    """
    url = f"https://www.kuaidi100.com/query"
    params = {
        'type': 'auto',  # 自动识别快递公司
        'postid': tracking_number
    }
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
    }
    try:
        response = requests.get(url, params=params, headers=headers)
        data = response.json()
        if data.get('status') == '200':
            for item in data.get('data', []):
                print(f"时间: {item.get('ftime')}")
                print(f"内容: {item.get('context')}")
                print("-" * 40)
        else:
            print("查询失败")
    except Exception as e:
        print(f"错误: {e}")
# 使用
query_express_by_web("YT123456789")

使用建议

  1. 推荐使用快递100 API:稳定、数据全面
  2. 需要注册快递100账号:获取API密钥
  3. 注意API调用限制:免费版有每日调用次数限制

常见快递公司编码

# 常用快递公司编码
COMMON_COMPANY_CODES = {
    '顺丰': 'shunfeng',
    '圆通': 'yuantong',
    '中通': 'zhongtong',
    '申通': 'shentong',
    '韵达': 'yunda',
    '邮政': 'youzhengguonei',
    '京东': 'jd',
    '百世': 'baishiwuliu'
}

如果你告诉我具体的使用场景和需要查询的快递公司,我可以帮你调整成更合适的脚本。

抱歉,评论功能暂时关闭!