Python Selenium 網頁爬蟲基礎 By 彭彭

แชร์
ฝัง
  • เผยแพร่เมื่อ 15 ม.ค. 2025

ความคิดเห็น • 94

  • @wilsonwang8504
    @wilsonwang8504 ปีที่แล้ว +1

    看了很多爬蟲教學發現有詳細解說HTML結構真的很重要,感謝老師

    • @cwpeng-course
      @cwpeng-course  ปีที่แล้ว

      謝謝你的回饋,很高興有些幫助 :)

  • @敬恆
    @敬恆 2 ปีที่แล้ว +1

    老師太神了 正在搜尋Selenium相關課程 您就出了 先謝過老師!!

    • @cwpeng-course
      @cwpeng-course  2 ปีที่แล้ว +1

      哈哈哈,希望會對你有些幫助 :)

  • @kuangandy168
    @kuangandy168 5 หลายเดือนก่อน +1

    感谢彭彭老师细心的解说🙏🙏🙏👍👍👍

  • @xujason4607
    @xujason4607 2 ปีที่แล้ว +2

    终于、终于、终于更新python了,赞!

  • @廖怡雯-v3g
    @廖怡雯-v3g ปีที่แล้ว +8

    我是商學畢業的,因為想轉職,從過年後就開始看彭彭老師的教學,居然不知不覺就把python學起來了~~老師口條清晰,邏輯也講解很清楚,真的覺得有搜到老師的課程很幸運,謝謝老師!!
    我看了這篇影片,試著練習抓mobile股票版,有成功抓取到標題,但是當我想要click抓取別頁的時候,執行程式有看到點擊的動作,但是卻出現驗證頁面,需要驗證自己是不是人類XD我有想‘手動’證明一下自己是人類(當然點擊無效)
    請問這個情況有辦法可解嗎?
    (有確認第二個頁面的LINE_TEXT和CLASS_NAME是正確的)
    謝謝

    • @cwpeng-course
      @cwpeng-course  ปีที่แล้ว +5

      謝謝你的回饋,很高興對你有幫助 :)
      我必須說這個是很難解的,蠻建議直接放棄 XDDDD 就算好不容易繞過,可能今天完成,下週就失敗,這是爬蟲和反爬蟲天生的矛盾和持續的演進。根據你的敘述,我猜是 Google 提供給網頁開發者的反爬蟲機制,等於是我們的程式要去破解由 Google 團隊支持持續更新的反爬蟲機制,難度就在這邊。

    • @廖怡雯-v3g
      @廖怡雯-v3g ปีที่แล้ว

      @@cwpeng-course 反爬蟲的機制太強大了QQ那我先知道怎麼爬就好,我就不糾結了,謝謝老師~

  • @kennethchen1935
    @kennethchen1935 3 หลายเดือนก่อน

    謝謝老師。

  • @陳岳廷-q9l
    @陳岳廷-q9l ปีที่แล้ว +1

    Hi 彭彭老師
    每天感謝您 YT 頻道上這麼豐富的學習資源!給想學習程式語言的人很大的幫助~
    我現在想要做一個「英語單字學習 LINE 聊天機器人」,每天固定時間會推播一個英文單字。
    我目前已經有一張試算表整理好常見的 7000 單字,想要在英文字典網站上爬取這 7000 單字的資料,英文、中文、發音、例句等等的,再把資料輸出到試算表。
    想請問老師:這樣子需求的爬蟲這也可以用 Selenium 實現嗎?

    • @cwpeng-course
      @cwpeng-course  ปีที่แล้ว

      理論上可以,實際上要寫寫看爬爬看順不順利,有些網站的爬取不太容易,要做過才知道可不可行。

  • @LostAngel175
    @LostAngel175 ปีที่แล้ว +1

    剛好報告要做,時隔兩年又回來了😂😂😂

    • @cwpeng-course
      @cwpeng-course  ปีที่แล้ว

      哈哈哈,希望對你還有點用處 XDDDDD

  • @hanskywalks
    @hanskywalks 2 ปีที่แล้ว +1

    謝謝老師

  • @Sssll00914
    @Sssll00914 2 ปีที่แล้ว +3

    想請問一下老師,可以教一下如何找到選單裹的選擇嗎

    • @cwpeng-course
      @cwpeng-course  2 ปีที่แล้ว

      感謝你的建議,我會考慮進來的 :)

  • @百香檸檬-q7y
    @百香檸檬-q7y 2 ปีที่แล้ว +1

    來上課了~~

  • @yushiouyu_0413
    @yushiouyu_0413 ปีที่แล้ว +2

    老師您好:
    我在連結檔案路徑時都會看到
    SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated \UXXXXXXXX escape
    碰到這種無法解碼的情形該怎麼辦?

    • @cwpeng-course
      @cwpeng-course  ปีที่แล้ว

      如果檔案路徑中有中文或特殊符號,就改掉,盡量不要用,應該就會順利 ~

  • @徐天天-n5n
    @徐天天-n5n ปีที่แล้ว +1

    有點好奇如果網頁是client side render 的話,還能透過 selenium 取得動態render 後的資料嗎 ?

    • @cwpeng-course
      @cwpeng-course  ปีที่แล้ว +1

      可以地,稍微等待一下讓他 render 完後再取即可。

  • @irisiris1935
    @irisiris1935 ปีที่แล้ว +2

    老師,我抓取上一頁的文章標題時,先出現了錯誤訊息,但在這串訊息後面還是有成功抓到標題,請問是為什麼?
    錯誤訊息如下:
    [16932:11156:0522/111514.901:ERROR:cert_issuer_source_aia.cc(34)] Error parsing cert retrieved from AIA (as DER):
    ERROR: Couldn't read tbsCertificate as SEQUENCE
    ERROR: Failed parsing Certificate

    • @cwpeng-course
      @cwpeng-course  ปีที่แล้ว +1

      瀏覽器的 Driver 沒有順利接收網站的憑證,但通常不影響運作,可以忽略。

  • @蕭然-x9v
    @蕭然-x9v ปีที่แล้ว +1

    彭彭老師換電腦了

  • @築夢者-w8o
    @築夢者-w8o 2 ปีที่แล้ว +2

    可以教學爬取FB社團這種需要向下滾動更多訊息的嗎 或是間隔一段時間爬蟲避免被擋的~

    • @李哲維-e6h
      @李哲維-e6h 2 ปีที่แล้ว +1

      selenium可以呼叫JavaScript的指令完成滑鼠的控制,間隔爬蟲的話最簡單的方式就是加上time.sleep(),但我也接觸不久不確定我的方式對不對,僅供參考。

    • @cwpeng-course
      @cwpeng-course  2 ปีที่แล้ว +1

      感謝 @李哲維 的分享,也收到很寶貴的建議,我會考慮在後續的教學中加入這些細節操作的部份 :)

  • @QianLo-o1c
    @QianLo-o1c ปีที่แล้ว +1

    老師想請問為什麼只爬的到第一頁,爬不到前一頁的,
    File "C:\python\selenium-crawler.py", line 21, in
    link_click() # 模擬使用者點擊(上一頁)連結標籤
    ^^^^^^^^^^
    NameError: name 'link_click' is not defined 出現這個錯誤訊息

    • @cwpeng-course
      @cwpeng-course  6 หลายเดือนก่อน

      沒有定義 link_click() 的函式,得明確的定義這個函式並做對應的動作才行

  • @cjbrown3396
    @cjbrown3396 9 หลายเดือนก่อน +1

    老師 請問最後面多個頁面的迴圈怎麼寫?

    • @cwpeng-course
      @cwpeng-course  9 หลายเดือนก่อน

      先簡單的寫一個能夠把變數加一的迴圈,讓他轉三圈。如果這個沒問題,就把抓取頁面資料重複的程式放進去給他重複跑三次,大概是這樣。

    • @archer885
      @archer885 2 หลายเดือนก่อน

      i=0
      while i

  • @mark69064
    @mark69064 ปีที่แล้ว +2

    我發現有些網站不能用下一頁的名稱去搜尋標籤好像會出錯說 "Unable to locate element",後來發現下一頁的按鍵有些會具有自己的class,所以也可以反過來用By.CLASS_NAME的方法來操作:D,像魔法一樣,好酷~

    • @cwpeng-course
      @cwpeng-course  ปีที่แล้ว

      實際上操作會有很多細節要處理,你有找到辦法來解決我相信感覺是不錯的 :)

  • @rickey-uh5hv9de6j
    @rickey-uh5hv9de6j ปีที่แล้ว +1

    ImportError: cannot import name 'webdriver' from partially initialized module 'selenium' (most likely due to a circular import) (C:\Users\User\OneDrive\桌面\code\python\selenium.py)
    老師,這個問題怎麼解決?

    • @cwpeng-course
      @cwpeng-course  ปีที่แล้ว

      自己的程式檔案名稱不要使用 selenium ~

  • @鬼無里-w6k
    @鬼無里-w6k ปีที่แล้ว

    一直有看老师的教学视频,解说很仔细也很清楚,如果点击下一页按钮做轮圈的话,改如何写,请指教😊

    • @cwpeng-course
      @cwpeng-course  ปีที่แล้ว +1

      大方向是:找到下一页的 Element,抓取出来模拟点击,然后再抓下一页的资料。细节就不太方便在留言处理了。

  • @derekh4298
    @derekh4298 ปีที่แล้ว +2

    大家可以試著用其他網站練習 順便練習眼力找想要的內容
    因為今天PTT在維修XD

    • @cwpeng-course
      @cwpeng-course  ปีที่แล้ว

      哈哈哈哈,我覺得是很棒的建議 :)

  • @stevenyshuang
    @stevenyshuang 2 ปีที่แล้ว +1

    folder doesn't exist :
    for i in imags:
    print(i['src'])
    jpg=requests.get(i['src'])
    endocing='utf-8'
    # file=open("/Beauty/test_[name].jpg",mode='w')
    file=open(r' C:\Users\steve\OneDrive\Desktop\Python\Beauty\test_{name}.jpg', mode="r+")
    file.write(jpg.content)
    file.close()
    name+=1
    試著抓圖,但 file=open(r' C:\Users\steve\OneDrive\Desktop\Python\Beauty\test_{name}.jpg', mode="r+")
    invalid arguemnt,可請老師解惑嗎?謝謝。

    • @cwpeng-course
      @cwpeng-course  2 ปีที่แล้ว

      jpg.content 會抓到的只是 HTML 程式碼的內部,不會真的讓你抓到圖片。要抓圖片要另外發連線到圖片的網址來抓,而且這個大概 Selenium 無法處理,整體來說會比你想像中的複雜很多,也無法在留言中簡短處理,不是單純的一個指令問題。

  • @jdenwong1469
    @jdenwong1469 2 ปีที่แล้ว +1

    老師想問一下,我跟着你的方法但是标题的text没显示出来?

    • @cwpeng-course
      @cwpeng-course  2 ปีที่แล้ว

      可能要看看是否有什么错误讯息,比较有机会对症下药哦

  • @大蟒蛇葛葛
    @大蟒蛇葛葛 2 ปีที่แล้ว +1

    老師想問一下,目前現在主流的爬蟲模組哪個是最常用的,以及它們的優劣勢

    • @cwpeng-course
      @cwpeng-course  2 ปีที่แล้ว +3

      其實我不知道主流的模組是什麼,Selenium 算是很主流的,能直接模擬使用者的操作很直覺,但比較慢。其他使用比較底層的 HTTP 連線來處理的操作方式會比較快,但網站分析起來要花更多時間。

    • @w96xjp4
      @w96xjp4 2 ปีที่แล้ว +1

      最近把老師前面的影片看了一下 包含了 urllib跟beautiful soup的爬蟲
      這樣看下來selenium算是她倆的綜合體?
      畢竟單靠selenium就可以對網頁發出請求也可以直接解析取得實際的標籤
      就好像parsel.Selector的功能

    • @josnlidonny
      @josnlidonny 7 หลายเดือนก่อน

      @@w96xjp4 Selenium vs urllib:
      Selenium: 主要用於自動化網頁操作,例如模擬使用者在網頁上的點擊、填寫表單等互動動作,進而抓取資料。它通常用於需要模擬人類操作或處理JavaScript動態生成的內容的情況下。
      urllib: 是Python內建的HTTP客戶端庫,主要用於從網路上下載資料,可以簡單地抓取靜態網頁內容。它不會自動執行JavaScript,因此對於動態生成內容的網頁或需要模擬人類操作的情況下效果有限。
      自動化和人機操作:
      Selenium: 可以模擬瀏覽器行為,例如點擊按鈕、填寫表單、捲動頁面等,能夠處理動態生成的內容,並且可以等待JavaScript加載完成後再抓取資料,適合於需要完整互動的網頁抓取應用。
      urllib: 簡單地下載靜態HTML內容,對於不需要互動的純靜態網頁或API呼叫較為合適。
      使用情境:
      如果你只是需要獲取靜態網頁的HTML內容,並且不需要模擬人類操作或處理動態生成的內容,那麼使用 urllib 和 BeautifulSoup 就足夠了,而且這種方法更輕量且效率較高。
      如果網頁內容是透過JavaScript動態生成的,或者需要進行互動操作才能獲取到完整的資料,這時候則需要考慮使用Selenium來模擬瀏覽器行為,以確保抓取的資料完整性和準確性。
      總結來說,選擇使用哪一種工具取決於你的需求,如果只是簡單的靜態網頁抓取,使用 urllib 和 BeautifulSoup 較為合適;如果需要模擬人類操作或處理動態生成的內容,則應該考慮使用Selenium。

    • @archer885
      @archer885 2 หลายเดือนก่อน

      @@josnlidonny 感謝哥

  • @王柏皓-c7p
    @王柏皓-c7p ปีที่แล้ว

    想請問發生以下error
    module 'selenium.webdriver' has no attribute 'find element
    版本為最新
    該如何解決

    • @cwpeng-course
      @cwpeng-course  ปีที่แล้ว

      可能只是忘了加底線 find_element

  • @yeee-c1j
    @yeee-c1j 2 ปีที่แล้ว +1

    請問老師,按下執行後要怎麼從原本上方編譯程式碼的位置,快速跳到下方輸入值的位置進行輸入?

    • @cwpeng-course
      @cwpeng-course  2 ปีที่แล้ว

      不好意思沒有很理解你的問題哦 ~

    • @yeee-c1j
      @yeee-c1j 2 ปีที่แล้ว

      @@cwpeng-course
      假設現在我有一個程式碼:
      a=input('輸入任意')
      print(a)
      當我編寫到print(a)的右括號時,不是會有一條一閃一閃的豎線等待我們再輸入些資料,那有甚麼快捷鍵能讓那條豎線的位置快速移動到下方執行區讓我們輸入資料,而不用在將滑鼠游標移到下方再點擊,再輸入資料,我是想問這個...

    • @sheep598
      @sheep598 ปีที่แล้ว +1

      @@yeee-c1j 如果你使用vs code,Ctrl +` 即可。 這是editor的內部指令

  • @wu520___
    @wu520___ ปีที่แล้ว

    想請問一下老師 如果我想要獲取文章裡面的內容的話我需要怎麼做

    • @cwpeng-course
      @cwpeng-course  ปีที่แล้ว

      在列表中找到文章網頁的連結,然後重新連結到文章的網頁,找到文章網頁中包含內容的標籤,用類似的手法取出來。

  • @李哲維-e6h
    @李哲維-e6h 2 ปีที่แล้ว

    新版的path是不是被移除了呀
    options = Options()
    driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=options)
    我目前建立物件是改用這樣的寫法

    • @mai6666
      @mai6666 2 ปีที่แล้ว +1

      driver的版本要下載得跟你目前的chrome相同
      我不確定需不需要完全相同,但至少大版本要相同 (104, 105, or 106)
      如 我目前使用的Chrome版本為105.0.5195.102,我就要去下載105.0.5195.52

    • @cwpeng-course
      @cwpeng-course  2 ปีที่แล้ว

      感謝大家的分享,確實 Driver 的版本要一模一樣才行 ~

  • @gostjoke
    @gostjoke 2 ปีที่แล้ว +1

    我自己工作常用 Selenium 還停留在使用3.多版本Q.Q"

    • @cwpeng-course
      @cwpeng-course  2 ปีที่แล้ว +1

      舊版有舊版的好,老人家都很懂珍惜身邊的好工具 XDDDD

  • @ananda4840
    @ananda4840 2 ปีที่แล้ว

    來囉🎉🎉

  • @GNSSA6213
    @GNSSA6213 2 ปีที่แล้ว +1

    老師請問一下怎麼儲存在檔案裡?
    for tag in tags :
    # print(.text)
    with open("data1.txt",mode="w",encoding="utf-8")as aa1:
    aa1.write(tag.a.string)
    driver.close()
    不知道為什麼都沒有寫入資料

    • @bittero4361
      @bittero4361 2 ปีที่แล้ว +2

      for tag in tags:
      print(tag.text)
      with open("data1.txt",mode="a+",encoding="utf-8") as aa1: ### w會複寫,建議改成a
      aa1.write(tag.text+"
      ") ###+
      是為了每個標題之間要換行
      driver.close()

    • @GNSSA6213
      @GNSSA6213 2 ปีที่แล้ว +1

      @@bittero4361 謝謝您! 可以了 你對我幫助很大

    • @cwpeng-course
      @cwpeng-course  2 ปีที่แล้ว

      感謝 @Bit Tero 的分享 :)

  • @jeffery88888
    @jeffery88888 2 ปีที่แล้ว

    請問可以找出網頁最新的即時標題嗎?

    • @cwpeng-course
      @cwpeng-course  2 ปีที่แล้ว

      試試看連到網頁後使用 driver.title

  • @ethanyu1822
    @ethanyu1822 ปีที่แล้ว

    老师好,如果页面弹出Accept cookies时,如何处理?使用模拟点击接受按钮吗?或者有更好的办法?谢谢~

    • @cwpeng-course
      @cwpeng-course  ปีที่แล้ว

      确实可以模拟点击的动作来处理,我这边暂时没有其他想法 ~

  • @tim9728
    @tim9728 2 ปีที่แล้ว +1

    新片RRRRRRRR
    開學了好難跟⋯😅

    • @cwpeng-course
      @cwpeng-course  2 ปีที่แล้ว

      哈哈哈,不用急著跟哪,慢慢來,我也沒辦法很快的速度新增內容,一個月頂多一到兩片而已。

  • @annababy823
    @annababy823 2 ปีที่แล้ว

    你好,我們想與你溝通合作,請問要如何聯繫?

    • @cwpeng-course
      @cwpeng-course  2 ปีที่แล้ว

      歡迎直接到教學的網站上,上面有我的個人資訊和聯絡方式
      training.pada-x.com/

  • @宥聖梁
    @宥聖梁 ปีที่แล้ว

    但是我的GoogleChrome在Downloads裡找不到要怎麼辦,然後執行程式也說沒有名為selenium的模組

    • @cwpeng-course
      @cwpeng-course  ปีที่แล้ว

      要從網頁上下載 ChromeDriver 的程式檔案,然後放到專案資料夾中。

  • @洪秉良
    @洪秉良 2 ปีที่แล้ว +1

    感謝彭彭老師的上課教學,我不是學程式的,不過因為某些原因突然想要了解Python,看了老師影片中深入淺出的解說,讓我了解程式語言的世界,原來程式並不是一件很難的事情(目前為止),可是我想加入會員,也想請教老師一些程式問題? 我有看了老師的加入會員影片,但是都只有網路信用卡付費方式,但我不習慣在網路或Google綁定信用卡,請問有額外付款方式嗎?? 或者有line可以聯繫嗎??謝謝您

    • @cwpeng-course
      @cwpeng-course  2 ปีที่แล้ว +1

      謝謝你的回饋,很高興這些免費的影片對你有幫助,這確實是我一開始分享的初衷 :)
      比較可惜的是實在沒辦法提供其他的付款方式,因為我們依賴 TH-cam 的系統來經營這些付費內容,對於教學者來說不用負擔很多額外的平台、款項、稅務等議題 ( 外包給 TH-cam ),所以我也不方便用私下的方式收您的費用,這點要和您說聲抱歉

    • @洪秉良
      @洪秉良 2 ปีที่แล้ว +2

      @@cwpeng-course 感謝您的回覆, 那我會儘快想辦法加入會員,謝謝, 另外請問會員詢問的問題也是公開的嗎?

  • @miku3920
    @miku3920 2 ปีที่แล้ว

    新版寫法有一點點不同

  • @油腻大蜀
    @油腻大蜀 2 ปีที่แล้ว

    搞不懂为什么
    AttributeError: module 'selenium.webdriver' has no attribute 'Chrome'

    • @cwpeng-course
      @cwpeng-course  2 ปีที่แล้ว

      程式碼應該要寫成這樣哦:
      from selenium import webdriver
      driver=webdriver.Chrome()