本文目录导读:

我可以帮你编写一个查询快递信息的脚本,以下是几种常用的方法:
方法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")
使用建议
- 推荐使用快递100 API:稳定、数据全面
- 需要注册快递100账号:获取API密钥
- 注意API调用限制:免费版有每日调用次数限制
常见快递公司编码
# 常用快递公司编码
COMMON_COMPANY_CODES = {
'顺丰': 'shunfeng',
'圆通': 'yuantong',
'中通': 'zhongtong',
'申通': 'shentong',
'韵达': 'yunda',
'邮政': 'youzhengguonei',
'京东': 'jd',
'百世': 'baishiwuliu'
}
如果你告诉我具体的使用场景和需要查询的快递公司,我可以帮你调整成更合适的脚本。