你所參考的 文章 部份内容已經過時:
find_element_by_*
已經在新版被棄用,例如當中的eles = driver.find_elements_by_class_name("tgn9uw-0")
應該要改為
from selenium.webdriver.common.by import By
eles = driver.find_element(By.CLASS_NAME, "tgn9uw-0")
tgn9uw-0
變為 c122gkvw
,原因可能是 Dcard 使用了 CSS-loader,令 class name 為人類無法閱讀的樣式,以 class name 作爬取條件並不穩定。有興趣了解可見:Why Google use random ClassName
個人認為可以使用
post = driver.find_element(By.TAG_NAME, "article")
去代替參考文章中 eles
的爬取,後續研究 selenium 的打開使用方式去解析所需要的資料、適當在 Dcard 網站開啟開發者工具 (DevTools) 研究可用的 locator。
另外,不確定你 selenium 的版本和實際輸出,selenium 部份 method 也已經被棄用,有機會是 results 未經處理,仍然是 WebElement
導致。
你的 results 結果是什麼呢?
應該不是 JSON 的格式吧
【Day 3】常見的資料格式 (2/3) - JSON
Day11 - Python 如何處理 JSON
JSON 檔案操作
我是參考這篇的https://ithelp.ithome.com.tw/articles/10277622
基本的code都一樣但我最後有誤
國
我看那篇最後有 print(results)
你的 results
格式跟他的照片結果是一致的嗎
results = []
result = {
'title': title,
'href': href,
'subtitle': subtitle
}
results.append(result)
因為爬蟲很容易對方網站改版而有變動
搞不好他的 classname
已經變了,不是 'tgn9uw-0'
driver.find_elements_by_class_name('tgn9uw-0')
所以很可能只是一個空的 results
因此不滿足 JSON 格式
他的那些部份我都有改掉,格式是一樣的,results也是有東西的