無法獲得cupoy的新聞?
教練好,
最近在實作專題,再輸入抓取cupoy的熱門新聞時,發現一直只能抓重複取前面幾則,即便使用selenium還是如此,想請問該如何解決?
附上code
回答列表
-
2020/05/09 下午 08:55張維元 (WeiYuan)贊同數:0不贊同數:0留言數:1
嗨,
這是因為 CUPOY 的網站資料是屬於「動態載入的方式」,你可以先觀察一下:「瀏覽器是否有正常的往下滑,並且瀏覽器上是否載入到正確的資料」。
如果這個回答對你有幫助請主動點選「有幫助」的按鈕,也可以追蹤我的GITHUB帳號。若還有問題的話,也歡迎繼續再追問或者把你理解的部分整理上來,我都會提供你 Review 和 Feedback 😃😃😃
-
2020/05/10 上午 00:45張維元 (WeiYuan)贊同數:0不贊同數:0留言數:0
嗨,
「教練好,我有觀察browser確實有正常的往下滑,但是否有正確的載入資料,這部分我還不知道怎麼觀察,能請教練給我一些提示嗎?」
=> 1. 請問你目前執行出來的結果為何?可以跑跑看嗎? 2. 你可以打開下面的視窗看看,你會發現 HTML 會隨著往下滑的過程更動,永遠只存在 N 筆的資訊,所以你要讓他滑動正確的位置。
如果這個回答對你有幫助請主動點選「有幫助」的按鈕,也可以追蹤我的GITHUB帳號。若還有問題的話,也歡迎繼續再追問或者把你理解的部分整理上來,我都會提供你 Review 和 Feedback 😃😃😃
-
2020/05/10 上午 01:00張維元 (WeiYuan)贊同數:0不贊同數:0留言數:1
補充一下,我剛剛試了一下,發現你程式當中的 window.scrollTo 那一行會一直滑到最底下,可能不是一個好方法,我們應該會希望他是慢慢的滑動。可以參考這裡的寫法:
```
import time
# 取得資料
for i in range(1, 4):
html_source = browser.page_source
soup = BeautifulSoup(html_source, 'html.parser')
print('=====')
for d in soup.find_all('h6', class_='sc-erNlkL'):
print(d.text)
time.sleep(3)
browser.execute_script( f"window.scrollTo(0, innerHeight*{i})" )
```
如果這個回答對你有幫助請主動點選「有幫助」的按鈕,也可以追蹤我的GITHUB帳號。若還有問題的話,也歡迎繼續再追問或者把你理解的部分整理上來,我都會提供你 Review 和 Feedback 😃😃😃
-
2020/05/11 上午 11:51張維元 (WeiYuan)贊同數:1不贊同數:0留言數:0
嗨,Shengzhi,你提的兩個問題都很好
1. 「我發現我的問題在於抓取的資料的方式不同: 我使用find_all的方式:是在網頁按右鍵:檢視網頁原始碼,然後去尋找標籤...等來獲取資料。 但應該要用『開發者使用工具』的element中來找到文章對應的標籤 」
=> 是啊,可以參考我之前寫的這一篇文章。
2. 「這邊想請問教練,為什麼這兩種方式出來的程式碼會不同呢?而我該怎麼選擇什麼情況要使用哪一個呢(例如:動態或靜態的爬蟲)?」
=> 檢視原始碼是第一次請求回來的資料,開發者工具是執行完 JavaScript 後的新資料(這個才是你真正看到的)。
如果這個回答對你有幫助請主動點選「有幫助」的按鈕,也可以追蹤我的GITHUB帳號。若還有問題的話,也歡迎繼續再追問或者把你理解的部分整理上來,我都會提供你 Review 和 Feedback 😃😃😃