Python- PYQT圖形化界面 + 爬蟲(公用短信網站)
import re,sys,time,threading,json,requests
from PyQt5.QtWidgets import QApplication,QWidget,QToolTip,QPushButton,QLabel, QLineEdit,\
QTextEdit,QTableWidget,QTableWidgetItem,QMessageBox
from PyQt5 import QtCore,QtGui,QtWidgets
app=QApplication(sys.argv)
w=QWidget()
w.setGeometry(300,200,900,550)
w.setWindowTitle('虛擬信息')
# --------------------------------手機號解析
# 手機下一頁
def update_page_add():
s=lin.text()
print(s)
if s=='0':
s=='1'
page=int(s)+1
lin.setText(str(page))
if phone.toPlainText()!='':
event(page)
else:
page=int(s)+1
lin.setText(str(page))
if phone.toPlainText()!='':
event(page)
# 手機號上一頁
def update_page_low():
s=lin.text()
if s=='0':
s=='1'
page=int(s)+1
lin.setText(str(5))
if phone.toPlainText()!='':
event(page)
else:
page=int(s)-1
if str(page) in('','0','1'):
page=1
lin.setText(str(page))
if phone.toPlainText()!='':
event(page)
# 手機獲取輸入內容分類處理對應函數
def serch():
tel=phone.toPlainText()
s=lin.text()
if s in ('','0','1'):
s==1
event(s)
else:
event(s)
#手機判斷輸入內容
def event(page):
tel=phone.toPlainText()
if tel!='':
# parse(tel,page)
t=threading.Thread(target=parse,args=(tel,page))
t.start()
t.join()
#插入數據
def inser(result):
print(result)
table.clear()
for x in range(len(result)):
table.setItem(x,0,QTableWidgetItem(result[x][1]))
table.setItem(x,1,QTableWidgetItem(result[x][0]))
# 手機url解析
def parse(tel,page):
tel_emi.add(tel)
if page!='':
url='https://www.yinsiduanxin.com/message/'+tel+'/'+str(page)+'.html'
try:
html=requests.get(url,timeout=1)
txt=html.text
if '號碼不存在' in txt:
print('此號碼不屬於虛擬手機號!!')
else:
retxt=re.compile('<td style="">(.*?)</td>\s*<td style="text-align: center">(.*?)</td>') #\s* :匹配回車+空格
result=retxt.findall(txt)
inser(result)
except requests.exceptions.RequestException as e:
print('超時')
table.clear()
table.setItem(x,0,QTableWidgetItem('超時'))
else:
url='https://www.yinsiduanxin.com/message/'+tel+'.html'
try:
html=requests.get(url)
txt=html.text
if '號碼不存在' in txt:
print('此號碼不屬於虛擬手機號!!')
else:
retxt=re.compile('<td style="">(.*?)</td>\s*<td style="text-align: center">(.*?)</td>') #\s* :匹配回車+空格
result=retxt.findall(txt)
inser(result)
except requests.exceptions.RequestException as e:
table.clear()
table.setItem(x,0,QTableWidgetItem('超時'))
def change():
phone.clear()
url='https://www.yinsiduanxin.com/index/message/random.html'
try:
html=requests.get(url,timeout=5).text
s=json.loads(html)
print(s['data'])
phone.setText(s['data'])
page=lin.text()
if page in ('','0','1'):
page=1
lin.setText(str(page))
t=threading.Thread(target=serch)
t.start()
t.join()
except requests.exceptions.RequestException:
print('超時了')
# -------------------------------手機區域--------------------------
btn=QLabel(w)
btn.setText('手機短信')
btn.setGeometry(QtCore.QRect(8,5,100,25)) #設置按鈕(x軸位置,y軸位置,長度,高度)
btn.clicked.connect(event)
bq=QLabel(w)
bq.setText('請輸入如您的臨\n 時手機號碼:')
bq.setGeometry(QtCore.QRect(15,35,100,50))
phone=QTextEdit(w)
phone.setGeometry(QtCore.QRect(10,80,100,23))
btn=QPushButton('隨機切換',w)
btn.setGeometry(QtCore.QRect(8,115,100,25)) #設置按鈕(x軸位置,y軸位置,長度,高度)
btn.clicked.connect(change)
btn_low=QPushButton('上\n一\n頁',w)
btn_low.setGeometry(8,145,20,55)
btn_low.clicked.connect(update_page_low)
lin=QLineEdit(w)############################################頁數
lin.setToolTip('請輸入您要搜尋的頁碼')
lin.setGeometry(35,150,50,20)
btn_go=QPushButton('GO',w)
btn_go.setGeometry(35,175,50,25)
btn_go.clicked.connect(serch)
btn_add=QPushButton('下\n一\n頁',w)
btn_add.setGeometry(90,145,20,55)
btn_add.clicked.connect(update_page_add)
retxt=QLabel(w)
retxt.setText('使用歷史記錄')
retxt.setGeometry(QtCore.QRect(18,440,100,50))
# retxt.setText('<a href="https://www.baidu.com/">百度</a>')#創建連接方法
# retxt.setOpenExternalLinks(True)
retxt.setStyleSheet("font:10pt '楷體';")
# ------------------------------表格顯示區域-------------------------------
table=QTableWidget(w)
table.setGeometry(QtCore.QRect(125,8,770,530))
table.setColumnCount(2)
table.setRowCount(20)
table.setColumnWidth(0,125)
table.setColumnWidth(1,620)
for x in range(0,20):
table.setRowHeight(x,25)
w.show()
sys.exit(app.exec_())
這裏有些我不明白的地方,按鈕點擊後,
怎麼能不卡?