pyqt与拉勾网爬虫的结合
人力部需要做互联网金融行业的从业人员薪酬分析,起初说的是写脚本,然后他们自己改。但这样不太好,让人事部来修改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与拉勾网爬虫的结合的更多相关文章
- .Net实现拉勾网爬虫
前几天看到一个.NET Core写成的爬虫,有些莫名的小兴奋,之前一直用集搜客去爬拉勾网的招聘信息,这个傻瓜化工具相当于用HTML模板页去标记DOM节点,然后在浏览器窗口上模拟人的浏览行为同时跟踪节点 ...
- 【Python3爬虫】拉勾网爬虫
一.思路分析: 在之前写拉勾网的爬虫的时候,总是得到下面这个结果(真是头疼),当你看到下面这个结果的时候,也就意味着被反爬了,因为一些网站会有相应的反爬虫措施,例如很多网站会检测某一段时间某个IP的访 ...
- python3拉勾网爬虫之(您操作太频繁,请稍后访问)
你是否经历过这个:那就对了~因为需要post和相关的cookie来请求~所以,一个简单的代码爬拉钩~~~
- scrapy抓取拉勾网职位信息(三)——爬虫rules内容编写
在上篇中,分析了拉勾网需要跟进的页面url,本篇开始进行代码编写. 在编写代码前,需要对scrapy的数据流走向有一个大致的认识,如果不是很清楚的话建议先看下:scrapy数据流 本篇目标:让拉勾网爬 ...
- 拉勾网爬取全国python职位并数据分析薪资,工作经验,学历等信息
首先前往拉勾网“爬虫”职位相关页面 确定网页的加载方式是JavaScript加载 通过谷歌浏览器开发者工具分析和寻找网页的真实请求,确定真实数据在position.Ajax开头的链接里,请求方式是PO ...
- (Pyhton爬虫03)爬虫初识
原本的想法是这样的:博客整理知识学习的同时,也记录点心情...集中式学习就没这么多好记录的了! 要学习一门技术,首先要简单认识一下爬虫!其实可以参考爬虫第一章! 整体上介绍该技术包含技能,具体能做什么 ...
- 爬虫1.5-ajax数据爬取
目录 爬虫-ajax数据爬取 1. ajax数据 2. selenium+chromedriver知识准备 3. selenium+chromedriver实战拉勾网爬虫代码 爬虫-ajax数据爬取 ...
- python就业班-淘宝-目录.txt
卷 TOSHIBA EXT 的文件夹 PATH 列表卷序列号为 AE86-8E8DF:.│ python就业班-淘宝-目录.txt│ ├─01 网络编程│ ├─01-基本概念│ │ 01-网络通信概述 ...
- 「拉勾网」薪资调查的小爬虫,并将抓取结果保存到excel中
学习Python也有一段时间了,各种理论知识大体上也算略知一二了,今天就进入实战演练:通过Python来编写一个拉勾网薪资调查的小爬虫. 第一步:分析网站的请求过程 我们在查看拉勾网上的招聘信息的时候 ...
随机推荐
- 网页QQ弹出
<script language="javascript"> function cdyht(){ window.location.href='tencent://Mes ...
- 简单防范SYN_RECV攻击
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' 这条语句返回结果如下 TIME_WAIT FIN_WAIT1 ...
- 【程序练习】——ini格式转换为xml格式
;Configuration of http [http] doamin=www.mysite.com port= cgihome=/cgi-bin ;Configuration of db [d ...
- 一个从MongoDB中导出给定日期范围内数据的shell脚本
#!/bin/sh ver=`date "+%Y%m%d"` #d1, the beginning date, eg:2017-06-28 d1=$1 d1=`date -d $d ...
- Java设计模式(12)迭代模式(Iterator模式)
上了这么多年学,我发现一个问题,好象老师都很喜欢点名,甚至点名都成了某些老师的嗜好,一日不点名,就饭吃不香,觉睡不好似的,我就觉得很奇怪,你的课要是讲的好,同学又怎么会不来听课呢,殊不知:“误人子弟, ...
- 前端最全的 API 集锦
window.getComputedStyle(el,':after')[attrName]------------------------------------------------------ ...
- android适配pad和部分手机底部虚拟按键+沉浸式状态栏
在使用沉浸式状态栏设置界面全屏时发现pad和部分手机(华为和魅族系统自带)屏幕底部会带有虚拟按键,遮挡住界面本身的一部分. 为了设置隐藏,在网上找了一些方法,设置Activity主题再在布局加fits ...
- Sword STL之map效率问题
#include <iostream> #include <map> #include <vector> using namespace std; /* STL容器 ...
- github开源库(一)
http://www.open-open.com/lib/view/open1388317199516.html 1.ActionBarSherlock ActionBarSherlock应该算得上是 ...
- 通过用户名、密码提交的方式搭建私有git服务端
1. 系统环境 centos git yum -y install git 2).创建属于自己的git库 mkdir /myGit git init --bare xiangyun.git 3). 添 ...