【Python教程】用python写一个快递查询系统

所需工具:

Python

聪明的大脑

勤劳的双手

 

注意:本站只提供教程,不提供任何成品+工具+软件链接,仅限用于学习和研究。

 

导语

随着网购的广泛普及,现在大部分年轻人都喜欢上了网购的方式。

很多东西物美价廉,出不出户也能满足你的购买需求!

尤其是中秋来临,哪些假期短回不了家的也想给家人带点儿中秋礼物~

这不?赶上中秋了,之前给家里寄东西的时候就出现过几次,物流信息一直没更新,不清楚东西到哪儿了,问卖家:说有时候上面没更新,但是到你家楼下了会打电话让你取快递的~​

果然,emmmmmm,“打扰了!!”不知道你们遇到过没??

后来小编在一个专门全国查询快递的网站找到了物流信息23333,感觉这还是蛮实用的,至少快递也没丢撒!

今天带大家写一款有界面的专属快递物流查询小系统~再也不用担心自己的快递突然消失啦!

​​​

正文

环境安装:

安装包-python3、Pycharm2021、模块-requests、pyqt5。

  1. pip install requests
  2. pip install pyqt5 #当然镜像源更快安装,环境问题直接找我

(1)首先导入所有快递公司的信息,这是以快递100为例的哈,之前爬的数据。

  1. companies = pickle.load(open(‘companies.pkl’, ‘rb’))

(2)利用快递100查询快递。

%title插图%num

  1. def getExpressInfo(number):
  2. url = ‘http://www.kuaidi100.com/autonumber/autoComNum?resultv2=1&text=%s’ % number
  3. headers = {
  4. ‘User-Agent’: ‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36’,
  5. ‘Host’: ‘www.kuaidi100.com’
  6. }
  7. infos = []
  8. for each in requests.get(url, headers=headers).json()[‘auto’]:
  9. company_name = each[‘comCode’]
  10. url = ‘http://www.kuaidi100.com/query?type=%s&postid=%s’ % (company_name, number)
  11. temps = requests.get(url, headers=headers).json()[‘data’]
  12. info = ‘公司: %s\n’ % py2hz(company_name)
  13. for idx, each in enumerate(temps):
  14. if idx == 0:
  15. info += ‘-‘ * 60 + ‘\n时间:\n’ + each[‘time’] + ‘\n进度:\n’ + each[‘context’] + ‘\n’ + ‘-‘ * 60 + ‘\n’
  16. else:
  17. info += ‘时间:\n’ + each[‘time’] + ‘\n进度:\n’ + each[‘context’] + ‘\n’ + ‘-‘ * 60 + ‘\n’
  18. if not temps:
  19. info += ‘-‘ * 60 + ‘\n’ + ‘单号不存在或已过期\n’ + ‘-‘ * 60 + ‘\n’
  20. infos.append(info)
  21. return infos

(3)制作快递查询系统的界面。

  1. class ExpressGUI(QWidget):
  2. def __init__(self, parent=None):
  3. super(ExpressGUI, self).__init__(parent)
  4. self.setWindowTitle(‘快递查询系统’)
  5. self.label1 = QLabel(‘快递单号:’)
  6. self.line_edit = QLineEdit()
  7. self.label2 = QLabel(‘查询结果:’)
  8. self.text = QTextEdit()
  9. self.button = QPushButton()
  10. self.button.setText(‘查询’)
  11. self.grid = QGridLayout()
  12. self.grid.setSpacing(12)
  13. self.grid.addWidget(self.label1, 1, 0)
  14. self.grid.addWidget(self.line_edit, 1, 1, 1, 39)
  15. self.grid.addWidget(self.button, 1, 40)
  16. self.grid.addWidget(self.label2, 2, 0)
  17. self.grid.addWidget(self.text, 2, 1, 1, 40)
  18. self.setLayout(self.grid)
  19. self.resize(600, 400)
  20. self.button.clicked.connect(self.inquiry)
  21. def inquiry(self):
  22. number = self.line_edit.text()
  23. try:
  24. infos = getExpressInfo(number)
  25. if not infos:
  26. infos = [‘-‘ * 60 + ‘\n’ + ‘单号不存在或已过期\n’ + ‘-‘ * 60 + ‘\n’]
  27. except:
  28. infos = [‘-‘ * 60 + ‘\n’ + ‘快递单号有误, 请重新输入.\n’ + ‘-‘ * 60 + ‘\n’]
  29. self.text.setText(‘\n\n\n’.join(infos)[:-1])

效果如下:

%title插图%num

%title插图%num

​​附源码:

  1. ”’
  2. Function:
  3. 快递查询系统
  4. 源码基地:#959755565#
  5. ”’
  6. import sys
  7. import pickle
  8. import requests
  9. from PyQt5.QtWidgets import *
  10. ”’导入所有快递公司信息”’
  11. companies = pickle.load(open(‘companies.pkl’, ‘rb’))
  12. ”’将快递公司的拼音变为汉字”’
  13. def py2hz(py):
  14. return companies.get(py)
  15. ”’利用快递100查询快递”’
  16. def getExpressInfo(number):
  17. url = ‘http://www.kuaidi100.com/autonumber/autoComNum?resultv2=1&text=%s’ % number
  18. headers = {
  19. ‘User-Agent’: ‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36’,
  20. ‘Host’: ‘www.kuaidi100.com’
  21. }
  22. infos = []
  23. for each in requests.get(url, headers=headers).json()[‘auto’]:
  24. company_name = each[‘comCode’]
  25. url = ‘http://www.kuaidi100.com/query?type=%s&postid=%s’ % (company_name, number)
  26. temps = requests.get(url, headers=headers).json()[‘data’]
  27. info = ‘公司: %s\n’ % py2hz(company_name)
  28. for idx, each in enumerate(temps):
  29. if idx == 0:
  30. info += ‘-‘ * 60 + ‘\n时间:\n’ + each[‘time’] + ‘\n进度:\n’ + each[‘context’] + ‘\n’ + ‘-‘ * 60 + ‘\n’
  31. else:
  32. info += ‘时间:\n’ + each[‘time’] + ‘\n进度:\n’ + each[‘context’] + ‘\n’ + ‘-‘ * 60 + ‘\n’
  33. if not temps:
  34. info += ‘-‘ * 60 + ‘\n’ + ‘单号不存在或已过期\n’ + ‘-‘ * 60 + ‘\n’
  35. infos.append(info)
  36. return infos
  37. ”’制作简单的GUI”’
  38. class ExpressGUI(QWidget):
  39. def __init__(self, parent=None):
  40. super(ExpressGUI, self).__init__(parent)
  41. self.setWindowTitle(‘快递查询系统’)
  42. self.label1 = QLabel(‘快递单号:’)
  43. self.line_edit = QLineEdit()
  44. self.label2 = QLabel(‘查询结果:’)
  45. self.text = QTextEdit()
  46. self.button = QPushButton()
  47. self.button.setText(‘查询’)
  48. self.grid = QGridLayout()
  49. self.grid.setSpacing(12)
  50. self.grid.addWidget(self.label1, 1, 0)
  51. self.grid.addWidget(self.line_edit, 1, 1, 1, 39)
  52. self.grid.addWidget(self.button, 1, 40)
  53. self.grid.addWidget(self.label2, 2, 0)
  54. self.grid.addWidget(self.text, 2, 1, 1, 40)
  55. self.setLayout(self.grid)
  56. self.resize(600, 400)
  57. self.button.clicked.connect(self.inquiry)
  58. def inquiry(self):
  59. number = self.line_edit.text()
  60. try:
  61. infos = getExpressInfo(number)
  62. if not infos:
  63. infos = [‘-‘ * 60 + ‘\n’ + ‘单号不存在或已过期\n’ + ‘-‘ * 60 + ‘\n’]
  64. except:
  65. infos = [‘-‘ * 60 + ‘\n’ + ‘快递单号有误, 请重新输入.\n’ + ‘-‘ * 60 + ‘\n’]
  66. self.text.setText(‘\n\n\n’.join(infos)[:-1])
  67. ”’run”’
  68. if __name__ == ‘__main__’:
  69. app = QApplication(sys.argv)
  70. gui = ExpressGUI()
  71. gui.show()
  72. sys.exit(app.exec_())

标签

发表评论