以自己的實(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)鍵詞采集帖子


- 功能2,根據(jù)主頁(yè)鏈接采集帖子


- 功能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小工具,小白友好,高效便捷:
然后把復(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è)用途。