欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

基于Python實現(xiàn)微博抓取GUI程序

 更新時間:2022年09月28日 09:03:35   作者:蘿卜大雜燴  
在前面的分享中,我們制作了一個天眼查 GUI 程序,今天我們在這個的基礎上,繼續(xù)開發(fā)新的功能,微博抓取工具,感興趣的可以了解一下

前言

在前面的分享中,我們制作了一個天眼查 GUI 程序,今天我們在這個的基礎上,繼續(xù)開發(fā)新的功能,微博抓取工具,先來看下最終的效果

整體的界面還是繼承自上次的天眼查界面,我們直接來看相關功能

微博功能布局

我們整體的界面布局就是左側可以選擇不同功能,然后右側的界面會對應改變

創(chuàng)建微博 Widget

對于右側界面的切換,我們可以為不同的功能創(chuàng)建不同的 Widget,當點擊左側不同功能按鈕后,對應切換 Widget 即可

我們新建一個 weibo 相關的函數(shù),主要用來界面布局

def?weiboWidget(self):
????self.left_button_widget_3?=?QtWidgets.QWidget()
????self.weiboWebEngine?=?QWebEngineView()
????self.weiboWebEngine2?=?QWebEngineView()
????self.progressWidget?=?QtWidgets.QWidget()
????self.ciyunWidget?=?QtWidgets.QWidget()

我們還看到整體界面有一個詞云,該詞云是通過 matplotlib 渲染的,所以還需要創(chuàng)建 matplotlib 布局

#?matplotlib?繪圖區(qū)域
self.figure?=?plt.figure(figsize=(7,?2))
self.canvas?=?FigureCanvasQTAgg(self.figure)??#?繪圖區(qū)域放到圖層canvas之中
self.gridLayout_weibo.addWidget(self.canvas,?5,?0,?1,?9)??#?圖層放到pyqt布局之中

創(chuàng)建微博查詢

接下來我們創(chuàng)建一個微博查詢函數(shù),同時因為我們這里需要實時更新抓取進度條,所以使用了多線程的方式

def?doWeiboQuery(self):
????weibo_link?=?self.lineEdit_weibo_link.text()
????weibo_name?=?self.lineEdit_weibo_name.text()
????weibo_page?=?self.weibo_comboBox.currentText()
????if?not?weibo_link?or?not?weibo_name:
????????QMessageBox.information(self,?"Error",?"微博鏈接或者用戶名稱不能為空",
????????????????????????????????QMessageBox.Yes)
????????return
????self.weiboWebEngine.load(QUrl(weibo_link))
????self.qth?=?WeiBoQueryThread()
????self.qth.update_data.connect(self.weiboPgbUpdate)
????self.qth.draw_ciyun.connect(self.drawCiyun)
????self.qth.weibo_page?=?weibo_page
????self.qth.weibo_link?=?weibo_link
????self.qth.weibo_name?=?weibo_name
????self.qth.start()

而主線程與子線程之間的通信,是使用信號槽的形式

def?weiboPgbUpdate(self,?data):
????self.pgb.setValue(data)

def?drawCiyun(self):
????self.canvas.draw()
????self.toolbar?=?NavigationToolbar2QT(self.canvas,?self)
????self.gridLayout_weibo.addWidget(self.toolbar,?8,?0,?1,?9)

接下來就是創(chuàng)建子進程函數(shù),函數(shù)主體是爬取微博的代碼

"""子進程微博查詢"""
class?WeiBoQueryThread(QThread):
????#?創(chuàng)建一個信號,觸發(fā)時傳遞當前時間給槽函數(shù)
????update_data?=?pyqtSignal(int)
????draw_ciyun?=?pyqtSignal()
????weibo_name?=?None
????weibo_link?=?None
????weibo_page?=?None
????total_pv?=?0
????timestamp?=?str(int(time.time()))
????def?run(self):
????????#?微博爬蟲
????????try:
????????????file_name?=?self.weibo_name?+?"_"?+?self.timestamp?+?'comment.csv'
????????????my_weibo?=?weibo_interface.Weibo(self.weibo_name)
????????????uid,?blog_info?=?my_weibo.weibo_info(self.weibo_link)
????????????pv_max?=?int(self.weibo_page)
????????????pre_pv?=?100?//?pv_max
????????????for?i?in?range(int(self.weibo_page)):
????????????????my_weibo.weibo_comment(uid,?blog_info,?str(i),?file_name)
????????????????self.total_pv?+=?pre_pv
????????????????self.update_data.emit(self.total_pv)
????????????print("所有微博評論爬取完成!")
????????????print("開始生成詞云")
????????????font,?img_array,?STOPWORDS,?words?=?ciyun(file_name)
????????????wc?=?WordCloud(width=2000,?height=1800,?background_color='white',?font_path=font,?mask=img_array,
???????????????????????????stopwords=STOPWORDS,?contour_width=3,?contour_color='steelblue').generate(words)
????????????plt.imshow(wc)
????????????plt.axis("off")
????????????self.draw_ciyun.emit()
????????????print("生成詞云完成")
????????except?Exception?as?e:
????????????print(e)

而對于微博的具體爬取方法,這里就不再展開說明了,我是把所有微博爬蟲的代碼都封裝好了,這里直接調(diào)用暴露的接口即可

詞云制作

對于詞云的制作,我們還是先通過 jieba 進行分詞處理,然后使用 wordcloud 庫生成詞云即可

#?詞云相關
def?ciyun(file,?without_english=True):
????font?=?r'C:\Windows\Fonts\FZSTK.TTF'
????STOPWORDS?=?{"回復",?"@",?"我",?"她",?"你",?"他",?"了",?"的",?"吧",?"嗎",?"在",?"啊",?"不",?"也",?"還",?"是",
?????????????????"說",?"都",?"就",?"沒",?"做",?"人",?"趙薇",?"被",?"不是",?"現(xiàn)在",?"什么",?"這",?"呢",?"知道",?"鄧"}
????df?=?pd.read_csv(file,?usecols=[0])
????df_copy?=?df.copy()
????df_copy['comment']?=?df_copy['comment'].apply(lambda?x:?str(x).split())??#?去掉空格
????df_list?=?df_copy.values.tolist()
????comment?=?jieba.cut(str(df_list),?cut_all=False)
????words?=?'?'.join(comment)
????if?without_english:
????????words?=?re.sub('[a-zA-Z]',?'',?words)
????img?=?Image.open('ciyun.png')
????img_array?=?np.array(img)
????return?font,?img_array,?STOPWORDS,?words

由于很多評論當中會存在鏈接信息,導致制作的詞云有很多高權重的英文字符,所有這里也通過正則進行了去英文字符處理

至此,我們這個微博查詢功能就完成了~

結果展示

下面我們來看看最終的效果吧

到此這篇關于基于Python實現(xiàn)微博抓取GUI程序的文章就介紹到這了,更多相關Python微博抓取內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 詳解Python在使用JSON時需要注意的編碼問題

    詳解Python在使用JSON時需要注意的編碼問題

    這篇文章主要介紹了詳解Python在使用JSON時需要注意的編碼問題,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-12-12
  • python 隊列基本定義與使用方法【初始化、賦值、判斷等】

    python 隊列基本定義與使用方法【初始化、賦值、判斷等】

    這篇文章主要介紹了python 隊列基本定義與使用方法,結合實例形式分析了Python隊列的定義、初始化、賦值、判斷等相關操作技巧,需要的朋友可以參考下
    2019-10-10
  • Python字符串詳細介紹

    Python字符串詳細介紹

    這篇文章主要介紹了Python字符串詳解,本文講解了字符串相關知識、字符串的一些特性、原始字符串、unicode字符串、字符串的常用操作方法、內(nèi)建函數(shù)列表等內(nèi)容,需要的朋友可以參考下
    2015-05-05
  • 淺談Python中的函數(shù)(def)及參數(shù)傳遞操作

    淺談Python中的函數(shù)(def)及參數(shù)傳遞操作

    這篇文章主要介紹了淺談Python中的函數(shù)(def)及參數(shù)傳遞操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • Python 圖像處理之顏色遷移(reinhard VS welsh)

    Python 圖像處理之顏色遷移(reinhard VS welsh)

    這篇文章主要介紹了分別利用reinhard算法和welsh算法實現(xiàn)圖像的顏色遷移,并對二者算法的效果進行了對比,感興趣的小伙伴可以了解一下
    2021-12-12
  • 使用Plotly Dash進行儀表板設計的步驟和技巧

    使用Plotly Dash進行儀表板設計的步驟和技巧

    Plotly Dash 是一個基于 Python 的開源框架,可以幫助你快速而靈活地構建交互式儀表板,本文將介紹使用 Plotly Dash 創(chuàng)建儀表板的步驟和一些技巧,并附上代碼實例來演示每個步驟,需要的朋友可以參考下
    2024-05-05
  • 淺談Python處理json字符串為什么不建議使用eval()

    淺談Python處理json字符串為什么不建議使用eval()

    本文主要介紹了Python處理json字符串為什么不建議使用eval(),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • 初學python數(shù)組的處理代碼

    初學python數(shù)組的處理代碼

    初學python數(shù)組的處理代碼,學習python的朋友可以參考下。
    2011-01-01
  • python PyQt5對象類型的判定及對象刪除操作詳細解讀

    python PyQt5對象類型的判定及對象刪除操作詳細解讀

    PyQt5主要是用來判定一個對象的類型,或者說是否繼承自某個類,本文給大家介紹python PyQt5對象類型的判定,對象刪除操作詳細解讀,感興趣的朋友一起看看吧
    2024-07-07
  • python如何生成textgrid文件

    python如何生成textgrid文件

    這篇文章主要介紹了python如何生成textgrid文件,本文通過實例代碼給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧
    2024-07-07

最新評論