zoukankan      html  css  js  c++  java
  • pyqt与拉勾网爬虫的结合

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

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

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

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

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

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

    C:Python27Libsite-packagesPyQt4pyuic4.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从业者,工作职位少是其一,工资普遍少了很多,例如武汉的同职位参考工资差不多就北京深圳的一半左右。

  • 相关阅读:
    JDK1.8中IndexedPropertyDescriptor的改变对BeanUtils的影响
    tomcat生成ssl证书并发布浏览器信任的https服务
    spring boot问题记录
    阿里云ecs服务器搭建以及polarDB使用说明
    关闭代理后,仍不能正常浏览或使用软件
    python基础-异常介绍
    python基础-中文编码
    python读取Excel,且存入列表中
    短信验证工作流程
    接口自动化测试框架HttpRunner使用案例
  • 原文地址:https://www.cnblogs.com/ydf0509/p/7649991.html
Copyright © 2011-2022 走看看