日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Python制作微博抓取GUI程序

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

公司主營業(yè)務:成都網(wǎng)站制作、網(wǎng)站設(shè)計、移動網(wǎng)站開發(fā)等業(yè)務。幫助企業(yè)客戶真正實現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。創(chuàng)新互聯(lián)公司是一支青春激揚、勤奮敬業(yè)、活力青春激揚、勤奮敬業(yè)、活力澎湃、和諧高效的團隊。公司秉承以“開放、自由、嚴謹、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團隊有機會用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)公司推出孟州免費做網(wǎng)站回饋大家。

圖片

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

微博功能布局

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

創(chuàng)建微博 Widget

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

我們新建一個 weibo 相關(guān)的函數(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 庫生成詞云即可

# 詞云相關(guān)
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

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

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


當前名稱:Python制作微博抓取GUI程序
標題路徑:http://m.5511xx.com/article/coscoig.html