人力部需要做互联网金融行业的从业人员薪酬分析,起初说的是写脚本,然后他们自己改。但这样不太好,让人事部来修改py脚本不太好,这需要安装py环境和一些第三方包,万一脚本改来改去弄错了,就运行不起来了。

利用pyqt写界面,把要爬的企业填在界面上,点击一个按钮就爬虫,最后生成excel,这样比较方便。py2exe打包后就是客户端了,不依赖于python环境了。

需要安装得是这几个,PyQt是gui库,不用pip安装,下载个exe来安装。eric4 python ide,py2exe用来将py代码打包成exe客户端。

使用qt设计师,拖拽和添加ui控件

这样比较方便,比tkinter的生成控件简单很多。

点击文件-另存为会生成一个ui文件,然后将ui文件转化为py代码。

C:\Python27\Lib\site-packages\PyQt4\pyuic4.bat -o syui.py suoyouxiangmu.ui                
如果有环境变量直接pyuic4 -o syui.py suoyouxiangmu.ui就ok。
如果转换有问题,追加-d ,pyuic4 -o -d syui.py suoyouxiangmu.ui,可以显示出出错的原因,我这次就出错了,显示ascii cant decode xxx,去把pyqt库的那个文件加入个重新设置编码sys.setdeafualencoding就可以。
转换完成后,就多了一个syui.py这个文件。 导入syui.py这个文件
class EmittingStream(QObject):
textWritten = pyqtSignal(str)
def write(self, text):
self.textWritten.emit(str(text)) class MyWindow(QtGui.QMainWindow,Ui_MainWindow):
def __init__(self):
QtGui.QMainWindow.__init__(self)
self.setupUi(self)
sys.stdout = EmittingStream(textWritten=self.normalOutputWritten)
#sys.stderr = EmittingStream(textWritten=self.normalOutputWritten) ###注释后,错误将不抛出到控制台 def closeEvent(self, event):
pass
is_now_lagou_crawl = 0
# reply = QtGui.QMessageBox.question(self, u'警告!!!',
# u"你确定关闭窗口吗?", QtGui.QMessageBox.Yes |
# QtGui.QMessageBox.No, QtGui.QMessageBox.No)
# if reply == QtGui.QMessageBox.Yes:
# event.accept()
# else:
# event.ignore() def __del__(self):
sys.stdout = sys.__stdout__
sys.stderr = sys.__stderr__ def normalOutputWritten(self, text):
global stop_print
if stop_print==0:
if len(self.textEdit_2.toPlainText())>50000: ##我这里的textEdit_2就是右边那个黑色的控制台,把sys.stdout.write重定向到这里来,这样的话就像普通的编程一样,直接print在控制台就能显示出来了,不用在python ide和客户端来回切换看输出了。
self.textEdit_2.setPlainText('')
cursor = self.textEdit_2.textCursor()
cursor.movePosition(QtGui.QTextCursor.End)
cursor.insertText(text)
self.textEdit_2.setTextCursor(cursor)
self.textEdit_2.ensureCursorVisible()
app= QtGui.QApplication(sys.argv)
myWindow=MyWindow() myWindow.tabWidget.tabBar().hide() #隐藏标签栏 #设置icon
icon = QtGui.QIcon()
icon.addPixmap(QtGui.QPixmap("logo1.ico"),QtGui.QIcon.Normal, QtGui.QIcon.Off)
myWindow.setWindowIcon(icon) myWindow.setFixedSize(myWindow.width(), myWindow.height()) #设置窗口不允许拉伸
myWindow.show() 。。。。。。。。
sys.exit(app.exec_())

按钮来绑定一个函数的方法
myWindow.pushButton_18.clicked.connect(funcx)

按钮不可以直接绑定一个需要长时间运行的函数,比如funcx里面有一段代码是requests,如果对方网站能在0.2秒内返回结果还好,如果网站响应时间打,客户端会造成不响应ui在这期间卡死。长时间循环的也不能直接与按钮绑定。
可以绑定一个函数,函数里面开子线程来执行这些任务,就可以不卡了。 拉勾网爬虫需要用到的是 线程池 ip代理池。
不使用cookie请求几次后就会被判定为爬虫了,使用cookie后可以一直爬,这个cookie不需要是登录后的cookie才行,没登录的cookie也可以爬拉钩。但是给公司用,还是代理ip好,万一拉勾网找公司麻烦呢。 爬取界面

生成的excel文件


顺便统计了一下职位数量,因为爬的是网贷之家平台成交量排名前50的p2p网贷平台,比较具有代表性
北京529  成都72 广州137 杭州107 上海243 深圳256 长沙16 武汉4 重庆4 苏州2  石家庄3 东莞17 可以得出结论,北京的网贷平台显然最多,是it工作者最最适合去工作的城市。
其次是上海深圳。过100的还有广州和杭州。 除了北上深广杭,只有成都it还算凑合。其他城市则不适合it从业者,工作职位少是其一,工资普遍少了很多,例如武汉的同职位参考工资差不多就北京深圳的一半左右。

pyqt与拉勾网爬虫的结合的更多相关文章

  1. .Net实现拉勾网爬虫

    前几天看到一个.NET Core写成的爬虫,有些莫名的小兴奋,之前一直用集搜客去爬拉勾网的招聘信息,这个傻瓜化工具相当于用HTML模板页去标记DOM节点,然后在浏览器窗口上模拟人的浏览行为同时跟踪节点 ...

  2. 【Python3爬虫】拉勾网爬虫

    一.思路分析: 在之前写拉勾网的爬虫的时候,总是得到下面这个结果(真是头疼),当你看到下面这个结果的时候,也就意味着被反爬了,因为一些网站会有相应的反爬虫措施,例如很多网站会检测某一段时间某个IP的访 ...

  3. python3拉勾网爬虫之(您操作太频繁,请稍后访问)

    你是否经历过这个:那就对了~因为需要post和相关的cookie来请求~所以,一个简单的代码爬拉钩~~~

  4. scrapy抓取拉勾网职位信息(三)——爬虫rules内容编写

    在上篇中,分析了拉勾网需要跟进的页面url,本篇开始进行代码编写. 在编写代码前,需要对scrapy的数据流走向有一个大致的认识,如果不是很清楚的话建议先看下:scrapy数据流 本篇目标:让拉勾网爬 ...

  5. 拉勾网爬取全国python职位并数据分析薪资,工作经验,学历等信息

    首先前往拉勾网“爬虫”职位相关页面 确定网页的加载方式是JavaScript加载 通过谷歌浏览器开发者工具分析和寻找网页的真实请求,确定真实数据在position.Ajax开头的链接里,请求方式是PO ...

  6. (Pyhton爬虫03)爬虫初识

    原本的想法是这样的:博客整理知识学习的同时,也记录点心情...集中式学习就没这么多好记录的了! 要学习一门技术,首先要简单认识一下爬虫!其实可以参考爬虫第一章! 整体上介绍该技术包含技能,具体能做什么 ...

  7. 爬虫1.5-ajax数据爬取

    目录 爬虫-ajax数据爬取 1. ajax数据 2. selenium+chromedriver知识准备 3. selenium+chromedriver实战拉勾网爬虫代码 爬虫-ajax数据爬取 ...

  8. python就业班-淘宝-目录.txt

    卷 TOSHIBA EXT 的文件夹 PATH 列表卷序列号为 AE86-8E8DF:.│ python就业班-淘宝-目录.txt│ ├─01 网络编程│ ├─01-基本概念│ │ 01-网络通信概述 ...

  9. 「拉勾网」薪资调查的小爬虫,并将抓取结果保存到excel中

    学习Python也有一段时间了,各种理论知识大体上也算略知一二了,今天就进入实战演练:通过Python来编写一个拉勾网薪资调查的小爬虫. 第一步:分析网站的请求过程 我们在查看拉勾网上的招聘信息的时候 ...

随机推荐

  1. me909e-821 拨号流程

    第一次: at+cereg=1                                                                      OK              ...

  2. git实践:对比svn

    先前只用过svn,自然也没有去对比什么好坏,亲自上手之后发现svn和git实在是有很多不同 svn优点: 学习成本对比非常低 服务器公司统一控制管理 安全机制, 不会每个人都拷贝一份, 可以对组员限制 ...

  3. 修改Windows和linux系统时间

    1.修改本机Windows的系统时间,Java代码实现: import java.io.IOException; import java.text.SimpleDateFormat; import j ...

  4. htop VS top

    在 Linux 系统中,top 命令用来显示系统中正在运行的进程的实时状态,它显示了一些非常有用的信息,比如 CPU 利用情况.内存消耗情况,以及每个进程情况等.但是,你知道吗?还有另外一个命令行工具 ...

  5. 机器学习 demo分西瓜

    周老师的书,对神经网络写了一个小的Demo 是最简单的神经网络,只有一层的隐藏层. 这次练习依旧是对西瓜的好坏进行预测. 主要分了以下几个步骤 1.数据预处理 对西瓜的不同特性进行数学编码表示(0~1 ...

  6. 今日Q群:QQ群众群友反馈问题的归纳总结

    今日Q群:QQ群群友反馈问题的归纳总结     今天Q群里还算比较活跃,归纳总结后主要有以下几类问题: 一.如何在Excel中按指定规则对有颜色的单元格进行过滤删选 具体的解决办法,请参照今天发布微信 ...

  7. Linux命令_用户和用户组管理

    新增组的命令 groupadd 格式:groupadd [-g GID] groupname 如果不加-g选项,则按照系统默认的gid创建组.跟uid一样,gid也是从1000开始的. 我们也可以如下 ...

  8. 使用Maven清理项目

    在基于Maven的项目中,很多缓存输出在“target”文件夹中.如果想建立项目部署,必须确保清理所有缓存的输出,从面能够随时获得最新的部署. 要清理项目缓存的输出,发出以下命令: mvn clean ...

  9. Maven项目对象模型(POM)

    Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具. Maven 除了以程序构建能力为特色之外,还提供高级项目管理工具.由于 Maven 的缺省构建 ...

  10. repo sync出现“fatal: '../platform/abi/cpp.git' does not appear to be a git repository”的解决方案

    在我下载Android源代码时,在最后一步调用repo sync,出现“fatal: '../platform/abi/cpp.git' does not appear to be a git rep ...