本軟件工具僅限於學術交流使用,嚴格遵循相關法律法規,符合平台內容合法性,禁止用於任何商業用途!
一、背景概述
1.1 開發背景
小紅書作為國內領先的社交電商平台,擁有龐大的用户羣體和高活躍度,其筆記評論區域藴藏着豐富的用户反饋信息。在合法合規、尊重平台規則及用户隱私的前提下,對小紅書評論數據進行合理採集與分析,有助於企業深入瞭解消費者對產品與品牌的真實評價,從而更好地洞察市場需求、優化產品策略。
基於這一需求,我利用python開發了一款數據採集輔助工具 ——【爬小紅書搜索評論軟件】。該工具嚴格遵循平台公開的接口規範和數據使用政策,確保數據採集行為的合法性與合規性。
軟件支持兩種合規的數據採集模式:
1、基於關鍵詞的評論採集:在平台規則允許的範圍內,用户輸入合法的筆記關鍵詞,軟件通過關鍵詞搜索獲取相關筆記鏈接,並從中提取允許訪問的評論數據。
2、基於筆記鏈接的評論採集:用户提供合法獲取且平台允許分析的筆記鏈接,軟件依此合規地提取相關評論信息。
用户可根據實際需求,在合法合規的前提下選擇其中一種模式進行數據採集。
1.2 軟件界面
軟件界面,如下:
1.3 結果展示
在合法合規及遵守平台規則的前提下,展示符合數據使用範圍的爬取結果示例:
爬取結果 1 - 筆記數據:
爬取結果 2 - 評論數據:
1.4 操作演示視頻
軟件在合法合規操作流程下的運行演示:
https://www.bilibili.com/video/BV1uDtneqEhA
1.5 軟件使用説明
幾點重要説明,請仔細閲讀:
1. Windows用户可直接雙擊打開使用,無需Python運行環境,操作便捷。
2. 軟件嚴格通過平台公開允許的接口協議進行數據交互,並非通過模擬瀏覽器等RPA類工具,確保穩定性與合規性 。
3. 先在cookie.txt中填入符合平台規定獲取方式的自己的cookie值,方便重複使用(內附合法合規的cookie獲取方法)。
4. 支持按平台允許的筆記類型(綜合/視頻/圖文)和排序方式(綜合/最新/最熱)進行數據獲取。
5. 支持多個的設置項有:在平台規則允許範圍內的筆記關鍵詞、筆記鏈接、評論關鍵詞、IP屬地 。
6. 每個關鍵詞最多可採集220條筆記,與網頁端在平台規則下的搜索數量一致。
7. 爬取過程中,每爬一頁,存一次csv。並非爬完最後一次性保存!防止因異常中斷導致丟失前面的數據(每條間隔1~2s,避免對平台服務器造成過大壓力)。
8. 爬取過程中,有log文件詳細記錄運行過程,方便回溯,同時確保記錄內容符合平台隱私政策。
9. 爬取過程中,在符合平台數據處理規則下,評論篩選同時進行。並非全部評論爬完再一次性篩選!所以效率較高!
10. 筆記csv含10個字段,有:關鍵詞,頁碼,筆記id,筆記鏈接,筆記標題,筆記類型,點贊數,用户id,用户主頁鏈接,用户暱稱(確保各字段數據獲取與使用符合平台及用户隱私相關規定)。
11. 評論csv含10個字段,有:筆記鏈接,頁碼,評論者暱稱,評論者id,評論者主頁鏈接,評論時間,評論IP屬地,評論點贊數,評論級別,評論內容(確保各字段數據獲取與使用符合平台及用户隱私相關規定)。
以上。
二、主要技術
軟件全部模塊採用 python 語言開發,主要分工如下:
- tkinter:GUI軟件界面
- requests:通過合法合規的接口進行爬蟲請求
- json:解析響應數據
- pandas:保存csv結果、數據清洗
- logging:日誌記錄,確保記錄內容符合平台與法律規定
出於版權考慮,暫不公開源碼,僅向用户提供軟件使用。同時,確保軟件使用過程嚴格遵循平台規則與相關法律法規。
三、功能介紹
3.0 填寫 cookie
開始採集前,需按照平台規定的合法方式獲取並把自己的 cookie 值填入 cookie.txt 文件。
cookie 獲取説明 1:(確保獲取方法符合平台規則)
3.1 根據關鍵詞爬評論
爬取思路:在遵循平台規則下,通過合法輸入筆記關鍵詞 -> 獲取平台允許訪問的筆記鏈接 -> 提取允許採集的評論
先填寫左上區在平台規則允許範圍內的筆記篩選項,再填寫右上區符合平台規定的評論篩選項,點擊按鈕 1 進行合規的數據採集。
3.2 根據筆記鏈接爬評論
爬取思路:使用合法獲取且平台允許分析的筆記鏈接 -> 提取允許採集的評論
先填寫中上區合法合規的筆記鏈接,再填寫右上區符合平台規定的評論篩選項,點擊按鈕 2 進行合規的數據採集。
四、重要!技術棧
軟件全部模塊採用python語言開發,主要分工如下:
tkinter:GUI軟件界面
requests:爬蟲請求
json: 解析響應數據
pandas:保存csv結果、數據清洗
logging:日誌記錄
軟件界面核心代碼:
# 創建主窗口
root = tk.Tk()
root.title('爬小紅書搜索評論軟件v1.1')
# 設置窗口大小
root.minsize(width=900, height=650)
爬蟲部分代碼:
# 發送請求
r = requests.get(url, headers=h1)
# 接收響應數據
json_data = r.json()
保存結果數據核心代碼:
# 保存數據到DF
df = pd.DataFrame(
{
'筆記鏈接': 'https://www.xiaohongshu.com/explore/' + note_id,
'筆記鏈接_長': note_url2,
'頁碼': page,
'評論者暱稱': nickname_list,
'評論者id': user_id_list,
'評論者主頁鏈接': user_link_list,
'評論時間': create_time_list,
'評論IP屬地': ip_list,
'評論點贊數': like_count_list,
'評論級別': comment_level_list,
'評論內容': content_list,
}
)
# 保存到csv
df.to_csv(self.result_file2, mode='a+', header=header, index=False, encoding='utf_8_sig')
日誌記錄功能核心代碼:
def get_logger(self):
self.logger = logging.getLogger(__name__)
# 日誌格式
formatter = '[%(asctime)s-%(filename)s][%(funcName)s-%(lineno)d]--%(message)s'
# 日誌級別
self.logger.setLevel(logging.DEBUG)
# 控制枱日誌
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')
self.logger.addHandler(sh)
sh.setFormatter(log_formatter)
self.logger.addHandler(info_handler)
info_handler.setFormatter(log_formatter)
return self.logger
END、原創聲明
軟件首發於眾公號 "老男孩的平凡之路",僅限於學術交流技術探討,請勿用於商業用途,歡迎在遵守相關規則和法律的前提下交流探討!