鱼C论坛

 找回密码
 立即注册
查看: 1406|回复: 5

物流信息查询

[复制链接]
发表于 2024-7-5 15:58:26 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
找了很久都没找到免费的查询快递信息的网站
下面这个网站可以查询,但是点击查询按钮后,用F12可用看到物流信息,但是查看网页源代码又看不到物流信息
https://www.kuaidi.com/


  1. import logging
  2. import time
  3. from DrissionPage import ChromiumPage, ChromiumOptions
  4. from DrissionPage.common import By
  5. from DrissionPage.common import Settings
  6. from DrissionPage import WebPage, ChromiumOptions, SessionOptions
  7. import base64
  8. import bs4
  9. from bs4 import BeautifulSoup


  10. # 配置日志
  11. logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')

  12. # 初始化浏览器
  13. def initialize_browser():
  14.     co = ChromiumOptions()  
  15.     co.set_argument('--start-maximized')
  16.     so = SessionOptions()
  17.     page = WebPage(chromium_options=co, session_or_options=so)   
  18.     Settings.raise_when_ele_not_found = False   
  19.     page.set.NoneElement_value('无元素')
  20.     return page


  21. # 快递查询
  22. def express_query(exp_number):
  23.     page.get("https://www.kuaidi.com/")
  24.     ele_input=page.ele((By.ID, 'search'))
  25.     ele_input.clear()
  26.     ele_input.input(exp_number)
  27.     page.ele('.=search_bn js_submit').click()
  28.     page.wait.eles_loaded('class=marginbot')
  29.     page.change_mode()#切换成SessionPage模式

  30.     # 解析HTML
  31.     soup = BeautifulSoup(page.html, 'html.parser')
  32.     print(soup)

  33.     # 查找所有的跟踪记录
  34.     tracking_records = soup.find_all('li', class_='marginbot')
  35.     print(tracking_records)
  36.    
  37.     # 提取时间戳和详情
  38.     result_list = []
  39.     for record in tracking_records:
  40.         time_s = record.find('span', class_='time_s').text.strip()
  41.         kd_con = record.find('span', class_='kd_con').text.strip()
  42.         result_list.append({'time': time_s, 'details': kd_con})

  43.     #输出结果
  44.     print(result_list)
  45.         

  46. if __name__ == "__main__":
  47.     page = initialize_browser()
  48.     exp_number = 'YT1870762630265'
  49.     express_query(exp_number)   
  50.    
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2024-7-5 17:09:32 | 显示全部楼层
generate_query_id 函数还需要更新一下
以下有什么规律? 还是可以从网页源代码解析出来?

KDQUERY1720167631718  查询时间  2024/07/05 16:20
KDQUERY1720167694333  查询时间  2024/07/05 16:21
KDQUERY1720167806456  查询时间  2024/07/05 16:23
KDQUERY1720167856116  查询时间  2024/07/05 16:24
KDQUERY1720167857068  查询时间  2024/07/05 16:24
KDQUERY1720167899105  查询时间  2024/07/05 16:24



  1. import logging
  2. import time
  3. import random
  4. from fake_useragent import UserAgent
  5. import json
  6. import requests


  7. # 配置日志
  8. logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')


  9. def generate_query_id():
  10.     timestamp = int(time.time())
  11.     custom_time_code = str(timestamp)[-6:]  # 截取时间戳的最后6位作为时间编码
  12.    
  13.     # 生成随机序列号
  14.     sequence_number = str(random.randint(10000, 99999))  # 生成5位数的随机序列号
  15.    
  16.     # 拼接查询编号
  17.     query_id = f"KDQUERY{custom_time_code}{sequence_number}"
  18.    
  19.     return query_id


  20. def get_express_type(exp_name):
  21.     exp_dic = {
  22.         "申通": "shentong",
  23.         "圆通": "yuantong",
  24.         "韵达": "yunda",
  25.         "百世": "huitongkuaidi",
  26.         "优速": "youshuwuliu",
  27.         "中通": "zhongtong",
  28.         "EMS": "ems",
  29.         "顺丰": "shunfeng",
  30.         "天天": "tiantian",
  31.         "宅急送": "zhaijisong",
  32.         "中国邮政": "youzhengguonei",
  33.         "全峰": "quanfengkuaidi",
  34.         "速尔": "suer",
  35.         "国通": "guotongkuaidi"
  36.     }
  37.     return exp_dic[exp_name]

  38. # 快递查询
  39. def express_query(exp_name,exp_number):
  40.     headers = {
  41.         "User-Agent": UserAgent().random,
  42.         "Referer": "https://www.kuaidi.com/"
  43.     }

  44.     # 解析HTML
  45.     query_id = generate_query_id()
  46.     query_url=f"https://www.kuaidi.com/index-ajaxselectcourierinfo-{exp_number}-{get_express_type(exp_name)}-{query_id}.html"
  47.     print(query_url)
  48.    
  49.     html = requests.post(query_url, headers=headers)
  50.     j_text = json.loads(html.text)
  51.     if j_text['success']:
  52.         datas=j_text['data']
  53.         for data in datas:
  54.             print(f"{data['time']}, {data['context']}")


  55. if __name__ == "__main__":
  56.     exp_name="圆通"
  57.     exp_number = 'YT1870762630265'
  58.     express_query(exp_name,exp_number)   
  59.    
复制代码

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-7-9 13:53:25 | 显示全部楼层
lengyue869 发表于 2024-7-5 17:09
generate_query_id 函数还需要更新一下
以下有什么规律? 还是可以从网页源代码解析出来?

up up !~~~
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-10-29 04:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表