zoukankan      html  css  js  c++  java
  • 爬虫小案例:快递一键查询

    通过https://www.kuaidi100.com/来获取数据

    # 快递一键查询:通过https://www.kuaidi100.com/来获取数据
    
    import requests,random
    from datetime import datetime
    
    flag = True
    
    # 返回时间属于周几
    def get_week_day(timestr):
        day = datetime.strptime(timestr, '%Y-%m-%d %H:%M:%S').weekday()
    
        week_day_dict = {
            0: '星期一',
            1: '星期二',
            2: '星期三',
            3: '星期四',
            4: '星期五',
            5: '星期六',
            6: '星期天',
        }
        return week_day_dict[day]
    
    # 查询快递公司
    def query_comCode(postid):
        url = 'https://www.kuaidi100.com/autonumber/autoComNum'
        headers = {
            "origin": "https://www.kuaidi100.com",
            "referer": "https://www.kuaidi100.com/",
            "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36 OPR/65.0.3467.78 (Edition Baidu)",
        }
        # 请求参数
        params = {
            'resultv2': '1',
            'text': postid
        }
        res = requests.get(url, params=params, headers=headers)
        result = False
        if res.status_code == 200:
            json_comCode = res.json()
            # print(json_comCode)
            if 'auto' in json_comCode:
                if len(json_comCode['auto']) <= 0:
                    print('快递公司识别错误!请检查快递单号是否输入正确!')
                else:
                    # print(json_comCode['auto'])
                    for comCode in json_comCode['auto']:
                        # print(comCode['comCode'])
                        # 查询快递进度
                        result = query_progress(comCode['comCode'], postid)
                        if result:
                            break
            else:
                print('遇到错误了:{}'.format(json_comCode))
    
        else:
            print('查询快递公司:拒绝访问!')
    
        return result
    
    # 查询快递进度
    def query_progress(type = '', postid = ''):
        url = "https://www.kuaidi100.com/query"
        headers = {
            "origin": "https://www.kuaidi100.com",
            "referer": "https://www.kuaidi100.com/",
            "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36 OPR/65.0.3467.78 (Edition Baidu)",
        }
        # 请求参数
        params = {
            'type': type,
            'postid': postid,
            # 'temp': '0.13014571059333613',
            'temp': str(random.random()),
            'phone': ''
        }
        res = requests.get(url, params=params, headers=headers)
        if res.status_code == 200:
            json_data = res.json()
            # print(json_data)
            if json_data['status'] != '200':
                return False
            else:
                # print(json_data['data'])
                return json_data['data']
        else:
            print('查询快递进度:拒绝访问!')
    
    # 打印查询记录
    def print_result(result):
        # 倒叙
        result.reverse()
    
        result2 = []
        pre_week_str = ""
        for item in result:
            # 获取时间点是周几
            cur_week_str = get_week_day(item['ftime'])
            if pre_week_str != cur_week_str:
                pre_week_str = cur_week_str
                show_week_str = pre_week_str
            else:
                show_week_str = ""
            # 增加周几提示
            result2.append('{}{}:{}'.format(item['ftime'], " " + show_week_str, item['context']))
    
        # 倒叙
        result2.reverse()
        for item in result2:
            print(item)
    
    def again():
        global flag
        inputtext = input('是否要继续查询(输入 n/N:退出程序)')
        if inputtext in ['n', 'N']:
            flag = False
    
    def main():
        # result = query_comCode('73119782411952')
        # result = query_comCode('1222')
        while flag:
            postid = input('请输入快递单号:')
            result = query_comCode(postid)
            if result:
                print_result(result)
            else:
                print('抱歉,暂无查询记录')
            again()
        print('感谢使用,程序已退出!')
    
    main()

  • 相关阅读:
    larbin结构分析
    《钱不要存银行》OneNote
    全局变量、extern/static/const区别与联系
    GIS网址,转自别处
    MSDN无法显示页面的解决
    人生没有奇迹
    开源GIS系统
    推荐:GDAL学习资源
    中国农科院资源区划所MODIS的遥感信息地面接收站
    泡沫产生的特点
  • 原文地址:https://www.cnblogs.com/KeenLeung/p/12171366.html
Copyright © 2011-2022 走看看