Python- PYQT圖形化界面 + 爬蟲(公用短信網站)

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_())

這裏有些我不明白的地方,按鈕點擊後,
怎麼能不卡?

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章