# DCARD 資料分析 說明如何使用 Python 和 Selenium 蒐集到的 Dcard 文章資料進行分 析。這包括資料的前處理、分析方法、範例程式碼,以及可能遇到的問題。 ## 大綱 資料蒐集回顧 • Selenium 使用經驗 • 資料來源與範圍 資料前處理 • 資料清洗 • 資料轉換 • 缺失值處理 資料分析方法 • 文本分析 • 情感分析 • 網絡分析 範例程式碼 • • Python 程式碼片段 使用的套件與工具 問題意識與討論 • 資料偏見問題 • 隱私問題 • 分析限制 結論與未來方向 參考資料 第一章:資料蒐集回顧 SELENIUM 使用經驗 Selenium 是一個自動化測試工具,但在網頁爬蟲領域也有廣泛的應用。它模擬真 實用戶的行為,能夠操作瀏覽器,因此對於動態網頁(如 Dcard)來說,是一個非 常有效的資料蒐集工具。 收集到的資料 使用 Selenium,我們可以收集到以下類型的資料: 1. 文章標題 2. 文章內容 3. 作者資訊 4. 發布時間 5. 6. 回應數量和內容 點讚和收藏數 如何利用收集到的資料 1. 文本分析:透過 NLP(自然語言處理)工具,我們可以對文章內容進行情感 分析、主題模型等。 2. 社會網絡分析:透過作者和回應者之間的互動,我們可以建立社會網絡圖來分 析社群結構。 3. 趨勢分析:透過時間序列數據,我們可以分析某一主題或關鍵字的熱度變化。 4. 用戶行為分析:透過點讚和收藏數,我們可以分析用戶對於某一主題或文章的 偏好。 這些分析不僅可以用於學術研究,也可以應用在市場分析、公共政策評估等多個領 域。 完整的資料搜集程式碼 以下是一個使用 Python 和 Selenium 來蒐集 Dcard 文章資料的簡單範例程式碼。 from selenium import webdriver from selenium.webdriver.common.keys import Keys # 初始化 WebDriver driver = webdriver.Chrome() # 訪問 Dcard 網站 driver.get('https://www.dcard.tw/') # 找到搜尋框並輸入關鍵字 search_box = driver.find_element_by_name('query') search_box.send_keys('Python') search_box.send_keys(Keys.RETURN) # 獲取文章標題和連結 titles = driver.find_elements_by_class_name('PostEntry_title') links = driver.find_elements_by_class_name('PostEntry_root') for title, link in zip(titles, links): print(f'Title: {title.text}') print(f'Link: {link.get_attribute('href')}') 程式碼說明與回傳的具體內容 1. 初始化 WebDriver:這會啟動一個新的瀏覽器視窗。 2. 訪問 Dcard 網站:自動開啟 Dcard 的首頁。 3. 搜尋關鍵字:在搜尋框中輸入 'Python' 並執行搜尋。 4. 獲取文章標題和連結:這會列出所有與 'Python' 有關的文章標題和連結。 具體回傳的內容舉例 Title: Python 爬蟲入門 Link: https://www.dcard.tw/f/programming/p/23456789 Title: Python 機器學習實戰 Link: https://www.dcard.tw/f/programming/p/23456790 這些資料可以用於後續的文本分析、社會網絡分析等。 第二章:大規模資料爬取與篩選 在這一章中,我們將探討如何一次性地爬取與篩選大量的 Dcard 文章。由於 Dcard API 已經停止開放,我們的主要工具將是 Selenium 套件和 Python。 2.1 爬取大量文章的方法 1. 多線程爬蟲:使用多線程可以加速資料的爬取速度。 2. 時間範圍設定:通過設定特定的時間範圍,可以更精確地獲取所需的資料。 3. 自動翻頁:使用 Selenium 的翻頁功能,以獲取更多頁面的資料。 2.2 篩選文章的方法 1. 關鍵字過濾:使用特定的關鍵字或短語來過濾文章。 2. 數據篩選:例如,只選擇點讚數超過一定數量的文章。 3. 時間篩選:根據發布時間來篩選文章,這對於趨勢分析非常有用。 範例程式碼 from selenium import webdriver import time # 初始化 WebDriver chrome_options = webdriver.ChromeOptions() chrome_options.add_argument('--headless') driver = webdriver.Chrome(options=chrome_options) # 訪問 Dcard url = 'https://www.dcard.tw/f' driver.get(url) # 自動翻頁並收集文章資料 for i in range(5): # 翻5頁 driver.execute_script('window.scrollTo(0, document.body.scrollHeight);') time.sleep(2) # 等待2秒讓頁面加載 # 篩選文章 articles = driver.find_elements_by_class_name('PostEntry_root') for article in articles: title = article.find_element_by_class_name('PostEntry_title').tex t like_count = int(article.find_element_by_class_name('Like_root').text) if like_count > 100: # 篩選點讚數超過100的文章 print(f'Title: {title}, Like Count: {like_count}') 2.3 物件和資料型態 物件 WebDriver: 這是 Selenium 套件中的一個物件,用於模擬瀏覽器行為。 • 資料型態:物件 • 例:driver = webdriver.Chrome(options=chrome_options) chrome_options: 這是一個 ChromeOptions 物件,用於設定 Chrome 瀏覽器的選 項。 • 資料型態:物件 • 例:chrome_options = webdriver.ChromeOptions() url: 這是一個字串,表示要訪問的網址。 • 資料型態:字串 (String) • 例:url = 'https://www.dcard.tw/f' articles: 這是一個元素列表,每個元素代表一篇 Dcard 文章。 • 資料型態:列表 (List) • 例:articles = driver.find_elements_by_class_name('PostEntry_root') title, like_count: 這些是字串和整數,分別存儲文章的標題和點讚數。 • 資料型態:字串 (String), 整數 (Integer) • 例:title = article.find_element_by_class_name('PostEntry_title').text 方法 add_argument(): 用於添加瀏覽器選項。 • 例:chrome_options.add_argument('--headless') get(): 用於訪問指定的網址。 • 例:driver.get(url) execute_script(): 用於執行 JavaScript 腳本。 • 例:driver.execute_script('window.scrollTo(0, document.body.scrollHeight);') sleep(): 用於暫停程式執行。 • 例:time.sleep(2) find_elements_by_class_name(): 用於找到所有具有指定類名的元素。 • 例:driver.find_elements_by_class_name('PostEntry_root') find_element_by_class_name(): 用於找到第一個具有指定類名的元素。 • 例:article.find_element_by_class_name('PostEntry_title') text: 用於獲取元素的文本內容。 • 例:article.find_element_by_class_name('PostEntry_title').text 這個程式碼示例展示了如何使用多線程和自動翻頁來爬取大量的 Dcard 文章,並進 行篩選。
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up