logo
Loading...

無法獲得cupoy的新聞? - Cupoy

教練好,最近在實作專題,再輸入抓取cupoy的熱門新聞時,發現一直只能抓重複取前面幾則,即便使用se...

無法獲得cupoy的新聞?

2020/05/06 下午 10:27
Python網路爬蟲討論版
Shengzhi Lin
觀看數:12
回答數:4
收藏數:2

教練好,

最近在實作專題,再輸入抓取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 😃😃😃