美文网首页Python案例分享
Python制作快递查询工具

Python制作快递查询工具

作者: ju7ran | 来源:发表于2019-04-29 13:57 被阅读63次

    使用的模块

    requests
    PyQt5
    Python自带模块
    

    Python版本:3.6.4

    原理

    爬取快递100,https://www.kuaidi100.com/,爬取快递信息很简单,只需要根据快递单号获得其可能所属的快递公司,然后分别获取这些快递公司该快递单号的数据即可。

    image.png

    可以看出来第一次请求,根据单号查询快递公司,而且返回的是拼音。例如图中是中通快递,返回的是zhongtong
    第二次是根据快递公司,快递单号去请求的。返回的是物流信息。

    代码实现第一次请求

    '''利用快递100查询快递'''
    def getExpressInfo(number):
        url = 'http://www.kuaidi100.com/autonumber/autoComNum?resultv2=1&text=%s' % number
        infos = []
        for each in requests.get(url).json()['auto']:
            company_name = each['comCode']
    

    代码实现第二次请求

    url = 'http://www.kuaidi100.com/query?type=%s&postid=%s' % (company_name, number)
            temps = requests.get(url).json()['data']
            info = '公司: %s\n' % py2hz(company_name)
            for idx, each in enumerate(temps):
                if idx == 0:
                    info += '-' * 60 + '\n时间:\n' + each['time'] + '\n进度:\n' + each['context'] + '\n' + '-' * 60 + '\n'
                else:
                    info += '时间:\n' + each['time'] + '\n进度:\n' + each['context'] + '\n' + '-' * 60 + '\n'
            if not temps:
                info += '-' * 60 + '\n' + '单号不存在或已过期\n' + '-' * 60 + '\n'
            infos.append(info)
    

    这里注意第一次请求和第二次请求应该写在一个方法里面。而且这里用到了一个方法。

    拼音转汉子

    companies = pickle.load(open('companies.pkl', 'rb'))
    def py2hz(py):
        return companies.get(py)
    

    最后可以用pyqt5搭建一个界面

    界面搭建

    class Demo(QWidget):
        def __init__(self, parent=None):
            super().__init__()
            self.setWindowTitle('快递查询系统')
            self.label1 = QLabel('快递单号:')
            self.line_edit = QLineEdit()
            self.label2 = QLabel('查询结果:')
            self.text = QTextEdit()
            self.button = QPushButton()
            self.button.setText('查询')
            self.grid = QGridLayout()
            self.grid.setSpacing(12)
            self.grid.addWidget(self.label1, 1, 0)
            self.grid.addWidget(self.line_edit, 1, 1, 1, 39)
            self.grid.addWidget(self.button, 1, 40)
            self.grid.addWidget(self.label2, 2, 0)
            self.grid.addWidget(self.text, 2, 1, 1, 40)
            self.setLayout(self.grid)
            self.resize(200, 400)
            self.button.clicked.connect(self.inquiry)
        def inquiry(self):
            number = self.line_edit.text()
            try:
                infos = getExpressInfo(number)
                if not infos:
                    infos = ['-' * 60 + '\n' + '单号不存在或已过期\n' + '-' * 60 + '\n']
            except:
                infos = ['-' * 60 + '\n' + '快递单号有误, 请重新输入.\n' + '-' * 60 + '\n']
            self.text.setText('\n\n\n'.join(infos)[:-1])
    
    if __name__ == '__main__':
        app = QApplication(sys.argv)
        demo = Demo()
        demo.show()
        sys.exit(app.exec_())
    

    相关文章

      网友评论

        本文标题:Python制作快递查询工具

        本文链接:https://www.haomeiwen.com/subject/iirynqtx.html