Python简单实现爬取快递物流实时信息!到了及时提醒!

爬取思路:

前两天有网友让我帮忙做一个通过快递100这个网站查快递物流信息的爬虫。研究了一下,发现实现起来不是很复杂,在此整理成文档并share给大家。
爬取思路:输入运单号后从服务器获取快递公司对应的ID号,然后拼接出新的请求地址来获取相关信息。

代码分解:

class KuaiDi100():
    def __init__(self):
        self.comCode = ""
        self.temp = ""
        self.url = r"https://www.kuaidi100.com/autonumber/autoComNum?"
        self.headers = {
            'Origin': 'https://www.kuaidi100.com',
            'Referer': 'https://www.kuaidi100.com/?from=openv',
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.182 Safari/537.36',
            'X-Requested-With': 'XMLHttpRequest'
        }
1234567891011

新建KuaiDi100类,初始类方法创建comCode和temp两个变量。comCode用来接收服务器返回的快递公司id,temp在请求物流信息时会用到。
headers里需要把’X-Requested-With’: 'XMLHttpRequest’加上。

def GetInfo(self, num):
        self.num = num
        self.form_data = {
            'text': self.num
        }
        ret = requests.post(self.url, headers=self.headers, data=self.form_data)
        find_com = (ret.text.split(",")[2])
        self.comCode = find_com[find_com.find('comCode') + 10:-1]
        self.temp = random.random()
        self.kuaidi_url = 'https://www.kuaidi100.com/query?type={0}&postid={1}&temp={2}&phone='.format(self.comCode, self.num, str(self.temp))
        ret1 = requests.get(self.kuaidi_url, headers=self.headers)
        print(ret1.text)
123456789101112

再创建GetInfo方法用来执行爬虫程序,num传参用来接收快递单号。
用post请求来获取快递公司ID,返回一个字典类型的字符串。提取comCode的方法可能有些不专业,如果大家有更优雅的方法记得告诉我 。
获取temp值这块花了点时间。我查看了JQuery代码,看到math.random()时我有些吃不太准。最后推测是和comCode有关,所以就用random库山寨了一个,结果还真的成功了……
返回的也是字典类型的字符串。不知道大家会怎么提出数据,我是用正则匹配,不知道有没有更好的方法?

if __name__ == '__main__':
    num = str(input("请输入运单号:"))
    kd = KuaiDi100()
    kd.GetInfo(num)
1234

为了单独使用方便,做了个“if __name__ == ‘__main__’”。
结束。

完整代码:

import requests
import random

class KuaiDi100():
    def __init__(self):
        self.comCode = ""
        self.temp = ""
        self.url = r"https://www.kuaidi100.com/autonumber/autoComNum?"
        self.headers = {
            'Origin': 'https://www.kuaidi100.com',
            'Referer': 'https://www.kuaidi100.com/?from=openv',
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.182 Safari/537.36',
            'X-Requested-With': 'XMLHttpRequest'
        }



    def GetInfo(self, num):
        self.num = num
        self.form_data = {
            'text': self.num
        }
        ret = requests.post(self.url, headers=self.headers, data=self.form_data)
        find_com = (ret.text.split(",")[2])
        self.comCode = find_com[find_com.find('comCode') + 10:-1]
        self.temp = random.random()
        self.kuaidi_url = 'https://www.kuaidi100.com/query?type={0}&postid={1}&temp={2}&phone='.format(self.comCode, self.num, str(self.temp))
        ret1 = requests.get(self.kuaidi_url, headers=self.headers)
        print(ret1.text)


if __name__ == '__main__':
    num = str(input("请输入运单号:"))
    kd = KuaiDi100()
    kd.GetInfo(num)
1234567891011121314151617181920212223242526272829303132333435

基于上述代码,大家后续可以继续优化。比如加个代理池什么的,或者做一些快递单号返回值的判断,用多线程来提高一下效率等等。
本人非码农专业,自学python也没多久,有不对的地方或者有好的建议还请各位前辈耐心指教,谢谢。

近期有很多朋友通过私信咨询有关Python学习问题。为便于交流,点击蓝色自己加入讨论解答资源基地

 

  • 0
    点赞
  • 1
    收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:数字50 设计师:CSDN官方博客 返回首页
评论

打赏作者

爬遍天下无敌手

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值