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
- python pyqt,爬后台数据
- python pyqt4 PyQT实现了使用QThread后台处理数据
- Python + PyQt
- python-PYQT
- pyqt+python自定义信号
- eric+PyQt+python
- Python&MySQL&PyQt
- Python+PyQt,GUI操作
- Python GUI --- PyQt
- 【Python】【PyQt】ComboBox
- python + pyqt +opencv
- Python 学习 PyQt Hello World
- Eric4 + PyQt 编写Python程序
- python+PyQT+Eric安装配置
- python+PyQT+Eric安装配置
- python Qt eclipce PyDev PyQt
- python+PyQT+Eric安装配置
- python+PyQT+Eric安装配置
- Java多线程并发编程:volatile关键字解析
- RBAC权限管理与用户操作日志
- oracle中格式化代码的快捷键
- 25个不错PHP的游戏编程脚本代码分享
- 关于SimpleDateFormat时间转换总是显示1970年的问题
- python pyqt,爬后台数据
- 集合相等问题 oj
- RHEL-第十三单元练习题
- 九度oj题目1534:数组中第K小的数字
- 用故事理解CSS中的relative、absolute和overflow:hidden
- ui库
- python基础学习之元组
- 青客日总结20170413
- Markdown标记语言的例子