人力部需要做互聯網金融行業的從業人員薪酬分析,起初說的是寫腳本,然后他們自己改。但這樣不太好,讓人事部來修改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從業者,工作職位少是其一,工資普遍少了很多,例如武漢的同職位參考工資差不多就北京深圳的一半左右。