Python 網路爬蟲 Web Crawler 教學 - Request Data 操作實務 By 彭彭

Поділитися
Вставка
  • Опубліковано 13 гру 2024

КОМЕНТАРІ • 324

  • @吳榮興-m7r
    @吳榮興-m7r Рік тому +10

    感謝彭彭老師 ~ 今天實作後補充以下幾點
    Request Payload 第二項 "variables":{"paging":{"from":"10","limit":10}}
    from "10" 改成 0 可以從首頁第一篇文章開始擷取標題
    limit "10" 改成更大的數字可以擷取更多文章標題 (太多會被拒絕)
    想擷取更多可以搭配迴圈或函式

    • @cwpeng-course
      @cwpeng-course  Рік тому

      讚讚,很棒的分享,感謝 ~

    • @阿宸-i9r
      @阿宸-i9r 11 місяців тому

      太感謝了,我還想說是不是要分好幾個 graphql 去抓

    • @windtimy
      @windtimy 3 місяці тому

      感謝分享~

  • @H24721405
    @H24721405 3 роки тому +7

    謝謝老師因為網站更新,教我們更多的知識! 而且講解淺顯易懂,受益良多

  • @ChengJuCHEN
    @ChengJuCHEN Рік тому +4

    感謝老師
    2023/11/28日
    Medium網站要列印出的資訊如下:
    print(result["data"]["staffPicksFeed"]["items"][0]["post"]["title"])
    分享給大家

    • @阿宸-i9r
      @阿宸-i9r 11 місяців тому +2

      2023/12/25
      我是要改成
      print(result[0]["data"]["staffPicksFeed"]["items"][0]["post"]["title"])
      才能正常運作耶
      不過我有發現,requestData 那邊,我抓到的資料的開頭是 [ 而不是老師影片中的 {
      我不確定是不是這裡沒有做修改

    • @陳冠穎-b5q
      @陳冠穎-b5q 11 місяців тому +2

      @@阿宸-i9r 我看原始碼也認為print(result[0]["data"]["staffPicksFeed"]["items"][0]["post"]["title"])才對,可是我用上面的print(result["data"]["staffPicksFeed"]["items"][0]["post"]["title"])才顯示正常,用您說的那樣會報錯

    • @ye4011
      @ye4011 11 місяців тому +1

      @@陳冠穎-b5q +1 被第一個[0]誤導好久😐😐

    • @cwpeng-course
      @cwpeng-course  9 місяців тому

      感謝分享 :)

    • @cjbrown3396
      @cjbrown3396 8 місяців тому +1

      @@阿宸-i9r 請問一下 我今天使用的時候出現這個問題IndexError: list index out of range 可是檢查了一下print(result[0]["data"]["webRecommendedFeed"]["items"][0]["post"]["title"]) 不知道哪裡錯了@@ 謝謝

  • @bigorange3153
    @bigorange3153 3 роки тому +10

    老師您好,有兩個問題請教:
    1. 有沒有辦法用函式或模組判斷網站是一般html寫法還是AJAX技術?
    2. 請問爬取大量(上百個)不同網站時,有沒有一般性的辦法對付AJAX網頁?
    謝謝老師的回覆~

    • @minhanlin9061
      @minhanlin9061 3 роки тому +2

      卡一個,好棒的問題。

    • @cwpeng-course
      @cwpeng-course  3 роки тому +3

      1. 就我所知沒有簡單直接的自動化辦法,這是很困難的問題。
      2. 同上,可以補充的是 Google 正在這件事情上努力,有些成果但也沒有百分百完美。

    • @user-saint
      @user-saint 5 місяців тому

      1. 有個chrome擴充套件叫quick javascript switcher,可以將網頁的javascript屏蔽以測試你要爬取的目標資料是否受到AJAX所影響。這個chrome擴充套件你可以試試看。出自 "PyhonXChatGPT高效率工作術" 一書
      2. 問問ChatGPT可能有答案

  • @amelie1403
    @amelie1403 Рік тому +5

    關於爬蟲的深刻體悟:
    程式強不強是一回事,但觀察力是一定要有的...(可能還要有良好的視力🧐
    總算找到title在哪兒~藏得有夠深R
    謝謝彭彭老師

  • @ahwei
    @ahwei 2 роки тому +1

    感謝老師的教學!!
    這部影片的教學,本來我失敗了好多次(各種東西都改版了
    後來根據自己學習過的經驗,慢慢改良
    經過了一段時間,在今天終於成功爬到資料了,超感動QwQ

    • @cwpeng-course
      @cwpeng-course  Рік тому +1

      恭喜你順利爬到資料,而且自己研究出答案的感覺想必是很棒的 :)

    • @清水織娜
      @清水織娜 Рік тому

      我找不到,可以提點嗎,哈哈

  • @鄭介勛-h7s
    @鄭介勛-h7s 3 роки тому +4

    謝謝老師,每篇都有照著實做出來,非常開心。真的適合沒學過 Python 的人 ^^

    • @cwpeng-course
      @cwpeng-course  3 роки тому

      讚讚,很高興你有順利完成每個練習 :)

  • @Max-cj5jh
    @Max-cj5jh 2 роки тому +3

    2022/3/5 改成這樣就成功執行了~
    print(result["data"]["topic"]["latestPosts"]["postPreviews"][0]["post"]["title"])
    items = result["data"]["topic"]["latestPosts"]["postPreviews"]
    for item in items:
    print(item["post"]["title"])

    • @cwpeng-course
      @cwpeng-course  2 роки тому

      感謝分享 :)

    • @yaya230568
      @yaya230568 2 роки тому

      print(result["data"]["topic"]["latestPosts"]["postPreviews"][0]["post"]["title"])
      這一行一直跳出 錯誤碼說:
      File "crawler-ajax-data.py", line 17, in
      print(result["data"]["topic"]["latestPosts"]["postPreviews"][0]["post"]["title"])
      TypeError: list indices must be integers or slices, not str 🥲

    • @zozo4215
      @zozo4215 2 роки тому

      @@yaya230568 print(result[0]["data"]["topic"]["latestPosts"]["postPreviews"][0]["post"]["title"])  這樣就可以了

  • @kkitty1744tw
    @kkitty1744tw 7 місяців тому +1

    2024/4/30
    最近又改了
    其中觀察到items前面多了個數字
    也可以用for迴圈解決,改成以下就跑出來了
    for i in range(1, 10):
    print(result[0]["data"]["staffPicksFeed"]["items"][i]["post"]["title"])

    • @許庭庭-g2w
      @許庭庭-g2w 7 місяців тому

      請問大大 他的文章標題title目前放在哪裡呀 一直找不到😭😭

    • @cwpeng-course
      @cwpeng-course  6 місяців тому

      感謝你的分享,讚讚!

  • @umit0527
    @umit0527 23 дні тому +1

    2024/11/21
    1.現在chrome把request paload放在上面headers旁邊
    2.payload的原始碼中,在前面幾行的「{"to":"5","limit":5...」改成「{"to":"20","limit":20...」,就可以印出20行標題

    • @露卡露卡
      @露卡露卡 22 дні тому

      不好意思 我想請問我找不到彭彭老師說的Request Payload 請問您是在哪裡找到的

    • @umit0527
      @umit0527 22 дні тому

      @@露卡露卡 打開開發人員工具→網路→在左邊名稱找到你要的XHR→名稱的右右右邊有標頭、酬載...,那個酬載就是payload

    • @archer885
      @archer885 17 днів тому

      可以問一下你們是都有登入帳號才爬嗎?還是沒有登入就直接輸老師影片上的網址在code裡面直接執行

    • @umit0527
      @umit0527 17 днів тому

      @@archer885 你說google帳號嗎 一般都是有登入的 但沒登入應該也可以

    • @archer885
      @archer885 16 днів тому

      @ medium的,因為現階段查medium的網站 跑出來的格式跟老師影片中的不一樣,所以才想問是不是現階段要登入medium的帳戶才能進行老師影片裡的爬蟲程式

  • @黃小名-b6m
    @黃小名-b6m 3 роки тому +6

    感謝老師的用心教學 一直以來 都只看得懂老師的影片 希望能出關於刷題網站題目的教學影片
    最近看完了老師頻道的python入門和numpy教學 突然不知道下一步該做什麼
    然後聽網上建議 就去leetcode寫題目 結果發現連第一題都無法自己寫出來
    想請問老師 我現在應該做什麼比較好 同時真的也真心希望 老師能多出關於python 的影片 感謝!!

    • @cwpeng-course
      @cwpeng-course  3 роки тому +7

      我會考慮看看呦,謝謝你的建議。
      刷題這件事情本來就很難,第一時間無法自己寫出來是正常的,跟著別人的說明學習一次之後,過一段時間再回去重做第二次,還是不行自己寫出來,就同樣的程序再重新一次,最後就會有所進步了 :)

    • @黃小名-b6m
      @黃小名-b6m 3 роки тому +1

      @@cwpeng-course 原來如此~那我知道了 下次我會照著這個方法來練習 謝謝老師的耐心回覆及建議! !

  • @skylee1117
    @skylee1117 3 роки тому +2

    彭彭老師好,
    Medium似乎又改版,graphql內沒有如影片 12:55 中的Request Payload資訊

    • @ice0921
      @ice0921 2 роки тому +1

      可以看headers旁邊有個payload,似乎移到那裡了。

    • @cwpeng-course
      @cwpeng-course  2 роки тому

      感謝 @胡怡欣 分享 :)

    • @smallshawn95
      @smallshawn95 2 роки тому

      ​@@ice0921 謝謝,我本來也找不到,
      幸好看到這則留言~

  • @frankyang442
    @frankyang442 3 роки тому +3

    彭彭老師您好,
    請問爬Medium的時候,一般一個graphql只會載入20個post,必須卷軸往下才會繼續載入額外的文章(同時產生新的graphql),
    請問該如何讓爬蟲的程式模擬我們卷軸往下的操作,
    在載入新的文章後,會出現新的graphql,此時該如何一併寫入我們的結果,
    是要針對每個graphql做一樣的操作嗎( 加入requestData,發送請求並得到response,逐一output)
    但每一次的requestData跟result格式是否有可能改變?
    簡單來講就是有辦法一次爬取100個標題嗎 ?

    • @cwpeng-course
      @cwpeng-course  3 роки тому +2

      可以,但需要非常仔細的去分析 Request Body 的內容 ( 我們在這個影片中無腦剪下貼上的部份 ),理解他的分頁邏輯之後,就能寫程式去處理。

    • @kai_b2w
      @kai_b2w Рік тому +1

      去更改request data裡面"from" 和 "limit" 裡面的數字就可以決定從哪裡開始抓和抓幾篇了

  • @asdfrv2000
    @asdfrv2000 2 роки тому +1

    2022/3/3測試:title位置如下:
    qraphqi[0][data][topic][latesPosts][postPreviews][0][post][title]

    • @asdfrv2000
      @asdfrv2000 2 роки тому

      # 試著列印第一頁的標題
      print(result[0]["data"]["topic"]["latestPosts"]["postPreviews"][0]["post"]["title"])

    • @cwpeng-course
      @cwpeng-course  2 роки тому +1

      感謝分享 :)

  • @MartinChung-n8l
    @MartinChung-n8l 20 днів тому

    跟著彭老師的方法爬蟲教學,終於成功爬到我要的資料! 但還有一種情況尚未解決,就是在後台找到的真正資料網址往往都有一串沒有規律的數字,好像是被加密了似的.請問彭老師的短片庫中有沒有相關的教學?

  • @fongkou8840
    @fongkou8840 3 роки тому +4

    谢谢彭彭老师!!!看老師的课程讓人可以比較輕鬆的入門學習python

    • @cwpeng-course
      @cwpeng-course  3 роки тому +1

      讚讚,很高興對你有幫助 :)

  • @eventseng
    @eventseng 3 роки тому +2

    老師你好, 想請問老師 :
    result = response.read().decode("utf-8")
    result = json.loads(result)

    result = json.load(response)
    是相等的嗎
    json.loads 和 json.dumps 是相對的嗎, 謝謝老師

    • @cwpeng-course
      @cwpeng-course  3 роки тому

      json.loads(字串) 或者是 json.load(可讀取的物件) 所以是不同的。json.loads 和 json.dumps 是相對的沒錯。

    • @eventseng
      @eventseng 3 роки тому +1

      謝謝老師的解答

  • @trammoomm
    @trammoomm 3 роки тому

    謝謝彭彭老師的分享,試了好多次,終於出來,覺得開心~

    • @cwpeng-course
      @cwpeng-course  3 роки тому +1

      讚讚,很高興對你有幫助 :)))

  • @masaya5072
    @masaya5072 2 роки тому

    彭彭老師謝謝你從第一篇看到這裡,對於寫程式有些了解了

  • @邱子安-q6m
    @邱子安-q6m 3 роки тому +3

    可以問一下為什麼爬蟲爬到的內容有時候跟elements的內容不一樣 要怎麼樣可以抓取到elements裡面的內容

    • @cwpeng-course
      @cwpeng-course  3 роки тому +1

      elements 裡面的內容很可能是用前端程式動態產生的,我們會去直接分析背後的網路連線,你可以參考上一部教學關於 AJAX 網站模式的說明 ~

  • @shihosola
    @shihosola 3 роки тому +2

    老師你好,想請問老師
    在result=response.read().decode("utf-8")這個部分
    為什麼不能用result=json.load(response)來讀取呢?

    • @cwpeng-course
      @cwpeng-course  3 роки тому +1

      比較沒辦法自由處理細節的編碼,但如果你寫了發現一切正常運作,那也是可以的 ~

  • @hina19690304
    @hina19690304 5 місяців тому +2

    2024/7/8
    今天第一次看此影片,雖然跟影片中多少有點不同,但也盡量去修改並嘗試讀取資料了,順帶一題我是使用Edge瀏覽器
    有發現每一段graphql似乎都有限制只有5篇文章,編號為0~4,每篇的Request URL也長得一樣
    心想有限制也沒關係,但發現取得的網頁內容跟我用開發者人員選項看到的有所不同
    開發者選項裡順位第一個關於文章的資訊其內容是網頁第一篇到第五篇文章,但實際用Python跑出來的,雖然也是五篇文章,但並不是開頭那五篇
    F5重新整理幾次,再利用拿到的Request URL跟Request Data重複跑幾次,雖然文章每次可能不太一樣,但都不會是照順序的第一~第五篇文章
    那些跑出來的文章似乎也是網頁中真的存在的,但順序可能就會亂跳
    不清楚這情況是否正常,還是缺少了某些步驟去取得正確資料

    • @guavapig6567
      @guavapig6567 5 місяців тому

      請問你有找到"request payload"嗎?

    • @hina19690304
      @hina19690304 5 місяців тому +1

      ​@@guavapig6567 有
      只是edge的是翻成中文好像叫"承載"

    • @guavapig6567
      @guavapig6567 5 місяців тому

      @@hina19690304 thx!

    • @cwpeng-course
      @cwpeng-course  5 місяців тому

      感謝你的分享,很棒 :)

    • @windtimy
      @windtimy 3 місяці тому +1

      我猜測是因為 我們抓到的資料都是他預設給尚未登入的人的資料 (預設的那幾筆文章)
      登入後 會根據帳號喜好做推送,因此文章才都不一樣?
      我一次抓25筆,25筆都沒有顯示在我登入後的文章QQ

  • @王承翰-p9s
    @王承翰-p9s 2 роки тому +2

    老師您好,想請教您一些問題:
    1.medium好像又改版了,無論如何重整都找不到標題
    2.Request payload的位置好像也更改了,資料的呈現變得比較複雜,又如何去擷取真正所悉的資料?
    3.老師我在上完這門課後有嘗試去找其他網站練習,很多時真的都找不到網站標題所在的位置,請問若真的都找不到標題該如何解決?
    4.老師有推薦一些網站比較好練習爬蟲嗎?
    非常謝謝老師抽空回答! 這系列的影片受益良多~

    • @cwpeng-course
      @cwpeng-course  2 роки тому +4

      爬蟲的程式本身很依賴對網站的分析,而網站的設計方式有千百種,沒有唯一的解答,所以從這些教學中我們可以學到的是針對這幾個網站的分析方式,能否套用到其他網站則沒有一定,如果網站本身有改版,那也要重新分析處理。
      Dcard 或許你可以試試看。

    • @澳洲麵
      @澳洲麵 2 роки тому +4

      payload變成一個單獨的位置,不會放在headers裡面了,去headers的那一"列"找找
      他變成獨立的部分

  • @林宏濬-p2l
    @林宏濬-p2l 3 роки тому +2

    老師您好,關於最後的程式碼部分有一些問題想要請教您~
    老師您使用的語法是for迴圈
    items=result["data"]["extendedFeedItems"]
    for item in items:
    print(item["post"]["title"]
    但在老師您還沒有講解這個步驟前,我有自己思考一下要怎麼打出來,最後使用while迴圈
    x=0
    while x

    • @p3939889q
      @p3939889q 3 роки тому

      我也有這個問題 in items就會自動0-19的定義是甚麼~~

    • @p3939889q
      @p3939889q 3 роки тому +1

      看了後面回復我來回復你 影片的for item in item => item你換成i 不要被那個字搞混淆了 就是字典的概念而已 extendedFeedItems 這個東西代表列表 他前面的是字典

    • @cwpeng-course
      @cwpeng-course  3 роки тому

      感謝 @JJ Hermoso 的說明哦 :)

    • @cwpeng-course
      @cwpeng-course  3 роки тому +1

      通常還是會使用 for 迴圈配合列表來取資料,因為你無法確定對方會不會哪天就改變了資料數量,造成你的程式無法正常運作。

    • @林宏濬-p2l
      @林宏濬-p2l 3 роки тому +1

      感謝 @JJ Hermoso 和 老師的說明:)

  • @aaron1122
    @aaron1122 3 роки тому +3

    感謝彭彭老師,把python講的很好懂,讓我這個外行人有機會接觸python。
    想問老師以下問題:
    最後的result["data"]["extendedFeedItems"][n]["post"]["title"]
    [0]為何不用加引號寫成["0"]?
    還有是怎麼知道[0][1][2][3]那個叫做item的?
    謝謝老師!

    • @櫻太郎-k8k
      @櫻太郎-k8k 3 роки тому +3

      因為那個 0 是編號喔。寫成 “0” 是字串,寫成 0 是數字。
      像是
      a = ["A","B","C","D"]
      print(a[0])
      最後結果就會出現 A

    • @aaron1122
      @aaron1122 3 роки тому

      @@櫻太郎-k8k 喔喔 我懂了! 感謝你

    • @cwpeng-course
      @cwpeng-course  3 роки тому +1

      感謝 @櫻太郎 的說明,相當清楚 :)

  • @陳建豪-n4r
    @陳建豪-n4r 3 роки тому +1

    result["data"]["extendedFeedItems"] 這裡的result是字典 那後面的["data"]和["extendedFeedItems"]是list嗎 ?如果是list 用for跑的邏輯是甚麼? 混著的資料要怎麼用for跑

    • @cwpeng-course
      @cwpeng-course  3 роки тому +1

      觀察取得的資料後,我們會發現 result 是字典,result["data"] 是字典,result["data"]["extendedFeedItems"] 是一個列表。取得列表後可以用迴圈取得列表中的每一個項目。建議可以回顧一下基礎的部份 ~

  • @tunghuattie5830
    @tunghuattie5830 3 роки тому +1

    想要請問老師,每次的 轉編碼, 有 decode, encoding, 跟encode,通常分別什麼時候用decode,encoding,encode呢?

    • @cwpeng-course
      @cwpeng-course  3 роки тому +1

      沒有一定的時機,要理解它的原意:把文字轉成位元組叫做 encode,把位元組轉回文字叫做 decode,在傳遞資料的時候有這類的需求時就會進行處理。

  • @孫竟軒-r9t
    @孫竟軒-r9t 3 роки тому

    謝謝彭彭老師用心的教學,受益良多

  • @jelly97058
    @jelly97058 3 роки тому

    謝謝老師~按部就班寫出來好有成就感!

  • @CK-bu5wh
    @CK-bu5wh 3 роки тому +3

    老師 不好意思 想在這裡請問一下有機會會搞第2期的訓練營嗎 如果有的話大約什麼時候會有報名細節呢?
    感謝🥺

    • @cwpeng-course
      @cwpeng-course  3 роки тому +6

      會哦,會有第二期的訓練營,應該是會落在今年年底,有細節我會盡快讓大家知道 ~

    • @CK-bu5wh
      @CK-bu5wh 3 роки тому +2

      @@cwpeng-course 謝謝老師🙏🏻

  • @bluesky999936
    @bluesky999936 Рік тому +2

    簽到,2023實測程式仍可以正常抓取。只差在最後面json分頁名稱有點不同,改一下就可以正常抓取了,謝謝老師。另外有一點腦筋有點打結,在最後面print item迴圈,原本是用[0]去抓取對應的文章標題,但在迴圈卻不需要另外用數字參數就可以全部print出來。有點想不通為什麼,可以請老師解惑嗎 QQ

    • @cwpeng-course
      @cwpeng-course  Рік тому +1

      感謝你的實測回報,確實很多細節都要順著思考邏輯去重新觀察修正,畢竟網站本身是一直改動的。
      迴圈本身的用法是 for item in 列表: 就可以把列表中的每一個項目抓出來放到 item 中,所以就不用特別再寫編號了。

  • @路過的飄-u6b
    @路過的飄-u6b 3 роки тому +1

    老師可以請問一下
    為什麼 data=json.dumps(RequestData).encode("utf-8")
    ↑ 這個變數的名稱不能變更啊 ??
    我一開始是用其他名像RData , rdata 之類的,但發現都沒辦法執行
    換回data後才能正常運作

    • @cwpeng-course
      @cwpeng-course  3 роки тому

      可以變哦,但後續的程式有用到這個變數的部份也要更著改變 ~

  • @kentisking123
    @kentisking123 3 роки тому +1

    感謝老師,真的是解惑啊!

  • @林宥任-d1n
    @林宥任-d1n 3 роки тому +2

    期待下一篇

  • @beggar_consultant
    @beggar_consultant 2 роки тому +3

    老師你好,我找不到第5個graphql,打開了所有xhl都找不到那些標題,,請問該怎樣做,謝謝

    • @rabidu634
      @rabidu634 2 роки тому +1

      彭彭老師!我也有這個問題!( ・᷄ὢ・᷅ ),只有2個graphql,並且所有項目都找不到Request Payload

    • @cwpeng-course
      @cwpeng-course  2 роки тому +1

      上方的選項要選到 All 或 XHR,試著重新整理,多找幾次看看,應該是有的 ~

  • @pin-rongjhu3261
    @pin-rongjhu3261 2 роки тому +1

    老師你好,想請教一下request裡面因為payload所以附加一個data的資訊,想問data裡面的資料有限制是甚麼樣的格式嗎?字串?列表?字典?還是JSON?

    • @cwpeng-course
      @cwpeng-course  2 роки тому +1

      data 的資料必須是可疊代的位元組形式哦,我知道很難懂,但你可以查詢看看我提到的關鍵字。

  • @frankzhang6687
    @frankzhang6687 3 роки тому +1

    谢谢彭彭老师的课程。

  • @scottscott3987
    @scottscott3987 3 роки тому +3

    想請問老師為甚麼有時候解碼是用encode,有時候又是用decode

    • @kaokevin1775
      @kaokevin1775 3 роки тому +1

      卡一個

    • @cwpeng-course
      @cwpeng-course  3 роки тому +16

      encode 通常指的是把文字 (chars) 轉換成更原始的位元組 (bytes),decode 則是反過來。
      通常是送出連線的時候要把文字轉成更原始的位元組,取得資料的時候要把原始的位元組轉回文字。

  • @Ts2pc
    @Ts2pc 2 роки тому +1

    非常棒! 請問區塊鏈課程已有規劃時程了嗎? 可能會是哪條公鏈?

    • @cwpeng-course
      @cwpeng-course  2 роки тому +2

      還沒哦,應該是不會這麼快呀 XDDD

  • @huanggg9497
    @huanggg9497 2 роки тому +3

    老師您好,有個問題請教 :
    關於payload的數據,好像做了更新,複製後 在開頭的其中一段"variables":{"forceRank":true
    在執行代碼之後 電腦分辨不出來,跳出了NameError: name 'true' is not defined. Did you mean: 'True'? 的提示
    但是我改成了大寫的True之後 卻又無法從網頁中抓取到原始碼了。
    請問這該如何修正呢?

    • @huanggg9497
      @huanggg9497 2 роки тому +1

      剛剛加入了會員 竟然還有專屬會員的影片 也太物超所值了吧 老師真的很佛心

    • @cwpeng-course
      @cwpeng-course  2 роки тому +1

      如果是有包含 true 的話,確實要改成大寫的 True 沒錯。改好之後無法抓取的原始碼的部份,可能要看看是否有更進一步的訊息可以參考,循線去解決。

    • @windtimy
      @windtimy 3 місяці тому +1

      @@cwpeng-course 我改成大寫的 True 就可以了 感謝

  • @LeoLo-v7u
    @LeoLo-v7u 11 місяців тому +1

    想請問老師,我該怎麼知道什麼時候要用Request Data,或是什麼時候可以像抓取PTT那樣簡單爬蟲就好?

    • @cwpeng-course
      @cwpeng-course  10 місяців тому

      影片中應該有提到,透過工具觀察一下連線中是否需要帶入一些資訊輸入,如果要的話就要加上去。

  • @mingchan2682
    @mingchan2682 Рік тому +1

    感謝彭彭老師, 但今天做的時候, 出現了
    HTTP ERROR 405: Method Not Allowed
    是表示不能再用此方法🤔?

    • @cwpeng-course
      @cwpeng-course  Рік тому

      不一定,要看看程式中是否有任何細節的錯誤,然後才能做判斷 ~

  • @강몽이-t6b
    @강몽이-t6b 3 роки тому +2

    感謝彭彭老師的講解!因為本人還是一個準畢業生要寫論文,想請問老師會不會出一個教學python爬取論文標題和摘要的視頻呀(*¯︶¯*)

    • @cwpeng-course
      @cwpeng-course  3 роки тому

      謝謝你的建議哪,我會盡量參考,沒辦法保證能按照個別需求提供內容哦 @@a

  • @daniel860305
    @daniel860305 3 роки тому +1

    老師您好想詢問您,照著您的方法成功抓到文章標題了,但我發現排在網站上方的幾篇文章標題並沒有抓到,這是因為Medium網站把前幾篇標題放在其他地方的關係嗎? 謝謝~

    • @cwpeng-course
      @cwpeng-course  3 роки тому +1

      對哦,相當有可能是如此。你可以注意到他一個網頁的資料是由很多背景的連線組合而成,所以想要哪一部份的資料,就要去找背後對應該資料的網址,然後再用我們的爬蟲程式連過去抓取。

  • @yuwang5451
    @yuwang5451 2 роки тому +1

    老师,请问一下,为什么显示这个问题: print(result["0"]["data"]["topic"]["latestPosts"]["postPreviews"]["0"]["post"]["title"]) # 试着印出第一篇文章的标题
    KeyError: '0'

    • @MLCh3n
      @MLCh3n 2 роки тому +2

      0
      print(result["0"]["data"]["topic"]["latestPosts"]["postPreviews"][0]["post"]["title"])

    • @cwpeng-course
      @cwpeng-course  2 роки тому +1

      感謝 @Meng Lien Chen 解答 :)

  • @user-mn5gl7bu4n
    @user-mn5gl7bu4n 2 роки тому +1

    老師您好:
    我根據教學影片及修改成最新的title位置後,成功地爬出首頁標題了
    不過爬出來的第一篇文章標題,實際上是首頁的第11篇文章
    想要請問為何前面的10篇文章標題會消失爬不出來呢?

    • @cwpeng-course
      @cwpeng-course  2 роки тому +1

      猜測是你的 for 迴圈會把資料不斷的複寫,所以只能看到最後一筆資料,前面的都被蓋掉了。

    • @翁育瑜
      @翁育瑜 2 роки тому

      我也有疑問🤔️

    • @翁育瑜
      @翁育瑜 2 роки тому

      想請問怎麼解決謝謝🙏

    • @kai_b2w
      @kai_b2w Рік тому +1

      去更改request data裡面"from" 和 "limit" 裡面的數字就可以決定從哪裡開始抓和抓幾篇了

  • @黃柏文-v2q
    @黃柏文-v2q 3 роки тому +2

    老師我又來了! 為什麼這邊的json.loads 有加s ,之前台北市資訊的那部不需要s呢???

    • @劉昆琳
      @劉昆琳 3 роки тому +1

      www.geeksforgeeks.org/python-difference-between-json-load-and-json-loads/
      這篇應該可以幫助到你~~

    • @黃柏文-v2q
      @黃柏文-v2q 3 роки тому +1

      @@劉昆琳 謝謝你的幫忙! 也謝謝這個頻道~
      意思是 為 json 原編碼的data即利用json.load()即可,
      而被decode("utf-8")解碼過後會變為json 的字串型態 即需利用json.loads()嗎?!
      如果理解錯 希望可以指正~

    • @劉昆琳
      @劉昆琳 3 роки тому +1

      @@黃柏文-v2q 我的理解跟你差不多,所以在"網路連線程式、公開資料串接"這篇教學中,台北市的公開資料網頁為json格式,所以就使用json.load即可,而在"網路爬蟲 Web Crawler 教學 - Request Data 操作實務"這篇教學中,從Medium.com上抓取的資料為"字串型式",可以用type(result)這個函示去檢查,所以需使用json.loads將其轉為"字典型式",以上是我個人的理解,如果有誤還請大家多多指教,謝謝~~

    • @cwpeng-course
      @cwpeng-course  3 роки тому +1

      感謝 @劉昆琳 的分享,相信對大家都很有幫助的 :)

  • @david55621
    @david55621 3 роки тому +1

    請問老師未來有機會講道scrapy框架嗎?一直覺得老師的課講得很清楚,也比較習慣聽老師的課說

    • @cwpeng-course
      @cwpeng-course  3 роки тому +1

      目前沒有規劃,但很謝謝你的建議,我會考慮看看 :)

  • @sherynyong1987
    @sherynyong1987 2 роки тому +1

    老師,我上完了您所有的入門課程,首先感謝您用心的教學。想請問老師怎樣把最後讀到的數據逐行寫到excel?我上網研究了很久,知道pandas/openpyxl可以導出到excel,但是研究了很久都不太成功。跳出來總是說資料不符合dataframe的格式,請問老師可以給個代碼參考一下嗎?謝謝。

    • @cwpeng-course
      @cwpeng-course  2 роки тому +1

      建議直接輸出成 CSV 的格式,Excel 自然就可以相容了,你可以搜尋 Python CSV 處理這樣的關鍵字去找到相關的程式碼。

    • @sherynyong1987
      @sherynyong1987 2 роки тому +1

      @@cwpeng-course 好的,謝謝老師。

    • @sherynyong1987
      @sherynyong1987 2 роки тому +2

      @@cwpeng-course 老師,我研究出來了,把資料存到csv的程式碼,跟大家分享如下:
      result=json.loads(result)
      with open('Medium.csv', 'w', encoding='utf-8', newline='') as f:
      thewriter=writer(f)
      header=['Title']
      thewriter.writerow(header)
      items=result["data"]["topic"]["latestPosts"]["postPreviews"]
      for item in items:

      info=item["post"]["title"]
      thewriter.writerow([info])
      #使用writerow方法必須將字符串轉化成列表,否則就會一個字符占一個單元格。所以加上[ ]即可。

    • @cwpeng-course
      @cwpeng-course  2 роки тому +1

      讚讚,恭喜你順利完成,獨立解決問題很棒 ~

  • @Lo_Fi_made_in_A.I
    @Lo_Fi_made_in_A.I Рік тому +1

    謝謝澎澎老師的教學
    我卡在網頁資料分析那邊卡好久還是找不到標題
    索性就用其他資料去爬了
    也是可以抓出來東西但不知道在甚麼位置XDDD
    不知道老師有推薦哪個網頁可以方便爬蟲呢

    • @johnsonzhao9684
      @johnsonzhao9684 Рік тому +1

      medium還是抓的到阿,只是路徑需要找一下,跟老師影片的不同

    • @cwpeng-course
      @cwpeng-course  Рік тому +1

      感謝 @johnsonzhao9684 實測回報,確實很多細節都要順著思考邏輯去重新觀察修正,畢竟網站本身是一直改動的。

  • @vincentlien3891
    @vincentlien3891 3 роки тому +1

    請問老師為何requestdata是用"encode", response.read()是用"decode"呢?

    • @tg6640
      @tg6640 3 роки тому +14

      encode 是把字典轉換成字串(編碼)的意思
      decode 是把字串轉換成字典(解碼)的意思
      仔細想一下 Python 中 字典 和 字串 的區別和作用,
      字典可以方便我們拿資料, 比如 dictionary = {"a":1, "b":2} , 我們可以用 dictionary["a"] 拿到 a 的值 1
      雖然字串無法做到這點, 但我們需要字串來發送網絡請求
      所以我們先把 requestdata 從字典轉換成字串 (encode) 再發送出去
      收到 response 後再把它從字串轉換成字典 (decode) 方便我們拿資料

    • @cwpeng-course
      @cwpeng-course  3 роки тому +1

      感謝 @G T 詳細的說明,相信對很多人都很有幫助,讚讚 ~

  • @江坤諦
    @江坤諦 3 роки тому +1

    老師您好我想請問我按照影片的編碼 (但是網頁不同)在with req.urlopen那行出現HTTP Error 419: unknown status
    請問該怎麼解決

    • @cwpeng-course
      @cwpeng-course  3 роки тому

      以目前的資訊我無法有更進一步的判斷哦 ~

  • @ireneh1044
    @ireneh1044 3 роки тому +1

    彭彭老師您好,我想請問您
    如果得知網頁是json,也跟著您的步驟練習
    後來去抓其他的網頁,卻找不到您說requests payload
    這樣是該怎麼辦
    謝謝彭彭老師

    • @cwpeng-course
      @cwpeng-course  3 роки тому

      網站的狀況其實很多變,幾乎不太可能一一列舉,所以得實際看到底是哪個網站,要抓什麼資料而定 ~

  • @davidchen7364
    @davidchen7364 3 роки тому

    彭彭老師您好,我想請教您:跟著您的步驟練習,當執行程式時遇到以下問題,
    Traceback (most recent call last):
    File "crawler-ajax-data.py", line 11, in
    },data=json.dumps(requestData).encode("utf-8"))
    NameError: name 'requestData' is not defined
    如何解?

    • @cwpeng-course
      @cwpeng-course  3 роки тому +1

      可能前面的程式的 requestData 名字有打錯吧 ~

  • @許庭瑄-t8r
    @許庭瑄-t8r 2 роки тому

    老師您好:
    我參考了您爬蟲系列的影片後嘗試爬了591租屋網的資訊,但遇到以下問題:
    (1) 若我於headers後只加上資料所在實際網址及User-Agent二項資訊,剩下的一切皆按照影片中程式碼撰寫,console執行後會出現HTTPError: unknown status
    (2)若我於headers後加上資料所在實際網址、User-Agent、Content-Type("application/json")與requestData(view source後呈現的原始碼為is_format_data=1&is_new_list=1&type=1&)這幾項資訊,剩下的一切皆按照影片中程式碼撰寫,console執行後會出現 requestData= is_format_data=1&is_new_list=1&type=1&
    ^
    SyntaxError: cannot assign to operator 的錯誤訊息,想請問老師該如何解決此問題,感謝老師!

    • @cwpeng-course
      @cwpeng-course  2 роки тому

      requestData="is_format_data=1&is_new_list=1&type=1&" 要加雙引號。

  • @wHS-m1o
    @wHS-m1o 3 роки тому +1

    老師您好,照著做到decode的步驟後print 出來
    程式顯示NameError: name 'true' is not defined
    也檢查過程式碼了 不曉得哪邊出問題了?
    再麻煩您了

    • @李妍伶-y7w
      @李妍伶-y7w 3 роки тому +1

      我也有遇到同樣的問題!
      但把 true 改成 True 就可以了~~
      希望能幫到你!

    • @cwpeng-course
      @cwpeng-course  3 роки тому

      感謝 @李妍伶 的分享 :)

  • @tx1969
    @tx1969 3 роки тому +2

    请问老师requestData为什么要用json.dumps换成json格式啊,感谢

    • @tg6640
      @tg6640 3 роки тому

      不是转换成 json 格式, 而是转换成 string

    • @tx1969
      @tx1969 3 роки тому

      @@tg6640 明白了,谢谢啊

    • @cwpeng-course
      @cwpeng-course  3 роки тому

      感謝 @G T 的說明 :)

    • @張小照
      @張小照 3 місяці тому

      @@tg6640 那應該是把資料從字典轉成字串才對,影片裡彭彭老師講解時剛好反過來了~

  • @唯唯唯-k9p
    @唯唯唯-k9p 3 роки тому +1

    老師我遇到問題了
    程式碼:(註:posts是老師改成items前的程式碼)
    posts=result["data"]["extendedFeedItems"]
    錯誤訊息:
    TypeError: list indices must be integers or slices, not str
    請問我該怎麼解決呢 有google過 但好像....找不太到解決方法

    • @brady_guo7330
      @brady_guo7330 3 роки тому +1

      資料型態有變喔 你試試 posts=result[1]["data"]["extendedFeedItems"]

    • @cwpeng-course
      @cwpeng-course  3 роки тому +1

      感謝 @矇矇 的分享,讚讚 ~

    • @AK-di6xs
      @AK-di6xs 3 роки тому

      我找問題了 他的資料庫形式有改 字典最前面多一個[0]
      你把print(result["data"]["extendedFeedItems"][0]["post"]["title"])
      改成print(result[0]["data"]["extendedFeedItems"][0]["post"]["title"])
      註解掉後 後面一樣參考老師的打法 只是新的資料形式前面一樣要多一個[0]
      items=result[0]["data"]["extendedFeedItems"]
      for item in items:
      print(item["post"]["title"])
      我也撞到這個問題找了好久 自己找到解答好有成就感 感動 謝謝彭彭老師

    • @AK-di6xs
      @AK-di6xs 3 роки тому

      @@cwpeng-course 自己去化問題好有成就感 雖然找到解答之前很痛苦 感謝彭彭老師的教學~

  • @詹力臻-y5s
    @詹力臻-y5s 6 місяців тому +1

    老師你好,我從前一部影片練習時爬到網站標題的地方點選payload,但網站顯示的payload=to=1717572574018&ignoredIds=33e743431419&ignoredIds=803bff156c94&ignoredIds=e01ff8f55ad5&page=5,所以在跑程式的時候,他說這不是json格式出現error。我下一步應該怎麼解決呢?可是點選其他地方都沒有網站標題了...

    • @cwpeng-course
      @cwpeng-course  5 місяців тому

      這個確實不是 JSON 格式,這是另外一種格式叫做 application/x-www-form-urlencoded,你可以試著把 Content-Type 改成上面那段格式名稱看看。

  • @許庭庭-g2w
    @許庭庭-g2w 7 місяців тому +1

    彭彭老師您好打擾了,想請問為什麼會出現以下錯誤
    程式碼
    print(result[0]["data"]["webRecommendedFeed"]["items"][0]["post"]["title"])
    錯誤訊息
    print(result[0]["data"]["webRecommendedFeed"]["items"][0]["post"]["title"])
    KeyError: 'data'
    他的意思是找不到這層資料嗎?😭😭
    研究好久了,都研究不出來😔
    在這邊先謝謝彭彭老師仔細的教學,讓我對爬蟲跟程式終於有點概念,教得很仔細~!
    謝謝辛苦了!🙇‍♀

    • @cwpeng-course
      @cwpeng-course  5 місяців тому

      就是結構中沒有 data 對應的資料。這段要根據實際上取得的資料結構來做對應的調整,我估計網站本身已經更新過了,所以要仔細去確認實際上抓到的資料長相來處理。

    • @howshy
      @howshy 4 місяці тому

      請問你解決了嗎? 我也遇到一樣的問題

  • @Lees5366
    @Lees5366 7 місяців тому +1

    27:24 老師每次說印出來印出來的時候 我都想到印粗8 哈哈XDD

  • @yihrenchen
    @yihrenchen 2 роки тому

    老師您好
    請問一下 我照著您的方法試了一下 可是在 標頭 裡面 只有回應標頭跟要求標頭 沒有 request payload 可是有多了一個承載 裡面有兩個一個要求乘載跟檢視來源 但是資料都是一點點而已 謝謝

    • @cwpeng-course
      @cwpeng-course  Рік тому +1

      網站顯然是有改版了,所以很多東西不會完全一樣,可能找找 graghql 這個路徑的連線吧 ~

  • @shing-b9o
    @shing-b9o 2 роки тому

    為何這篇的,items=result["data"]["extendedFeedItems"]
    for item in items:
    print(item["post"]["title"])
    這裡的items就不像AJAX / XHR 那篇的posts一樣,那篇的posts是字典的形式而這裡的items好像卻不是字典形式?該怎麼分辨是不是字典?(有看過可疊代資料型態那篇了)
    上次有問過AJAX那篇posts的問題,這裡想要再兩個比較看看謝謝老師

    • @cwpeng-course
      @cwpeng-course  2 роки тому

      字典會是 {} 包裹,列表會是 [] 包裹。然後要根據實際抓到的資料去調整程式。

  • @jinshuaigan6112
    @jinshuaigan6112 3 роки тому +1

    请问老师,我在爬数据的时候,找到了request payload, run的时候出现NameError: name 'false' is not defined, 这个false 隐藏在request data里面,怎么处理

    • @jinshuaigan6112
      @jinshuaigan6112 3 роки тому

      我解决了这个问题,但是Content-type: application/json; charset=utf-8 后面这个charset=utf-8是做什么的,我还是会有错误urllib.error.HTTPError: HTTP Error 500: Internal Server Error

    • @cwpeng-course
      @cwpeng-course  3 роки тому +1

      500: Internal Server Error 代表对方的伺服器程式接收爬虫发出的要求时,产生错误,为什么会产生这个现象的实际原因还很难说。 charset=utf-8 只是代表传递的内容使用 utf-8 编码。

  • @jackylin2935
    @jackylin2935 3 роки тому +1

    老师你好,请问 encode(“utf-8”) 和 decode(“utf-8”)之间有什么区别

    • @cwpeng-course
      @cwpeng-course  3 роки тому +1

      encode 是把文字转换成位元组 (bytes),deocde 是反过来 ~

  • @fffffffff543
    @fffffffff543 2 роки тому

    再請問另一個問題,我看老師下指令使用utf-8的時候,有時候用encode("utf-8"),有時候用decode("utf-8"),請問這是為什麼? 該怎麼判斷何處該用哪一種? 謝謝

    • @cwpeng-course
      @cwpeng-course  2 роки тому +2

      encode() 是把字串變成位元組,decode() 就是把位元組轉回字串。所以如果取得的資料是位元組的形式,想轉成字串處理,就會用 decode(),例如從網路的回應取得的原始資料就是位元組的形式。

    • @kai_b2w
      @kai_b2w Рік тому +1

      @@cwpeng-course 老師那請問為什麼一開始拿到requestData時要先encode呢? 一開始拿到的原始資料不是就是位元組了嗎?

  • @客家饒舌執牛耳
    @客家饒舌執牛耳 3 роки тому +1

    感謝老師 ,但medium 網站好像又更新了
    變相下滾動 title會自動增加
    request數目也會動態增加

    • @cwpeng-course
      @cwpeng-course  3 роки тому

      能夠抓到一開始的內容就算成功了,滾動後新增的內容也可以找到對應的連線資訊的 ~

  • @張小照
    @張小照 3 місяці тому +1

    終於進步到22集啦

  • @jeffery88888
    @jeffery88888 Рік тому

    請問老師,我也可以用requests方式模組來發出請求嗎? 這時候用get是不是不太能用,我上網查是要用POST發請求,這兩者的主要差異在哪呢?

    • @cwpeng-course
      @cwpeng-course  Рік тому

      可以使用 requests,基本概念和內建的模組是一樣的,因為 requests 也是基於內建的模組做包裝,語法有差異而已。

  • @yingdazo
    @yingdazo Рік тому +1

    他現在payload那邊裡面的內容有一項是......"variables":{"forceRank":true,"paging":{"limit":5}}....,其中那個true的t是小寫一直被python報錯...

  • @陳立杰-r1h
    @陳立杰-r1h 10 місяців тому +2

    現在2024年2月16日 是不是又改了?找不到那個XHR是正常的嗎?

    • @cwpeng-course
      @cwpeng-course  9 місяців тому +2

      網站通常不喜歡爬蟲,而且也是會一直改版的。所以學爬蟲要學核心的思考和觀察方式,然後根據最新的狀況去找到關鍵點、調整細節 ~

  • @吳東駿-p7r
    @吳東駿-p7r 3 роки тому +1

    彭彭老師,請問如果出現Internal Server Error怎麼辦,謝謝老師

    • @cwpeng-course
      @cwpeng-course  3 роки тому +1

      這代表對方的伺服器出現錯誤,如果確認我們這邊發出的 Request 是正確的,那通常就無解,是伺服器端的問題

  • @yaya230568
    @yaya230568 2 роки тому

    老師你好 請問
    到17行哪裏
    result=json.loads(result)
    items=[0]["data"]["topic"]["latestPosts"]["postPreviews"]
    一直跑出錯誤碼 如下:
    TypeError: list indices must be integers or slices, not str
    謝謝老師

    • @cwpeng-course
      @cwpeng-course  2 роки тому

      你貼的程式似乎是有點不對?實際上若網站的結構有所更動,我們就得根據抓到的資料格式,來判斷這整段應該怎麼寫才會正確 ~

    • @change8139
      @change8139 2 роки тому +1

      要再寫一個for去抓後面的值
      EX:
      posts = result[0]["data"]["topic"]["latestPosts"]["postPreviews"]
      for item in posts:
      print(item["post"]["title"])

  • @黃小名-b6m
    @黃小名-b6m 3 роки тому +1

    medium 網站好像又改寫法 剛看 它裡面的 graphql 和 data的內容和影片中不一樣 找不到和影片中一樣標籤

    • @cwpeng-course
      @cwpeng-course  3 роки тому +2

      graphql 應該是還沒有改,他有很多個,要小心地找 ~

    • @黃小名-b6m
      @黃小名-b6m 3 роки тому +1

      @@cwpeng-course 好的 那我再找找看 感謝老師 ! !

  • @collyyang9664
    @collyyang9664 2 роки тому

    2022/12/18更新後也可用

  • @張育豪-v6k
    @張育豪-v6k 3 роки тому

    彭彭老師好 想問"medium網站"尚有其他標題,想要爬下全部標題。但它們藏在不同graphql裡頭 且 Request Payload都不同。 請問這樣有辦法抓全部Request Payload中的代碼嗎? 網站這樣設是不是想避免有人輕易爬下全部資料,所以故意分流。 請問有辦法嗎@@? 麻煩彭彭老師了

    • @cwpeng-course
      @cwpeng-course  3 роки тому +1

      你得把它們背後相關的連線全部找出來,然後一個一個去爬取。
      通常不是刻意為了避免爬取,只是單純這樣設計對他們網站開發比較方便而已,但其實我們無法去 100% 判斷別人的團隊做這件事情的意念是什麼。

  • @簡祥育-h1h
    @簡祥育-h1h Рік тому +1

    想問老師是如何判斷網站需要複雜的請求

    • @cwpeng-course
      @cwpeng-course  Рік тому

      按照影片中的展示,使用開發人員工具去觀察連線的細節來判斷

  • @黃啟元-e5q
    @黃啟元-e5q 3 роки тому +1

    老師:
    這裡的result=json.loads(result)和
    [2018年6月11日Python 網路連線程式、公開資料串接影片裡的]data=json.load(response)
    在load後面差了一個s,似乎也不能替換,請問差別在哪裡和各要用在什麼地方呢?

    • @cwpeng-course
      @cwpeng-course  3 роки тому +1

      使用的語法是 json.load(可讀取的物件) 另外一個是 json.loads(字串)。所以確實不能替代,而是看當下我們想要轉換的內容是可讀取的物件 ( 例如檔案物件、網路回應物件 ) 或是字串來決定。

    • @黃啟元-e5q
      @黃啟元-e5q 3 роки тому

      謝謝老師的回覆

  • @max200620072
    @max200620072 3 роки тому

    請問老師這是怎麼回事
    PS C:\Python Training> python crawler-ajax.py
    File "C:\Python Training\crawler-ajax.py", line 12
    with req.urlopen(request) as response:
    ^
    SyntaxError: invalid syntax

    • @cwpeng-course
      @cwpeng-course  3 роки тому

      光是錯誤訊息看不太出來,可能需要完整的程式碼 ~

  • @DA-bj5pr
    @DA-bj5pr 3 роки тому +1

    請問老師 出現403禁止訪問 但是都有用headers

    • @cwpeng-course
      @cwpeng-course  3 роки тому

      要看看細節的程式才知道是否有什麼問題哦 ~

  • @hsiuy.8099
    @hsiuy.8099 2 роки тому +1

    請問medium是不是又改版了,可以用HTML的方式抓取對嗎?

    • @cwpeng-course
      @cwpeng-course  2 роки тому +1

      改版是很有可能的,所以爬蟲我們要學的是其中分析的方法和精神,網站持續會改版,寫爬蟲的人都要持續去調整自己的程式來應對。

  • @yafenke9366
    @yafenke9366 3 роки тому

    老師,你好,
    我只先做到印出程式碼就出問題了,回復的錯誤如下:
    C:\Users\user\AppData\Local\Programs\Python\Python39\python.exe: can't open file 'C:\Users\user\Desktop\python training\crawler.py': [Errno 2] No such file or directory
    我重複對了好幾遍還是不知道錯在哪,希望老師可以告訴我有可能錯的地方,謝謝。

    • @cwpeng-course
      @cwpeng-course  3 роки тому

      試試看建立的資料夾名稱中間不要使用空白 ~

  • @02王冠文andy
    @02王冠文andy Рік тому

    老師請問一下
    我複製payload 中的 {"forceRank": true, "paging": {"limit": 5}} 的true 一直顯示錯誤,說沒有被定義,請問要怎麼解決,謝謝

    • @cwpeng-course
      @cwpeng-course  Рік тому

      把 payload 中的 true 都改成 True 試試看。

  • @littygm33597
    @littygm33597 2 роки тому +1

    網站似乎再次更新了,這個網站看來是很討厭被人爬Xd(不過其實大部分網站都討厭?
    話說google在同時間爬取大量網站的資料這件事情上努力,但是一般網站並不喜歡被爬,那google這麼做不會被討厭嗎?

    • @cwpeng-course
      @cwpeng-course  2 роки тому

      網站經營者基本都不喜歡對自己無益的爬蟲,把立場轉換一下就可以理解了。Google 爬蟲對網站經營者來說可以帶來流量,自然就不排斥,甚至希望 Google 爬越多越好。

  • @506841
    @506841 2 роки тому

    老師您好:
    我在headers內加了"apitoken"執行後結果會噴錯,跳出關於這行「with req.urlopen(request_2) as response:」且說HTTPError: Internal Server Error,想請問是什麼原因呢?

    • @506841
      @506841 2 роки тому

      我找到原因是什麼了,不用勞煩老師了🤣

    • @cwpeng-course
      @cwpeng-course  2 роки тому

      讚讚,有解決就好 :)

  • @fffffffff543
    @fffffffff543 2 роки тому

    原本跟著上一篇做的時候怎麼做都失敗,我還以為不知道是哪裡弄錯了,看到這裡才知道原來是那個網站改版了,原來需要這樣做才會成功,目前是有成功的,附帶一提現在又有小改了,範例中的result有五層[" "]就抓的到標題,現在中間變成八層了

    • @cwpeng-course
      @cwpeng-course  2 роки тому

      感謝分享,爬蟲和網站之間就是一個對立的概念,網站有所更動爬蟲就必須跟著調整。所以學習的時候,要學到核心的思考和網站分析方式 ~

  • @leeejeff262
    @leeejeff262 2 роки тому

    老師mua😘愛死你了

  • @ztainxiang
    @ztainxiang 2 роки тому

    老師好,我用urllib模組進行連線可以成功,不過改用requests模組連線卻得到403,請問是因為requests模組有什麼限制嗎?

    • @cwpeng-course
      @cwpeng-course  2 роки тому

      應該不是什麼特別的限制只是沒處理好細節而已 ~

  • @Hakudaku
    @Hakudaku Рік тому

    又又又改版了 現在的連線不會一次把含標題的資料一次回傳 會有好幾個含有標題資料的 graphql 回傳
    雖然可以抓到標題 但是不是我想要的標題
    請問該如何特定某個graphql 或是依序做處理呢
    我發現我抓到的標題大概是在好幾個graphql中偏中間的

    • @kai_b2w
      @kai_b2w Рік тому +2

      去更改request data裡面"from" 和 "limit" 裡面的數字就可以決定從哪裡開始抓和抓幾篇了

    • @cwpeng-course
      @cwpeng-course  Рік тому +1

      感謝 @K先生 的說明,確實如此 :)

  • @wiernfwvn
    @wiernfwvn 2 роки тому

    老師你好,我在requestData=Request Payload
    複製貼上但顯示錯誤,我找一找結果是{"forceRank":false這部分錯誤我應該加上引號嗎?
    這是Payload的程式碼(完整的複製貼上,回去看他真的這樣寫)

    • @wiernfwvn
      @wiernfwvn 2 роки тому

      謝謝老師

    • @wiernfwvn
      @wiernfwvn 2 роки тому

      還是將 f 改成大寫

    • @cwpeng-course
      @cwpeng-course  2 роки тому +1

      可以將 f 改成大寫試試看。

  • @saaf4027
    @saaf4027 3 роки тому

    你好 老師 也不知道有什麼問題
    File "crawler-ajax-data.py", line 10
    "user-agent":"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36",
    ^
    SyntaxError: invalid syntax

    • @cwpeng-course
      @cwpeng-course  3 роки тому

      是否可以看看完整的程式碼呢?可能是後面的 , 多出來的問題,也可能是其他問題

  • @曾俊瑋-b3l
    @曾俊瑋-b3l 3 роки тому +1

    老師可以教如何防止被反爬蟲嗎??? 謝謝彭彭老師

    • @cwpeng-course
      @cwpeng-course  3 роки тому +1

      一般常見的會使用 reCAPTCHA 這個工具可以有效地防止大多數爬蟲,但沒有絕對萬無一失的方法 ~

  • @williamkau326
    @williamkau326 2 роки тому

    想請問:
    requestData的部分出現NameError:name 'false' is not defined,如何解決

    • @cwpeng-course
      @cwpeng-course  Рік тому

      把 false 改成 False 嘍

    • @williamkau326
      @williamkau326 Рік тому

      @@cwpeng-course 那個false是直接包含在requestData中的,直接被我複製貼上

    • @williamkau326
      @williamkau326 Рік тому

      @@cwpeng-course這是我的requestData: [{"operationName":"WebInlineRecommendedFeedQuery","variables":{"forceRank":false,"paging":{"to":"10","limit":5,"source":"3b26c279-4ab7-45b2-8ece-fa7cf416d42e"}},"query":"query WebInlineRecommendedFeedQuery($paging: PagingOptions, $forceRank: Boolean) {
      webRecommendedFeed(paging: $paging, forceRank: $forceRank)

    • @cwpeng-course
      @cwpeng-course  Рік тому

      @@williamkau326 我知道,試著改成 False 看看,在 Python 裡面布林值就必須寫成大寫的 False

  • @marsj4252
    @marsj4252 3 роки тому

    彭彭老师,想加入您的专属课程会员,但是大陆无法paypal支付,有别的方式能支付吗?或者怎么私聊您?

    • @cwpeng-course
      @cwpeng-course  3 роки тому

      看起来您已经加入了呀,欢迎欢迎 :) 原则上就是透过 UA-cam 的机制来处理哦,没有特别额外的方式。

    • @marsj4252
      @marsj4252 3 роки тому +1

      @@cwpeng-course 找了个paypal代付,付了双倍的价格,才得以订阅

  • @nick61104
    @nick61104 3 роки тому

    老師想請問一下如果想用pandas
    去讀他的json資料
    但也是出現權限被拒絕該怎麼解決

    • @cwpeng-course
      @cwpeng-course  3 роки тому

      Pandas 應該沒有處理網路連線的事情,你要使用 Pandas 處理資料,還是要先確認爬蟲相關的程式能否抓到資料,權限被拒可能就是沒有成功抓取到資料而已。

  • @pythonsuper724
    @pythonsuper724 3 роки тому

    老师你好,我写了一段代码,会报出以下错误:
    TypeError: unbound method harry_input() must be called with HarryPython instance as first argument (got nothing instead)
    代码如下:
    class HarryPython:
    def harry_print(a):
    print(a)
    def harry_input(b):
    input(b)
    def harry_ord(o):
    ord(o)
    r=HarryPython.harry_input()

    • @chendk4644
      @chendk4644 3 роки тому

      基本語法錯了,你要重新看彭彭老師關於class的應用基礎和進階你就會明白

    • @cwpeng-course
      @cwpeng-course  3 роки тому

      感謝 @chen Dk 的說明哦 :)

  • @翁嘉偉-w4y
    @翁嘉偉-w4y Рік тому

    老師好,謝謝老師的教學,這個網站好像又改過了,我貼上新的request payload到requestData裡,但就出現bug了,bug的意思有點像是說requestData有錯,但只是複製貼上而已,並沒有去更改,不知道可不可以麻煩老師在教我們一次,初學者沒有經驗,不知道錯在哪裡就卡住了。

    • @cwpeng-course
      @cwpeng-course  Рік тому

      爬蟲爬取網站的資料,其實一直都是站在網站開發者的對立面,網站有任何更動爬蟲程式都很容易失效要調整。因此建議就試著從影片中抓住關鍵的思考和分析方式,再想辦法延伸到新的狀況中。
      有時間我會再多提供一些例子 ~

    • @翁嘉偉-w4y
      @翁嘉偉-w4y Рік тому

      真的很謝謝老師,網頁爬蟲本就不是很好學,因為網站是一直持續更新且新技術是一直出來的

  • @치엔제이크
    @치엔제이크 3 роки тому

    若網站是Form Data 形式的話, requestData要怎麼寫呢?
    謝謝老師!

    • @cwpeng-course
      @cwpeng-course  3 роки тому

      Content-Type 要設定成 application/x-www-form-urlencoded。
      requestData 就寫 x=3&y=4 這種格式。

  • @victor1217068
    @victor1217068 3 роки тому

    老師你好
    在撰寫request時
    request = req.Request(url, headers={
    "Content-Type": "application/json"
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36 Edg/96.0.1054.62"
    }, data=json.dumps(requestData).encode("utf-8"))
    卻跑出錯誤
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36 Edg/96.0.1054.62"
    ^
    SyntaxError: invalid syntax
    想請問我這部分是哪裡有問題呢?

    • @cwpeng-course
      @cwpeng-course  2 роки тому

      "Content-Type" 這一行的最後面少了一個逗號

  • @lkkykk8009
    @lkkykk8009 3 роки тому

    如果 WebServer 有用 session 技術,可以把網頁抓下嗎?

    • @cwpeng-course
      @cwpeng-course  3 роки тому

      可以,但需要的技巧又更多了 ~~~~