快递100获取快递信息(爬虫)
快递100获取快递信息(爬虫)
最近搞js逆向,发现个逆向简单的网站,搞一波
1.搞程序先装环境,requests_html库请求加解析于一体,居家旅行必备
pip install requests
2.安装完成环境,成功一半,接下来分析网站
(1)打开网网址:https://www.kuaidi100.com/?from=openv
(2)F12,一键超神
(3)准备一个快递单号(中通除外,不知为毛查不了)
(4)浏览器搜索快递信息里的某个关键字,运气好搜到了,点进去
(5)请求头,请求体信息全有,python写一波请求,又是运气好发现可以获取到
(6)可疑参数都怎么来的?首先请求头里发现只有Cookie的csrftoken值的变化是关键(等两天Cookie对比下就能知道),搜索一下值,运气再次爆表,搜到了
(7)接下来请求体参数,type快递名字,postid快递单号,temp像是时间戳名字,但不是,phone收件人电话(查顺丰快递需要这个)
搜到开搞,获取快递名函数有了
(8)找temp,值没有搜到,搜字段,回到获取到信息的网址,看看请求怎么来的,这几个地方挨个点进去看并搜索字段名(大佬有高招麻烦告诉我)
找到,原来是个随机数,too young
3.分析完毕,代码走起
(1)头部加载库
# @Time : 2021/3/22 16:40
# @Author : 张穆栩
# @File : kaudi100pro.py
# @Software: PyCharm
import re
import random
import requests_html
(2)面向对象,实例的参数
class Kuaidi(object):def __init__(self, number):# 转运信息urlself.url = 'https://www.kuaidi100.com/query'# token urlself.token_url = 'https://www.kuaidi100.com/'# 快递名urlself.name_url = 'https://www.kuaidi100.com/autonumber/autoComNum'# 快递名参数self.number_params = {'text': number}self.token_params = {'from': 'openv'}# 转运信息参数self.temp = str(random.random())self.params = {'type': self.getname(),'postid': number,'temp': self.temp,'phone': ''}csrftoken = self.gettoken()self.headers = {'Connection': 'keep-alive','User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.193 Safari/537.36','Referer': 'https://www.kuaidi100.com/?from=openv','Cookie': 'csrftoken=' + csrftoken + '; WWWID=WWWF4FCD42239B8DAC700F22E0571D3952D; Hm_lvt_22ea01af58ba2be0fec7c11b25e88e6c=1615603420,1615603495,1616232321,1616289581; Hm_lpvt_22ea01af58ba2be0fec7c11b25e88e6c=1616289592'}
(3)获取快递名称
# 获取快递名def getname(self):rous = requests_html.HTMLSession().post(self.name_url, params=self.number_params)name = rous.json()['auto'][0]['comCode']return name
(4)获取csrftoken
# 获取tokendef gettoken(self):rous = requests_html.HTMLSession().get(self.token_url, params=self.token_params)Set_Cookie = rous.headers['Set-Cookie']csrftoken = re.findall(', csrftoken=(.*?);', Set_Cookie)[0]return csrftoken
(5)获取所有转运信息
# 获取转运信息def getdata(self):# 转运信息参数Session = requests_html.HTMLSession()rous = Session.get(self.url, headers=self.headers, params=self.params)print(rous.text)datas = rous.json()['data']for data in datas:print(data)
(6)然后再启动它,搞定
完整代码
import re
import time
import random
import requests_htmlsession = requests_html.HTMLSession()class Kuaidi(object):def __init__(self, number, phone):# 转运信息urlself.url = 'https://www.kuaidi100.com/query'# 获取token url和Hm_lvtself.token_url = 'https://www.kuaidi100.com/'# 获取快递名urlself.name_url = 'https://www.kuaidi100.com/autonumber/autoComNum'# 快递名参数self.number_params = {'text': number}self.token_params = {'from': 'openv'}# 转运信息参数self.temp = str(random.random())self.params = {'type': self.getname(),'postid': number,'temp': self.temp,'phone': ''}csrftoken = self.gettoken()self.headers = {'Connection': 'keep-alive','User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.193 Safari/537.36','Referer': 'https://www.kuaidi100.com/?from=openv','Cookie': 'csrftoken=' + csrftoken[0] + '; Hm_lvt_' + csrftoken[1] + '=' + str(int(time.time())) + '; Hm_lpvt_' + csrftoken[1] + '=' + str(int(time.time()))}# 获取转运信息def getdata(self):# 转运信息参数rous = session.get(self.url, headers=self.headers, params=self.params)print(rous.text)datas = rous.json()['data']for data in datas:print(data)# 获取token 和 Hm_lvtdef gettoken(self):rous = session.get(self.token_url, params=self.token_params)Set_Cookie = rous.headers['Set-Cookie']csrftoken = re.findall(', csrftoken=(.*?);', Set_Cookie)[0]js_url = re.findall('https://cdn.kuaidi100.com/js/share/count.js(.*)">', rous.text)[0]url = 'https://cdn.kuaidi100.com/js/share/count.js' + js_urlrous = session.get(url)Hm_lvt = re.findall('https://hm.baidu.com/hm.js\?(.*)";', rous.text)[0]return [csrftoken, Hm_lvt]# 获取快递名def getname(self):rous = session.post(self.name_url, params=self.number_params)name = rous.json()['auto'][0]['comCode']return nameif __name__ == "__main__":# 运单号number = ''# 手机后四位phone = ''Kuaidi(number, phone).getdata()
快递100获取快递信息(爬虫)相关推荐
- 通过快递100获取快递单号,结合c-lodop热敏纸打印 – 通过菜鸟ISV/自研ERP使用菜鸟电子面单...
https://www.1024cc.cn/index.php/2019/04/29/%E6%89%93%E5%8D%B0%E7%94%B5%E5%AD%90%E9%9D%A2%E5%8D%95/ 打 ...
- java 查询快递_调用快递100查询快递信息
[java]代码库/** * 根据快递单号查询数据信息 * @param kuaidiNo * @return */ public static String getExpressInfo(Strin ...
- 【快递100】快递时效接口获取快递预计到达时间
需求分析 目前公司上线了快递100的推送接口,现在需要做一个快递预计到达时间接口. 该接口主要是为了对签收和仓库人员进行月末考核,比如某个快递15号就签收,但是20号才入库,这属于失职,应当被处罚. ...
- 快递100和快递鸟接口限制
2019独角兽企业重金招聘Python工程师标准>>> 快递100企业接口和免费接口的区别: 1.免费接口,每天有2000次的访问限制,相对稳定 2.企业接口没有访问限制,但是需要收 ...
- 快递100开放快递查询接口
http://www.kuaidi100.com/query?type=快递运营商名&postid=快递单号 type支持的快递公司及参数说明:https://cdn.kuaidi100.co ...
- 模拟快递100请求 通过快递单号获取物流信息
需求:只提供快递单号获取物流信息 思路:通过快递100获取 实现:快递100有2个接口,可以模拟请求操作. 1.通过快递单号获取快递公司代码. 2.通过快递公司代码和快递单号获取物流信息. 3.返回的 ...
- 快递100企业版接口(API)云打印、电子面单实现Java版
当当当,重点来了,这是个搞好了可以让老板心甘情愿给你加薪至少10%的项目. 先看看痛点: 商城订单系统和发货系统是分离的,数据流无法打通.如果用户咨询,需要N多客服支持. 客服系统和订单系统也是分离的 ...
- 快递100接口对接总结
免费版; (1)当天最多调用2000次; (2)仅支持在线查询: (3)仅支持200家,不支持国际. 企业版: (1)次数无限制: (2)支持主动推送.智能快递归属分析.实时查询: (3)支持快递公司 ...
- 物流一站式查询之快递100篇
连载篇提前看 物流一站式查询之TrackingMore篇 物流一站式查询之顺丰接口篇 物流一站式查询之快递100 前言 前两篇我们已经讲了TrackingMore和顺丰接口的场景应用和对接示例,本篇, ...
最新文章
- webAPP优化方案总结
- 第10章 指针(二) 首地址----------指针
- 教学案例 计算机,宁夏计算机教学案例
- android studio创建文件,如何在Android Studio中创建File Templates
- 图灵奖得主Jeff Ullman:机器学习不是数据科学的全部!统计学也不是!
- Mac重复文件清理软件—Cisdem Duplicate Finder for mac
- ios8改变statusBar字体的显示颜色
- redis于spring整合之RedisTemplate
- 国内的Android SDK镜像
- applyTo、renderTo 区别
- 测试数据生成工具datafaker
- QT学习之QQ聊天案例
- 解决Proteus中的[SPICE] * stepping time与[SPICE] TRAN Timestep too small错误
- python实训报告怎么写_python实验报告
- 清除新版Google Chrome浏览器中表单控件(input,button...)默认的黑色边框
- 这可能是全网Java学习路线最完整,最详细的版本了,没有之一
- 反汇编入门试手 简单程序
- AD练习笔记 USB-TTL转换器
- Linux命令之vmstat命令
- 学习成绩 =90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。(C语言版)