微博數(shù)據(jù)采集器:搜索、主頁(yè)、評(píng)論一鍵搞定

以自己的實(shí)際開(kāi)發(fā)經(jīng)歷分享一個(gè)GUI軟件的實(shí)現(xiàn)過(guò)程,和他們共同探討開(kāi)發(fā)技術(shù)。

一、背景分析與結(jié)果展示

1.1 開(kāi)發(fā)背景

我是 @馬哥python說(shuō),一枚10年+程序猿,現(xiàn)全職獨(dú)立開(kāi)發(fā)。

微博作為中國(guó)最具影響力的社交媒體平臺(tái)之一,以其實(shí)時(shí)性和龐大的KOL用戶群體,成為輿論爆發(fā)和信息傳播的首選陣地。之前,為了滿足不同的數(shù)據(jù)需求,我曾分別開(kāi)發(fā)了針對(duì)關(guān)鍵詞搜索的“爬微博搜索軟件”、針對(duì)特定博主的“爬微博博主軟件”以及針對(duì)微博評(píng)論的“爬微博評(píng)論軟件”。

雖然采集性能穩(wěn)定、數(shù)據(jù)全面,但也有部分用戶反饋,采集需求涵蓋帖子和評(píng)論,需要頻繁地切換軟件,影響體驗(yàn)。為了滿足這一場(chǎng)景,我正式將這三款軟件合并,推出全新的“爬微博聚合軟件”。該軟件集成了關(guān)鍵詞搜索、博主主頁(yè)采集、評(píng)論采集三大核心功能,旨在為用戶提供一站式的微博數(shù)據(jù)采集解決方案。

1.2 適用人群與場(chǎng)景

該軟件適用于:

  • 學(xué)術(shù)研究者:采集微博相關(guān)話題數(shù)據(jù),用于社會(huì)輿情分析、網(wǎng)絡(luò)傳播研究等;
  • 市場(chǎng)從業(yè)者:監(jiān)測(cè)品牌關(guān)鍵詞搜索結(jié)果、競(jìng)品博主動(dòng)態(tài)、熱門營(yíng)銷內(nèi)容的評(píng)論反饋;
  • 內(nèi)容創(chuàng)作者:分析優(yōu)質(zhì)博主的內(nèi)容風(fēng)格、熱門話題趨勢(shì),為自身創(chuàng)作提供參考;
  • 數(shù)據(jù)愛(ài)好者:收集感興趣領(lǐng)域的微博數(shù)據(jù),進(jìn)行個(gè)性化數(shù)據(jù)分析與可視化。

1.3 結(jié)果展示

  • 功能1,根據(jù)關(guān)鍵詞采集帖子

軟件界面1:
界面1:微博搜索帖子

采集結(jié)果1:(含11個(gè)字段:關(guān)鍵詞,頁(yè)碼,微博id,微博鏈接,用戶昵稱,用戶主頁(yè)鏈接,發(fā)布時(shí)間,轉(zhuǎn)發(fā)數(shù),評(píng)論數(shù),點(diǎn)贊數(shù),微博內(nèi)容)
結(jié)果1:微博搜索帖子
  • 功能2,根據(jù)主頁(yè)鏈接采集帖子

軟件界面2:
界面2:根據(jù)主頁(yè)采集帖子

采集結(jié)果2:(含13個(gè)字段:博主昵稱,博主id,頁(yè)碼,微博id,微博bid,微博鏈接,發(fā)布時(shí)間,發(fā)布于,轉(zhuǎn)發(fā)數(shù),評(píng)論數(shù),點(diǎn)贊數(shù),話題標(biāo)簽,微博內(nèi)容)
結(jié)果2:根據(jù)主頁(yè)采集帖子
  • 功能3,根據(jù)帖子鏈接采集評(píng)論

軟件界面3:
界面3:根據(jù)帖子采集評(píng)論

采集結(jié)果3:(含14個(gè)字段:微博鏈接,微博id,頁(yè)碼,評(píng)論者昵稱,評(píng)論者粉絲數(shù),評(píng)論者關(guān)注數(shù),評(píng)論者主頁(yè)鏈接,評(píng)論者性別,評(píng)論者簽名,評(píng)論時(shí)間,點(diǎn)贊數(shù),評(píng)論內(nèi)容IP屬地,評(píng)論級(jí)別,評(píng)論內(nèi)容)
結(jié)果3:根據(jù)帖子采集評(píng)論

1.4 軟件說(shuō)明

幾點(diǎn)說(shuō)明,請(qǐng)?jiān)斪x:

1. Windows系統(tǒng)、Mac系統(tǒng)均可直接運(yùn)行,無(wú)需配置編程環(huán)境
2. 軟件含三個(gè)核心功能:搜索帖子、主頁(yè)帖子、評(píng)論的采集,并支持不同條件的篩選
3. 軟件通過(guò)接口協(xié)議采集,并非通過(guò)模擬瀏覽器等RPA類,穩(wěn)定性較高
4. 軟件運(yùn)行完成后,會(huì)在當(dāng)前文件夾(即,軟件所在文件夾)生成csv結(jié)果文件
5. 采集過(guò)程中,每采集一頁(yè),存一次csv。并非采完最后一次性保存!防止因異常中斷導(dǎo)致丟失前面的數(shù)據(jù)(每頁(yè)請(qǐng)求間隔1~2s)
6. 采集過(guò)程中,有l(wèi)og文件詳細(xì)記錄運(yùn)行過(guò)程,方便回溯

二、主要技術(shù)

2.1 模塊分工

軟件全部模塊采用python語(yǔ)言開(kāi)發(fā),主要分工如下:

tkinter:GUI軟件界面
requests:發(fā)送請(qǐng)求
json:解析返回的響應(yīng)數(shù)據(jù)
pandas:保存csv數(shù)據(jù)結(jié)果
logging:運(yùn)行過(guò)程中日志記錄

出于版權(quán)考慮,暫不公開(kāi)源碼,僅向用戶提供軟件使用。

2.2 部分代碼

部分代碼實(shí)現(xiàn):

發(fā)送請(qǐng)求并解析數(shù)據(jù):

# 發(fā)送請(qǐng)求
r = requests.get(url, headers=h1, params=params)
# 解析數(shù)據(jù)
json_data = r.json()

解析響應(yīng)數(shù)據(jù),以“評(píng)論內(nèi)容”字段為例:

for data in json_data['data']:
    # 評(píng)論內(nèi)容
    text = data['text_raw']
    text_list.append(text)

保存結(jié)果數(shù)據(jù)到csv文件:

# 保存數(shù)據(jù)
df = pd.DataFrame(
    {
        '微博鏈接': weibo_url,
        '微博id': weibo_id,
        '頁(yè)碼': page,
        '評(píng)論者昵稱': screen_name_list,
        '評(píng)論者粉絲數(shù)': followers_count_list,
        '評(píng)論者關(guān)注數(shù)': friends_count_list,
        '評(píng)論者主頁(yè)鏈接': user_home_url_list,
        '評(píng)論者性別': gender_list,
        '評(píng)論者簽名': desc_list,
        '評(píng)論時(shí)間': create_time_list,
        '點(diǎn)贊數(shù)': like_counts_list,
        '評(píng)論內(nèi)容IP屬地': source_list,
        '評(píng)論級(jí)別': comment_level_list,
        '評(píng)論內(nèi)容': text_list,
    }
)
# 保存csv文件
df.to_csv(self.result_file, mode='a+', index=False, header=header, encoding='utf_8_sig')
self.tk_show('結(jié)果保存成功:{}'.format(self.result_file))

底部版權(quán)聲明:

# 版權(quán)信息
copyright = tk.Label(root, text='@馬哥python說(shuō) All rights reserved.', font=('仿宋', 10), fg='grey')
copyright.place(x=290, y=625)

日志記錄模塊:

def get_logger(self):
    self.logger = logging.getLogger(__name__)
    # 日志格式
    formatter = '[%(asctime)s-%(filename)s][%(funcName)s-%(lineno)d]--%(message)s'
    # 日志級(jí)別
    self.logger.setLevel(logging.DEBUG)
    # 控制臺(tái)日志
    sh = logging.StreamHandler()
    log_formatter = logging.Formatter(formatter, datefmt='%Y-%m-%d %H:%M:%S')
    # info日志文件名
    info_file_name = time.strftime("%Y-%m-%d") + '.log'
    # 將其保存到特定目錄
    case_dir = r'./logs/'
    info_handler = TimedRotatingFileHandler(filename=case_dir + info_file_name,
                                        when='MIDNIGHT',
                                        interval=1,
                                        backupCount=7,
                                        encoding='utf-8')

三、功能與使用

3.1 填寫cookie

cookie是用戶身份的關(guān)鍵憑證。首次使用軟件前,需要配置cookie。最新版本軟件里已經(jīng)內(nèi)附一鍵自動(dòng)化配置cookie的ck小工具,小白友好,高效便捷:
cookie獲取方法

然后把復(fù)制的cookie值填寫到當(dāng)前文件夾的cookie.txt文件中。

3.2 軟件登錄

用戶登錄界面:需要登錄。

3.3 啟動(dòng)采集

1)登錄成功之后,選擇需要的功能模塊(搜索帖子/博主帖子/評(píng)論);

2)設(shè)置相關(guān)參數(shù)(如關(guān)鍵詞、時(shí)間范圍、博主鏈接等);

3)點(diǎn)擊「開(kāi)始執(zhí)行」,等待采集完成(可實(shí)時(shí)查看采集進(jìn)度);

4)采集完成后,在默認(rèn)的當(dāng)前文件夾中查看csv數(shù)據(jù)文件或圖片等。

3.4 演示視頻

軟件使用的完整過(guò)程演示:請(qǐng)見(jiàn)原文。

END、原創(chuàng)聲明

本工具為作者 @馬哥python說(shuō) 原創(chuàng)開(kāi)發(fā),僅限于學(xué)術(shù)交流使用,嚴(yán)格遵循相關(guān)法律法規(guī),符合平臺(tái)內(nèi)容合法合規(guī)性,禁止用于任何商業(yè)用途。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容