python pyqt,爬后台数据

来源:互联网 发布:板式换热器选型软件 编辑:程序博客网 时间:2024/05/19 23:54

最近测试时,很多时候要查后台某个用户的ID或者注册邮箱,总是需要登录到后台然后输入用户的名字进行查询,后台网页登录又特别卡或者慢,于是想着自己写一个

先看后台的网页样子 如图
这里写图片描述

上面图片可以看出,登录后 输入查询的ID 点击检索就可以进行查询 然后会展示上图的内容,我要得到各种信息,只要模拟这一系列的操作就可以获取到这个网页内容,然后爬出我想要的数据就可以了。

思路:首先要模拟登录 (发送一个post 请求),然后搜索(get请求),然后提取数据
checkLogin.py

#!/usr/bin/env python# coding=utf-8import urllibimport urllib2import cookielibimport recookie = cookielib.MozillaCookieJar()opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie))def send_post(url, data, send_headers):    post_data = urllib.urlencode(data)    # 提交,发送数据    req = urllib2.Request(url, data=post_data, headers=send_headers)    # 获取提交后返回的信息    content = opener.open(req)    return contentdef start_login(url):    login_data = {        'account': 'maple',        'password': 'xxxxxxx',        'opentab': '',        'lang_type': 'zh'    }    login_headers = {    'Authorization':'BasicaGVsbG90YWxrX3JlZG1pbmU6eWlrZUA0MTY=',        'Host': 'xxxx.xxxx.xxx',        'Content-Type': 'application/x-www-form-urlencoded',        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36',        'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',        'Connection': 'keep-alive',        'Origin':'http://xxxxx.xxxxx.xxx',        'Referer':'http://station3.hellotalk.org/htmall/Public/login/',        'Content-Length':'54'    }    send_post(url, login_data, login_headers)def checkMessage(showuser,urls):    check_headers = {        'Authorization': 'Basic aGVsbG90YWxrX3JlZG1pbmU6eWlrZUA0MTY=',        'Host': '120.25.239.138:18097',        'Host': 'station3.hellotalk.org',        'Referer':'http://xxx.xxxx.xxxxx/htmall/',        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36',        'Accept': '*/*',        'Connection': 'keep-alive'    }    url='http://'+urls+'/htmall/userlist/index/?search_cmd=&showuser='+showuser+'&_=1490600332144'    return send_post(url,'',check_headers).read()def getUserID(results):    rule = 'class="USERID">(.*?)</span>'    return extract_string(results,rule)def getEmail(results):    rule = 'class="EMAIL">(.*?)</span>'    return extract_string(results,rule)def getID(results):    rule = 'class="USERNAME">(.*?)</span>'    return extract_string(results,rule)def getNickName(results):    rule = 'class="NICKNAME">(.*?)</span>'    return extract_string(results,rule)def extract_string(results, Rules):    Pattern = re.compile(Rules)    arrary = Pattern.findall(results)    if len(arrary)==0:        return '未找到数据'    else:        return arrary[0]def start(user,test):    if test == 1:        urls = 'xxxx.xxxx.xxx' #测试服务器    else:        urls = 'xxxxx.xxxxx.xxxxx' #正式服务器    url = 'http://'+urls+'/htmall/Public/checkLogin/'    start_login(url)    results = checkMessage(user,urls)    return 'JID:'+getUserID(results)+'\n'+'ID:'+getID(results)+'\n'+'邮箱:'+getEmail(results)+'\n'+'呢称:'+getNickName(results)

UI界面设计
mainwindow.py

# -*- coding: utf-8 -*-from PyQt5 import QtCore, QtGui, QtWidgetsclass Ui_MainWindow(object):    def setupUi(self, MainWindow):        MainWindow.setObjectName("MainWindow")        MainWindow.resize(368, 310)        self.centralWidget = QtWidgets.QWidget(MainWindow)        self.centralWidget.setObjectName("centralWidget")        self.pushButton = QtWidgets.QPushButton(self.centralWidget)        self.pushButton.setGeometry(QtCore.QRect(230, 60, 113, 32))        self.pushButton.setObjectName("pushButton")        self.textEdit = QtWidgets.QTextEdit(self.centralWidget)        self.textEdit.setGeometry(QtCore.QRect(20, 60, 191, 31))        self.textEdit.setObjectName("textEdit")        self.textEdit_2 = QtWidgets.QTextEdit(self.centralWidget)        self.textEdit_2.setGeometry(QtCore.QRect(20, 131, 321, 161))        self.textEdit_2.setObjectName("textEdit_2")        self.menuBar = QtWidgets.QMenuBar(MainWindow)        self.menuBar.setGeometry(QtCore.QRect(0, 0, 472, 22))        self.menuBar.setObjectName("menuBar")        self.label = QtWidgets.QLabel(self.centralWidget)        self.label.setGeometry(QtCore.QRect(20, 40, 131, 16))        self.label.setObjectName("label")        self.label_2 = QtWidgets.QLabel(self.centralWidget)        self.label_2.setGeometry(QtCore.QRect(20, 110, 59, 16))        self.label_2.setObjectName("label_2")        self.checkBox = QtWidgets.QCheckBox(self.centralWidget)        self.checkBox.setGeometry(QtCore.QRect(20, 10, 86, 20))        self.checkBox.setCheckable(True)        self.checkBox.setChecked(True)        self.checkBox.setObjectName("checkBox")        self.mainToolBar = QtWidgets.QToolBar(MainWindow)        self.mainToolBar.setObjectName("mainToolBar")        self.statusBar = QtWidgets.QStatusBar(MainWindow)        self.statusBar.setObjectName("statusBar")        self.retranslateUi(MainWindow)        QtCore.QMetaObject.connectSlotsByName(MainWindow)    def retranslateUi(self, MainWindow):        _translate = QtCore.QCoreApplication.translate        MainWindow.setWindowTitle(_translate("MainWindow", "查看"))        self.pushButton.setText(_translate("MainWindow", "搜索"))        self.label.setText(_translate("MainWindow", "<html><head/><body><p>请输入查询ID或者JID</p></body></html>"))        self.label_2.setText(_translate("MainWindow", "<html><head/><body><p>搜索结果:</p></body></html>"))        self.checkBox.setText(_translate("MainWindow", "正式服务器"))

启动页
ui.py

#!/usr/bin/env python# coding=utf-8import sysimport checkLoginfrom PyQt5 import QtWidgetsfrom mainwindow import Ui_MainWindowclass mywindow (QtWidgets.QWidget, Ui_MainWindow):    def __init__ (self):        super (mywindow, self).__init__ ()        self.setupUi (self)        self.pushButton.clicked.connect (self.f)    def f(self):        text = self.textEdit.toPlainText()        self.ch(text, self.textEdit_2)    def ch(self, text, g):        if not text == '':            if self.checkBox.isChecked():                su = 0            else:                su = 1            t = checkLogin.start(text,su)            g.setText(t)        else:            g.setText('输入为空')if __name__ == "__main__":    app = QtWidgets.QApplication (sys.argv)    myshow = mywindow ()    myshow.show ()    sys.exit (app.exec_ ())

效果图
这里写图片描述

0 0