鱼C论坛

 找回密码
 立即注册
查看: 2932|回复: 0

[原创] PyQt 第二弹 - 快速找工作程序

[复制链接]
发表于 2016-9-22 23:47:08 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
QQ截图20160922233617.jpg
QQ截图20160922233650.jpg
前两天,我用QT写了个基于有道的词典,由于才刚接触QT,所以写得很烂,在改进的同时,我又开始了另外一个实验,本次实验为:通过爬虫抓取招聘信息,并通过UI呈现出来,爬取深度为:一个页面,目前已实现大部分功能,剩下超链接部分未完工,大家有兴趣的可以自行研发!

爬虫部分源代码如下:
  1. __author__ = 'NarutoLee'
  2. #coding: utf-8
  3. import requests,time,urllib
  4. from bs4 import BeautifulSoup
  5. def request(job,aeca,flog):
  6.     title = urllib.parse.quote('工作')
  7.     q = urllib.parse.quote(job)
  8.     l = urllib.parse.quote(aeca)
  9.     url = 'http://cn.indeed.com/%s?q=%s&l=%s' % (title, q, l)
  10.     url2 = 'http://cn.indeed.com/%s?q=%s&l=%s&%s' % (title,q,l,'sort=date')
  11.     headers = {
  12.          'Accept': '*/*',
  13.         'Connection':'keep-alive',
  14.         'Host':'cn.indeed.com',
  15.         'Origin':'http://cn.indeed.com',
  16.         'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36'
  17.     }

  18.     data = {
  19.         'q':q,
  20.         'l':l,
  21.     }
  22.     session = requests.session()
  23.     if flog == 'No':
  24.         get_job = session.get(url2,data=data,headers=headers)
  25.     elif flog == 'OFF':
  26.         get_job = session.get(url, data=data, headers=headers)
  27.     soup = BeautifulSoup(get_job.text,'lxml')
  28.     gangwei = []
  29.     gongsi = []
  30.     dizi = []
  31.     xinxi = []
  32.     fabu = []
  33.     laiyuan = []
  34.     laiyuan2 =[]
  35.     for i in soup.select('.row'):
  36.         if i.select('.jobtitle') != []:
  37.             #print('招聘岗位:'+ i.select('.jobtitle')[0].text.strip('\n'))
  38.             gangwei.append(i.select('.jobtitle')[0].text.strip('\n'))
  39.         if i.select('.company') != []:
  40.             #print('公司名称:'+ i.select('.company')[0].text.strip())
  41.             gongsi.append(i.select('.company')[0].text.strip())
  42.         if i.select('.location') != []:
  43.            # print('地址:'+ i.select('.location')[0].text.strip('\n'))
  44.             dizi.append(i.select('.location')[0].text.strip('\n'))
  45.        # print(i.select('.summary')[0].text.strip('\n'))
  46.         xinxi.append(i.select('.summary')[0].text.strip('\n'))
  47.         if i.select('.date') != []:
  48.           #  print('发布日期:'+ i.select('.date')[0].text.strip('\n'))
  49.             fabu.append(i.select('.date')[0].text.strip('\n'))
  50.         if i.select('.sdn') != []:
  51.           #  print('信息来源:'+ i.select('.sdn')[0].text.strip('\n'))
  52.             laiyuan.append(i.select('.sdn')[0].text.strip('\n'))
  53.         if i.select('.result-link-source') != []:
  54.          #   print('信息来自:'+ i.select('.result-link-source')[0].text.strip('\n'))
  55.             laiyuan2.append(i.select('.result-link-source')[0].text.strip('\n'))


  56.     return gangwei,gongsi,dizi,xinxi,fabu,laiyuan,laiyuan2
  57. #request('Java','广州')
复制代码


GUI部分代码:
  1. # -*- coding: utf-8 -*-
  2. from PyQt5 import QtCore, QtGui, QtWidgets
  3. from sackpys import *
  4. import sys
  5. from PyQt5.QtWidgets import QApplication,QMainWindow,QTableWidgetItem,QHeaderView
  6. class Ui_MainWindow(object):
  7.     def setupUi(self, MainWindow):
  8.         MainWindow.setObjectName("MainWindow")
  9.         MainWindow.resize(1110, 856)
  10.         self.centralwidget = QtWidgets.QWidget(MainWindow)
  11.         self.centralwidget.setObjectName("centralwidget")
  12.         self.label = QtWidgets.QLabel(self.centralwidget)
  13.         self.label.setGeometry(QtCore.QRect(10, 0, 860, 41))
  14.         font = QtGui.QFont()
  15.         font.setFamily("黑体")
  16.         font.setPointSize(12)
  17.         self.label.setFont(font)
  18.         self.label.setObjectName("label")
  19.         self.lineEdit = QtWidgets.QLineEdit(self.centralwidget)
  20.         self.lineEdit.setGeometry(QtCore.QRect(210, 40, 211, 41))
  21.         self.lineEdit.setObjectName("lineEdit")
  22.         self.label_2 = QtWidgets.QLabel(self.centralwidget)
  23.         self.label_2.setGeometry(QtCore.QRect(20, 50, 201, 16))
  24.         self.label_2.setObjectName("label_2")
  25.         self.label_3 = QtWidgets.QLabel(self.centralwidget)
  26.         self.label_3.setGeometry(QtCore.QRect(430, 50, 121, 16))
  27.         self.label_3.setObjectName("label_3")
  28.         self.lineEdit_2 = QtWidgets.QLineEdit(self.centralwidget)
  29.         self.lineEdit_2.setGeometry(QtCore.QRect(550, 40, 211, 41))
  30.         self.lineEdit_2.setObjectName("lineEdit_2")
  31.         self.label_4 = QtWidgets.QLabel(self.centralwidget)
  32.         self.label_4.setGeometry(QtCore.QRect(770, 50, 71, 16))
  33.         self.label_4.setObjectName("label_4")
  34.         self.checkBox = QtWidgets.QCheckBox(self.centralwidget)
  35.         self.checkBox.setGeometry(QtCore.QRect(850, 40, 151, 19))
  36.         self.checkBox.setObjectName("checkBox")
  37.         self.checkBox_2 = QtWidgets.QCheckBox(self.centralwidget)
  38.         self.checkBox_2.setGeometry(QtCore.QRect(850, 60, 151, 19))
  39.         self.checkBox_2.setObjectName("checkBox_2")
  40.         self.pushButton = QtWidgets.QPushButton(self.centralwidget)
  41.         self.pushButton.setGeometry(QtCore.QRect(1000, 40, 93, 41))
  42.         self.pushButton.setObjectName("pushButton")
  43.         self.tableWidget = QtWidgets.QTableWidget(self.centralwidget)
  44.         self.tableWidget.setGeometry(QtCore.QRect(5, 101, 1101, 731))
  45.         self.tableWidget.setObjectName("tableWidget")
  46.         self.tableWidget.setColumnCount(6)
  47.         self.tableWidget.setRowCount(0)
  48.         item = QtWidgets.QTableWidgetItem()
  49.         self.tableWidget.setHorizontalHeaderItem(0, item)
  50.         item = QtWidgets.QTableWidgetItem()
  51.         self.tableWidget.setHorizontalHeaderItem(1, item)
  52.         item = QtWidgets.QTableWidgetItem()
  53.         self.tableWidget.setHorizontalHeaderItem(2, item)
  54.         item = QtWidgets.QTableWidgetItem()
  55.         self.tableWidget.setHorizontalHeaderItem(3, item)
  56.         item = QtWidgets.QTableWidgetItem()
  57.         self.tableWidget.setHorizontalHeaderItem(4, item)
  58.         item = QtWidgets.QTableWidgetItem()
  59.         self.tableWidget.setHorizontalHeaderItem(5, item)
  60.         self.label_5 = QtWidgets.QLabel(self.centralwidget)
  61.         self.label_5.setGeometry(QtCore.QRect(540, 790, 71, 21))
  62.         self.label_5.setObjectName("label_5")
  63.         MainWindow.setCentralWidget(self.centralwidget)
  64.         self.menubar = QtWidgets.QMenuBar(MainWindow)
  65.         self.menubar.setGeometry(QtCore.QRect(0, 0, 1110, 23))
  66.         self.menubar.setObjectName("menubar")
  67.         MainWindow.setMenuBar(self.menubar)
  68.         self.statusbar = QtWidgets.QStatusBar(MainWindow)
  69.         self.statusbar.setObjectName("statusbar")
  70.         MainWindow.setStatusBar(self.statusbar)
  71.         self.tableWidget.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)

  72.         self.retranslateUi(MainWindow)
  73.         QtCore.QMetaObject.connectSlotsByName(MainWindow)

  74.     def retranslateUi(self, MainWindow):
  75.         _translate = QtCore.QCoreApplication.translate
  76.         MainWindow.setWindowTitle(_translate("MainWindow", "EasyJob - 您身边的求职专家"))
  77.         self.label.setText(_translate("MainWindow", "欢迎使用EasyJob快速找工作程序,使用高级搜寻功能请勾上其中一个复选框,否则将默认按日期排序,最后祝您好运!"))
  78.         self.label_2.setText(_translate("MainWindow", "请输入要查询的职位关键字:"))
  79.         self.label_3.setText(_translate("MainWindow", "请输入工作区域:"))
  80.         self.label_4.setText(_translate("MainWindow", "高级搜寻:"))
  81.         self.checkBox.setText(_translate("MainWindow", "根据相关信息搜寻"))
  82.         self.checkBox_2.setText(_translate("MainWindow", "根据最新日期搜寻"))
  83.         self.pushButton.setText(_translate("MainWindow", "搜寻"))
  84.         item = self.tableWidget.horizontalHeaderItem(0)
  85.         item.setText(_translate("MainWindow", "招聘岗位"))
  86.         item = self.tableWidget.horizontalHeaderItem(1)
  87.         item.setText(_translate("MainWindow", "公司名称"))
  88.         item = self.tableWidget.horizontalHeaderItem(2)
  89.         item.setText(_translate("MainWindow", "所在地"))
  90.         item = self.tableWidget.horizontalHeaderItem(3)
  91.         item.setText(_translate("MainWindow", "招聘需求"))
  92.         item = self.tableWidget.horizontalHeaderItem(4)
  93.         item.setText(_translate("MainWindow", "发布日期"))
  94.         item = self.tableWidget.horizontalHeaderItem(5)
  95.         item.setText(_translate("MainWindow", "信息来源"))
  96.         self.label_5.setText(_translate("MainWindow", "By:NarutoLee"))
  97.         self.pushButton.clicked.connect(self.result)

  98.     def result(self):
  99.         for i in reversed(range(self.tableWidget.rowCount())):
  100.             self.tableWidget.removeRow(i)
  101.         self.job = self.lineEdit.text()
  102.         self.acea = self.lineEdit_2.text()
  103.         if self.checkBox_2.isChecked():
  104.             self.result = 'No'
  105.         else:
  106.             self.result = 'OFF'
  107.         self.get_reques = request(self.job, self.acea,self.result)
  108.         gangwei, gongsi, dizi, xinxi, fabu, laiyuan, laiyuan2 = self.get_reques
  109.         laiyuan_lis = laiyuan + laiyuan2

  110.         # self.tableWidget.setRowCount(len(gangwei))
  111.         tem = len(gangwei)
  112.         for (ls1,ls2,ls3,ls4,ls5,ls6) in zip(gangwei,gongsi,dizi,xinxi,fabu,laiyuan_lis):
  113.                 self.tableWidget.insertRow(0)
  114.                 self.tableWidget.setItem(0, 0, QTableWidgetItem(ls1))
  115.                 self.tableWidget.setItem(0, 1, QTableWidgetItem(ls2))
  116.                 self.tableWidget.setItem(0, 2, QTableWidgetItem(ls3))
  117.                 self.tableWidget.setItem(0, 3, QTableWidgetItem(ls4))
  118.                 self.tableWidget.setItem(0, 4, QTableWidgetItem(ls5))
  119.                 self.tableWidget.setItem(0, 5, QTableWidgetItem(ls6))
  120.                 tem -=1
  121.         MainWindow.setStatusTip('信息加载完毕!')
  122. if __name__ == '__main__':
  123.     app = QApplication(sys.argv)
  124.     MainWindow = QMainWindow()
  125.     ui = Ui_MainWindow()
  126.     ui.setupUi(MainWindow)
  127.     MainWindow.show()
  128.     sys.exit(app.exec_())

复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-14 19:42

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表