python pyqt,爬后台数据

    xiaoxiao2021-04-13  29

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

    先看后台的网页样子 如图

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

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

    #!/usr/bin/env python # coding=utf-8 import urllib import urllib2 import cookielib import re cookie = 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 content def 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, QtWidgets class 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-8 import sys import checkLogin from PyQt5 import QtWidgets from mainwindow import Ui_MainWindow class 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_ ())

    效果图

    转载请注明原文地址: https://ju.6miu.com/read-668611.html

    最新回复(0)