我们都知道GUI界面设计不是python的强项,但作为万金油编程语言,python也并不是不支持GUI开发。
00 目标提出
设计一个支持多个招聘网站的检索,可以通过指定目标城市、检索职业和查询数量,个性化输出检索结果,尔后将结果显示在界面并保存于文档中。
01 基本思路
02 核心代码
class JobCrawler:
def __init__(self, city, jobName, page):
self.city = city
self.jobName = jobName
self.page = page
def get_jobs_51job(self):
citys = {'北京': '010000', }
try :
cityID = citys[self.city]
except:
cityID = "000000"
url = "https://search.51job.com/list/{},000000,0000,00,9,99,{},2,{}.html".format(cityID, self.jobName, str(self.page))
response = requests.get(url, headers = HEADERS)
html = etree.HTML(response.text)
contents = html.xpath("//div[@class='dw_table']/div[@class='el']")
jobs = []
for content in contents:
try:
# 逐字段解析
jobs.append(job)
except:
pass
return jobs
def get_jobs_zhilian(self):
url = "https://fe-api.zhaopin.com/c/i/sou?"
params = {"start":(self.page-1)*50, "cityId":self.city, "kt":3, "kw":self.jobName, "pageSize":50}
response = requests.get(url = url, headers = HEADERS, params = params)
dic_results = json.loads(response.text)
results = dic_results['data']['results']
jobs = []
for result in results:
try:
#逐字段解析
jobs.append(job)
except:
pass
return jobs
def get_jobs_liepin(self):
citys = {'北京': 'city-bj/', }
try :
cityID = citys[self.city]
except:
cityID = ""
url = "https://www.liepin.com/{0}zhaopin/pn{2}/?key={1}&pageSize=50".format(cityID, self.jobName, str(self.page-1))
response = requests.get(url, headers = HEADERS)
html = etree.HTML(response.text)
joblist = html.xpath('//ul[@data-selector="result-list"]/li')
jobs=[]
for job in joblist:
try:
#逐字段解析
jobs.append(jobinfo)
except:
pass
return jobs
class JobHelper(object):
def __init__(self):
qfile_jh = QFile("ui/jobhelper.ui")
qfile_jh.open(QFile.ReadOnly)
qfile_jh.close()
self.ui = QUiLoader().load(qfile_jh)
self.ui.plainTextEdit.setReadOnly(True)
self.ui.pushButton_search.clicked.connect(self.search)
self.ui.pushButton_clear.clicked.connect(self.clearJobs)
def search(self):
Web = self.ui.comboBox_PT.currentText()
if self.ui.radioButton_select.isChecked():##常用城市列表
city = self.ui.comboBox_citys.currentText()
elif self.ui.radioButton_enter.isChecked():##手动输入城市
city = self.ui.lineEdit_cityInput.text()
if not city.strip():
QMessageBox.about(self.ui,'Warning',"请输入城市")
return
else :
try:
with open("ui/location.txt","r") as f:
citys = f.read()
citys = citys.split("\n")
if city not in citys:
QMessageBox.about(self.ui,'Warning',"输入城市可能有误…")
return
except:
QMessageBox.about(self.ui,'Warning',"读取城市列表失败")
return
else:##未做任何选择
QMessageBox.about(self.ui,'Warning',"请选择城市")
return
#读取待查询职业
jobName = self.ui.lineEdit_jobName.text()
if not jobName.strip():
QMessageBox.about(self.ui,'Warning',"请输入待查询职业")
return
return
###循环调用爬虫,并显示输出和文件保存
def clearJobs(self):
self.ui.plainTextEdit.setPlainText("")
return
def mylen(s):
mylen = len(s)
for c in s: # 判断字符串内汉字的数量,有一个汉字增加一个长度
if u'\u4e00' <= c <= u'\u9fa5':
mylen += 1
return mylen
def setstr(s, length):
if mylen(s) <= length:
return s + ' ' * (length - mylen(s))
else:
for index in range(int(length / 2) - 4, length - 3):
ss = s[0:index]
if mylen(ss) >= length - 3:
break
return ss + "." * (length - mylen(ss))
03 运行情况
启动界面
检索结果示例
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有