老師您好,想結合上次學的串接網路資料 將爬蟲結果印出在一個文字檔案上面。 以下是我的思考邏輯: 因為會印出標題的是這段程式碼 import bs4 root=bs4.BeautifulSoup(data,"html.parser") titles=root.find_all("div",class_="title") #找尋class="title"的div標籤 for title in titles: #如果有a就印出來 if title.a != None: print(title.a.string) 所以我只要將他原本會印在終端機上面的指令改成輸出txt的指令 所以我就稍微改了一下: import bs4 root=bs4.BeautifulSoup(data,"html.parser") titles=root.find_all("div",class_="title") #找尋class="title"的div標籤 with open("data.txt","w",encoding="utf-8") as file: #開啟文字檔 for title in titles: #如果有a就印出來 if title.a != None: file.write(title.a.string+" ") #印出爬蟲內容 可是執行起來都只能印出第一頁的內容,想問為什麼會這樣? 是不是我程式碼的位置放錯了? 再請老師幫忙解答了,謝謝彭彭老師!
for title in titles: if title.a !=None: print(title.a.string) # 若標題含a nextlink=root.find("a",string="‹ 上頁") # 找到內文是‹ 上頁 的 a 標籤 請問老師 同樣是標籤內的a 為何一為變數 另一是字串?
for abc in titles: print(abc.string) 我在stackoverflow看到他這樣建議 soup.findAll(True, {'class':['abc', 'edf']}) 那我這樣改 root=bs4.BeautifulSoup(data, "html.parser") titles=root.find_all{'span':['abc', 'edf']}) for abc and edf in titles: print(abc.string) print(edf.string) 好像不太像樣XD 如果再複雜一點,除了span之外,還有a標籤,都可以這樣加嗎
本來想去Python報名課程,還好有看到老師的教學頻道,老師真的幫很多人省了很多錢,之前有去補過其他的,能像你一樣教的淺顯易懂的老師真的不多,而且麥克風的聲音聽起來也很舒服,不會有沙沙的聲音
謝謝你用心的回饋,能夠幫上大家的忙我覺得很愉快,一起加油嘍 :)
確實~~ 我已經上過很多很貴的課程了 有些是大專院校推廣部的 但好像彭老師得更好懂
一路看到這邊真的越看越感動!老師讓我覺得世上又多了一個善良的人!
謝謝你的回饋 :)
好
幹從頭看到這裡真的 很 值 得!!!
前面學到的字串、字典、迴圈、函數、網路連線等等,到了爬蟲這個部分都用到了!
我本來還以為字典怎麼這麼拉基,還要自己去定義單字和意思,後來才發現字典的功能完全不只是這樣。
除此之外我還大致了解了cookie這個東西,以及如何去爬蟲多個頁面!
我以為開放式課程是不可能有這麼清楚的收音以及淺顯易懂的教學,直到我看了彭彭老師的課程。
除了感謝彭彭老師還是感謝。
那在以老師的程式碼為基礎下,我有試著運用了前面講的檔案讀寫的程式碼,並且試著抓了八卦版的50個頁面的資料寫入到檔案中,有一個地方困擾了我很久,就是要對檔案使用讀取(r)、還是寫(w),之後上網爬了文才知道是要用append(a),一開始一直用w導致檔案每次都被新的一頁覆蓋掉。
感謝你的分享和這麼詳細的心得回饋,很高興對你有幫助哦 :)))) 後面能夠自己解決一些細節的問題表示你學得相當不錯了呢 ~~
如果世界上每一個老師都跟你一樣那就太棒了!! 謝謝老師~~
謝謝你這麼說 :) 我要繼續加油才行惹 ~~~~~~
我是对编程零基础的小白,年龄有大没有信心学习了,但是自从发现老师的视频以后对学习python有了兴趣和信心。感谢老师细心详细的视频讲解 !
谢谢你分享自己的状况让我知道,很高兴对你有帮助 :)
想學Python剛好看到老師的頻道,每天下班從這系列看到現在
收穫太多了,謝謝彭彭老師!
很高興對你有幫助 :)
感謝老師清楚的教學~抓到資料好開心!!
好哦!不會 :)
恨不得按100個讚阿~~ 超詳細講解,感謝彭彭老師!
哈哈哈哈,謝謝你的回饋壓 :))))
很有成就感~希望老師繼續拍有關python的影片
很高興對你有幫助,會哦,原則上會持續有新的教學 :)
謝謝老師! 教得很詳細!
我自己土炮弄了一個部落格 (很簡單的用html+css) 然後用 Apache 裝在不要的電腦上 (設定什麼的都還沒看老師另外的教學影片,單純自己挖網路上的資源東補西補...很破爛XD),設定好網路連線後再利用 openssl 上鎖頭。學完老師的 Python 爬蟲影片之後,就用另外一台電腦爬自己網站的資料XDD 很有成就感
讚讚,謝謝你的經驗分享,我覺得超棒的 :)
很感謝老師的教學,在國外求學要找到好教材自學很不容易...
不會哦,有幫助就好了 :)
天啊,安啾穿制服也太正了吧
謝謝彭彭老師!
哈哈哈,我也覺得,不客氣呦!
感謝老師!實在太有收穫了!希望老師再多多增加python的課程!
謝謝你的回饋 :) 我會盡量哦 ~~~
老师讲课慢条斯理的,简直是我这种慢性子头脑慢的人的福音。
很高兴是适合你的 :)
一直想學爬蟲,看影片比看文章學習快多了,謝謝老師無私分享,不過老師說話真的好慢我都調1.5倍速XD
哈哈哈,很多人都說要調 2 倍速 XDDDD
+1調1.5 XD
上了兩次python課程,也看彭彭的影片事前準備,後來發現彭彭的講解最棒
謝謝你的分享和回饋,很高興對你有幫助哦 :)
謝謝彭彭老師,
想要學PYTHON,看了許多教學,老師很用心的從頭說明到尾.
不會呦,也謝謝你的回饋 :)
老師您好,想結合上次學的串接網路資料
將爬蟲結果印出在一個文字檔案上面。
以下是我的思考邏輯:
因為會印出標題的是這段程式碼
import bs4
root=bs4.BeautifulSoup(data,"html.parser")
titles=root.find_all("div",class_="title") #找尋class="title"的div標籤
for title in titles: #如果有a就印出來
if title.a != None:
print(title.a.string)
所以我只要將他原本會印在終端機上面的指令改成輸出txt的指令
所以我就稍微改了一下:
import bs4
root=bs4.BeautifulSoup(data,"html.parser")
titles=root.find_all("div",class_="title") #找尋class="title"的div標籤
with open("data.txt","w",encoding="utf-8") as file: #開啟文字檔
for title in titles: #如果有a就印出來
if title.a != None:
file.write(title.a.string+"
") #印出爬蟲內容
可是執行起來都只能印出第一頁的內容,想問為什麼會這樣?
是不是我程式碼的位置放錯了?
再請老師幫忙解答了,謝謝彭彭老師!
你的邏輯沒有問題哦,只是我們打開檔案寫入資料,每次打開都會把檔案清空。
解決方式也很簡單,打開檔案的時候用串接模式就可以,例如:
open("data.txt","a",encoding="utf-8")
注意裡面的 w 改成 a,就可以嘍 ~
@@cwpeng-course 可以印出來沒有問題了!謝謝老師
程式零基礎的我都學會了,真的大推。
讚讚,很高興對你有幫助 :)
彭彭老师,您的讲解真好,我一个外行都听得津津有味!希望看到您更多的视频。
好的,我基本上会持续更新内容,尽量喽 :)
彭彭老師:
會想要開始學Python是因為上星期無意間看到了一位youtube原本因想要訂一間旅館訂不到,聽了那位youtube大略的說明,再加上我上網查了相關字,大概就是爬蟲吧!而再從網路上看爬蟲的相關資訊幾乎都是以python居多,好吧! 那我就從頭開始學習python吧!
原本我是學android studio 的java,我覺得python 及java,多多少少還是有一些不同的地方,例如說在java一句表達完之後,都要一個"逗點" ,但python不用。 或者是java的if一定會再接著一個括號,寫裡面要做的事,但在python不用括號,直接表達要做的事情。但更重要的事,在python這裡,寫程式的縮排是非常重要的事,要不然會出現錯誤(我不確定這點我有沒有誤解!!!!)
但謝謝彭彭老師很清楚的講解,至少能讓我在很短的時間內,從一開始的該如何安裝、if、for等等之類的一路學到了python.
目前有想要試著一個網站的爬蟲,大部份的網站會從a網頁將相關的資訊都一起夾帶著網址傳遞到b網頁,我可以藉由b網頁直接抓取相關的資訊。但有的網站它不是由網址一起傳遞到下一頁,看了cookie的地方,也找不到相關的分析。希望彭彭老師能再教學一些爬蟲的教學,即使是收費我也會想要付費學習。
謝謝
謝謝你這麼用心的訊息和回饋,我也很高興對你有些幫助 :)
爬蟲的情況很多,我會試著多做一些實際的分析給大家參考,但我猜想應該很難把所有可能性都說完,希望下次挑選的爬蟲主題會幫得上你的忙哦,也謝謝你的建議,我會參考的 ~~~~
老師好讚 講解得非常清楚
謝謝你 :)
看老師的頻道可以多學很多很多東西,老師超棒
讚讚,一起學東西 :)
謝謝老師教學辛苦了,也請老師多開一些這樣的課程
謝謝你的回饋,好哦,我會盡量 XDDD
强大的资料,平和的语调,赞一个
谢谢回馈哪 :)
我花了半天時間,居然學會怎麼爬資料了!!!
彭彭老師的教學果然簡單易懂~~
想請問若網站有登入頁面時,怎麼等待使用者輸入帳密後,再繼續下面的抓取動作呢?
哈哈哈,很高興對你有幫助 :)
使用者輸入帳密之後,大多數網站其實會在 Cookie 中放置一些資訊。所以我們其實只要實際用電腦輸入一次,然後觀察和擷取 Cookie 裡頭的資訊放進程式中,就等於是使用者已登入狀態了。
不過現實中還有很多其他可能性,這大概是爬蟲最麻煩的地方,變化很大很大。
艱難地啃完了第20堂課,謝謝老師解
加油 ~~
非常感谢,这么详细且清晰易懂的讲解!再次感谢!
谢谢回馈,很高兴对你有帮助哦 :)
在python網路爬蟲教學 - Cookie 操作的後段,nextlink = root.find("a" , string="< 上頁") ,print(nextlink) , 出現 None, 找不到該標籤, 請問老師這是什麼問題呢? 語法我有檢查,並沒有錯。
那個 < 符號,你可以按照影片中的流程去複製,他不是單純用鍵盤打出來的 < 和空白。
謝謝老師! 目前第一集看到現在 搭配書籍努力精進自己中!!希望可以朝軟體工程師之路前進,再次謝謝老師!
不會,加油 :)
超級實用詳細的教學。謝謝彭彭老師
不會呦,謝謝你 :)
老師您好: 我跟著您的教學步驟做到抓取內文為 < 上頁 的 a標籤時一直失敗,我在網頁原始碼所看到的內文是 "‹ 上頁",因此我嘗試了nextLink=root.find("a",string="‹ 上頁")也無法, 上網查詢後發現‹似乎是叫做轉譯字符,想請問老師我該往哪個方向求解
他的符號並不是英打打出來的
彭彭老師您好:
想請問您為什麼在過濾文章有沒有被刪除那個地方一定要寫if title.a != None
不能寫 if title.a == True
有試過第二個寫法了,會抓到其他資料
另外,真的非常謝謝彭彭老師提供這些教學影片!受益無窮!
因為 title.a 是一個物件或者是 None,物件和 True 不會是相等的東西哦。
請問我照著老師的解法處理到
nextlink=root.find("a", string="‹ 上頁")
print(nextlink)
會出現以下錯誤
UnicodeEncodeError: 'cp950' codec can't encode character '\u2039' in position 58: illegal multibyte sequence
nextlink=root.find("a", string="‹ 上頁")
print(nextlink)
可是如果是用print(nextlink["href"])就不會有問題
我查過\u2039 是 ‹ ,想知道為甚麼會有這個問題?
先確認程式檔案使用 utf-8 存檔。舊版的 Python 也可能會有狀況,如果是 Mac,使用 python3 來執行程式。
簽名報到!很受用的課程!!
太好了!!
很不錯的影片,教學易懂有成就感
謝謝你的回饋 :)
老師你好, 請問一下如果有些在view source沒有出現的, 但是在inspect > elements裏面有的, 可以怎樣找呢? 謝謝
那就是動態產生的畫面,必須從 Network 的紀錄中尋找真正的資料來源在哪裡 ~
想請問一下老師 為甚麼第15行 裡面的class要加一條底線變class_
而第20行的 string卻不用
BeautifulSoup 套件的規矩而已哦。
這個規矩是因為 class 這個字是 Python 的保留字,不能被當成參數使用 ~
謝謝老師3年以來的教導 請問老師能做R語言跟C++的課程嗎? 對它們兩個有點興趣.😁😁😁
三年了呀,謝謝你幫我回顧時間 :)
短時間內可能無法,至少也要半年之後,看有沒有多出來的時間 @@a
+1
請問老師之後可以把這些教學以後可以用到的地方講出來嗎? 因為我認為學習需要一個目標的動力去促使, 也可以大概了解這方面的應用(純屬個人意見)
謝謝你的建議,我會盡量分享嘍 :)
希望彭彭老師也能在HAHOW開PYTHON的爬蟲課程跟WEB開發課程~~~
好哦,謝謝你的鼓勵哪,希望我有時間就是了 QQ
老師,想問
1. 第20行nextlink=root.find("a",string="‹ 上頁") ,為何不用像上一支影片尋找"title",寫find("div",class......)?
2. 第21行return nextlink["href"] 的["href"],為何要用中括號[]呢?
第一個問題是因為你要找的是特定的連結,這個鏈結被包在上頁這個結構中,而上一支影片則是找所有titles,而所有title都是被包在 標題這個結構裡,如果你用上一支影片的方式找是找不到上一頁的連結的喔
感謝 @曾子凡 的詳細說明 :)
彭彭老師您好,
想請教您兩個問題:
①
時間軸24:25
最後一行print(nextLink["href"])
請問要取href屬性網址的話,為什麼nextLink後面是用中括號包住href呢?
②
時間軸28:26
如果第23行這裡的變數已經是pageURL,
為何上方第3行的def getData() 括號內的參數仍維持 (url) 呢? 請問這裏的(url)的功用是什麼?
謝謝老師 >_
1.
我們要取得標籤的屬性,要使用括號,這個算是規矩。
2.
參數只在函式中有效,所以這個 url 就是接受我們呼叫 getData() 的時候傳遞進去的資料,在外面的程式中,我們會把本次抓取到下一頁網址放在 pageURL,然後傳遞到參數中進行下一個網頁的抓取。
感謝老師>_
老師您好
我想要輸出TXT
可是僅印出最後一行
但是terminal卻是可以完整輸出
請問是哪裡出現問題,謝謝
import bs4
root=bs4.BeautifulSoup(data,"html.parser")
titles=root.find_all("div",class_="title")
for title in titles:
if title.a !=None:
data=title.a.string
print(data)
file=open("PTTData2.txt",mode="w",encoding="utf-8")
file.write(data+"
")
file.close()
open 的地方改成 mode="a" 它才會把資料附加在檔案後面,不然每次都會複寫檔案內容。
謝謝彭老師看您的影片讓我這個門外漢似乎也可以開始寫一點小程式了 請問老師有沒有自動填寫GOOGLE表單的教學
謝謝你的建議,我會考慮看看。
你可以先自己找找看 Selenium 這個工具 ~
今年十三, 實在不知道可以去哪做網絡爬蟲, 所以跟着你跑進批批踢了>_
哈哈,好哦,批批踢是很好的練習壓 :)
請教一下彭彭老師!! 我在原始網頁裡看到的"< 上頁" 是 "‹ 上頁" , 但是不論我在我的程式裡打前者或是後者, 均無法讓程式成功執行,請教該如何解決這個問題呢!!
建議用複製貼上的方式,像我影片中一樣的操作。因為那個符號本身跟鍵盤打出來的其實是不同的東西,只是看起來很像而已 ~
請問最後寫while迴圈時,先寫一行getData(pageURL)合理嗎?
想法是要先呼叫函式出來的,取得回傳值,然後下一行才有回傳值來覆蓋pageURL。
白話點就是覺得好像要先起個頭
確實需要一個起頭,所以一開始就寫了 pageURL="起頭的網址"
如果為了起頭的網址去呼叫 getData() 就顯得有點多出來。
彭彭老師您好,剛剛加入會員,有一個問題想請教您。
最近我的React專案有一個需求: 使用者登入後,24小時內重整頁面仍然可以保持登入狀態,請問這也是用cookie達成嗎? 在您看來,實現這個功能的best practice是甚麼呢? 想請您提供一個方向,我做進一步的研究,感謝您~
登入系統的登入狀態是要前後端一起看得,首先要先決定採用的身份驗證架構是什麼,使用 JWT 儲存在前端,或者是儲存在伺服器端。如果使用 JWT 儲存在前端,那確實主要就是由 Cookie 的過期時間來控制。但登入系統的實作方式很多種,所以你得先確定系統登入方式的實作是採用哪一種方式,然後才能判斷可以從哪些地方來控制登入狀態。
@@cwpeng-course 謝謝老師!! 我再研究研究
老師您好:
為何有些網址有出現要必須要按已滿18歲的按鈕才能進去的畫面,但是用上一支影片的code卻可以直接抓到標題呢(不會像老師那樣抓不到標題)?? 但進入網頁時,確實有over18這個cookie! 這邊不太理解,在麻煩老師解答了 謝謝
同問
整個PTT有18禁的都還是搜得到
試過用其他有18禁的網站會被擋
但網頁找不到HTML
想上課卻卡好久 ...
要看你說的網頁是什麼,每個網頁實作的方式有差異,其實無法一概而論。爬蟲其實很依賴對基礎網頁運作知識的理解,所以只要稍有差異,我們就必須各別分析,很可能背後的原理差異很大的。
老師您好請問: print(nextLink["ref"]) 這一行出現了 TypeError: 'NoneType' object is not subscriptable 要怎麼解決?
謝謝彭彭老師:)期待新的影片
不客氣 :) 好哦,我會持續出影片的 ~
謝謝老師精彩的講解!
想請問老師為甚麼我照著老師打print(nextLink["href"])
會出現TypeError: list indices must be integers or slices, not str呢
把你全部程式碼貼出來比較好判斷吧
感謝 @陳俊豪 回覆,確實如此哦 ~
應該是你前面用成find_all()
改成print(nextLink[0][‘href’]) 試試看?!
彭彭老師您好, 我執行到這一行 nextlink=root.find("a",string="< 上頁") 時, nextlink抓不到"< 上頁"的回傳值, 因為PPT網頁的上頁原始碼裡變成"‹ 上頁", 故找不到, 請問該如何解決?
那個小於符號是特殊符號,不是鍵盤上打出來的那個小於。所以我們會直接去開發人員工具中複製貼上,你可以複製這個:‹ 上頁
應該就可以了 ~
@@cwpeng-course 原本使用"‹ 上頁"跟"‹ 上頁"都不行的說,複製老師的就可以了!!!
可以請問老師,這種問題是否能有別的解法嗎?像是直接用"上頁"執行,不然有時候會跑出奇怪的符號,整個就無解了。
不好意思,老師想問一下,不知道為什麼我打print(nextLink)的時候,
出現的是‹ 上頁
disabled的地方不是應該是href=~~
接著如果打print(nextLink["href"]) 則會出現
Traceback (most recent call last):
File ".\L20test.py", line 16, in
print(nextLink["href"])
File "C:\Users\ASUS\AppData\Local\Programs\Python\Python37\lib\site-packages\bs4\element.py", line 1486, in __getitem__
return self.attrs[key]
KeyError: 'href'
找了很久還是不太懂為什麼會這樣
看起來是你抓到的網頁已經沒有上一頁可以按了,所以是 disabled 而且沒有 href
謝謝老師詳細的說明
不客氣,也謝謝你的支持 :)
老師我想問一下,如果我把網頁的Request Headers中的全部項目都寫進我的程式裡,
是不是就表示不管怎樣都能進入到這個網頁?(個人亂想的問題XD)
原則上只要是使用者能看到的東西,爬蟲都能模擬的出來沒錯。不過有些網頁設有重重關卡,沒有正確的分析運作流程,就會找不到路。意思像是迷宮確實有解,但不是每個人都能順利走出來的 ~
for title in titles:
if title.a !=None:
print(title.a.string) # 若標題含a
nextlink=root.find("a",string="‹ 上頁") # 找到內文是‹ 上頁 的 a 標籤
請問老師 同樣是標籤內的a 為何一為變數 另一是字串?
字串是告訴 find 這個方法要找的標籤名稱是什麼。title.a 是物件中的實體屬性。
感謝老師每一部影片,突然想到我們可以抓到RUclips的留言嗎
理論上可以哦,實際上要試試看才知道會碰到什麼麻煩 ~
老師,能多開一課說一說每次請求時會同步更新現有的cookies嗎??
因為cookies過期後會抓不到想要的資料,然後要手動去更新cookies
感謝!!!
嗯嗯,謝謝你的回饋和建議,我會考慮看看的 :)
@@cwpeng-course +1我也想學
謝謝彭彭老師清楚的教學,讓我這個初學者也可以自己抓到資料,但是我有一個問題想問老師,就是我想把標題抓到檔案裡面
但是都沒有成功,想問一下是哪邊寫錯了
for title in titles:
if title.a !=None:
boo=(title.a.string)
with open("data3.txt","w",encoding="utf8") as file:
for x in boo:
file.write(x+"
")
謝謝老師
執行的時候,是否有什麼錯誤訊息呢?
應該是"utf-8"
彭彭老师课程很好,谢谢老师
謝謝你的回饋 :)
老師您好
如果我是用google colab寫呢
要先處理google colab及瀏覽器間的關係嗎?如何處理?
我和 Colab 不太熟,所以對於你的問題我沒有太大的掌握。剛剛簡單 Google 查詢一下 Colab Python 爬蟲,似乎是有一些順利運作的範例,您可以查詢看看。
老師請問如果想搜尋範圍是 標題跟內文2部分,當關鍵字 (有出現) 才篩出文章,這該怎麼寫呢 謝謝
必須去標題列表的 HTML 中找到內文的連結,然後再發一次連線去取得內文的資料,接著判斷內文是否包含關鍵字,再確定是否要把標題展示出來。
這不是一個簡單的動作哦,要把程式邏輯都兜起來 ~
老師教得好好 希望八卦版標題不要讓影片黃標了XD
話說遞迴那邊我是這樣寫 感覺比較簡單
for i in range(3): #想抓三頁
url=getdata(url)
哈哈哈,希望不要 XDDD 也謝謝你的分享 :)
能做一條影片教一下如何在要登入的網頁中拿取資料嗎? 謝謝
感謝你的建議,我會加入考慮哦 :)
老師不好意思我想請問一下
while迴圈的getDate(pageURL)
是同時有跑函式與return新的網址的功能嗎?
是的話 是不是也代表著getDate(pageURL)可以有兩種功能?
任何函式執行後都可以有回傳值,我們只是拿來運用在這個程序中而已,最後的問題我沒有非常理解你的意思 ~
謝謝
不客氣呦 ~
請問彭彭老師,我想練習抓一個股票的現價,用的是Cmoney股市,在檢視原始碼中有股價的內容,可是我print出root看,卻沒有包含股價的那個div(用root.find(string="股價")顯示None),後來發現是跑到另一個script的標籤下,可是無法讀取script標籤下的子標籤,請問該如何解決呢?
這個其實就相當難處理了,建議使用 selenium 這類的工具模擬瀏覽器的運作來抓取資料,但可能就無法在留言中詳述嘍 ~
@@cwpeng-course 了解~謝謝彭彭老師!
想請問老師兩個問題
1.我用Visual Studio Code 在打備註得時候打中文會無法run
2. 我有install beautifulsoup但是按run的時候 我出現AttributeError: module 'bs4' has no attribute 'beautifulsoup'
感謝老師 學得很有動力
1. 打中文無法 run 可能和 vs code 無關,如果是 Mac 電腦請用 python3 來執行程式。
2. 要注意大小寫,是:BeautifulSoup
19:00 - 19:16
老師喝個水
謝謝 XDDDD
老師的課程好棒ㄚ,學生不是本科的努力學習中,因為一些因素不能直接邊寫邊測試網頁資料,只能先抓成html的檔案到本機,請問老師抓下來的檔案能試爬嗎?我改成這樣 url="C:/Users/BENQ/Downloads/ptt.html" 類似這樣,測試都會顯示錯誤,請問這有辦法修改嗎? 謝謝
不行哦,本機和網路上是完全不同的事情。如果要抓本機檔案就直接用 open 打開檔案就可以了。
在影片中24:28部分,輸入print(nextLink["herf"]),但是系統跑出TypeError: list indices must be integers or slices, not str,請問要怎麼處理?我不是mac
有錯字 nextLink["href"]
老師請問def getData(url):裡面帶的url參數是對應到哪個呢?因為試圖把def getData(url)的url改成pageURL發生找不到超連結的狀況,謝謝老師回復
getData 函式內部會使用到 url 參數,你仔細檢查程式就會看到。所以你隨意把名字改掉,內部的程式會找不到東西是很正常的。
老師,我正在試一下實作,發現如果網站中出現空白,例如說那個
class_="FYwKg _2j8fZ_1Fy _2x7kk_1Fy mCDH2_1Fy"
當中的空白鍵,好像便不能跑了,請問有方法可以解決嗎?謝謝!
那個相當於有多個 class 的設定,你可以寫 class_="FYwKg _2j8fZ_1Fy" 取其中一個試試看 ~
很感謝~
請問老師編碼格式為:Big5 , 要如何操作換頁 , 因為他的herf是href="javascript:pql_search('3')" , 不是一般的超連結 , 無法用NextLink那段
謝謝回復
那個超連結背後是執行一段程式,我們需要去研究它實際發出的連線是什麼,然後直接連過去。
細節其實相當複雜,可能要多開一個影片來講解才行了 @@a
請問按照語法寫return nextlink["href"] 出現錯誤訊息
SyntaxError: 'return' outside function 如何解?
可能是 return 這行程式,沒有適當縮排的原因。
老師您好 我是使用 python3.7.1和vs code 1.40.2 想問一下 我用 F5+enter (Python File Debug the currently active python file ) 在終端機上 顯示的 不是繁體中文 而是一些問號跟亂碼 例如:(??12/6?唬葉撣?銝楝敺蝎曄?鈭楝銵?閮???) 想請求老師幫幫忙......嘗試很久都無法改善,程式碼都是按照老師上面打得 ,
可能要確認一下作業系統,如果是 Mac 的話,使用 python3 來執行程式。
彭彭老師好,想請問一下為什麼程式抓取的原始碼會跟網頁原始碼不一樣?例如說我抓下來的原始碼長這樣:‹ 上頁,但是網頁原始碼卻長這樣:‹ 上頁,網址不太一樣,這是為什麼????
網頁的 HTML 程式碼中,有一種概念叫做跳脫字元,也就是原始碼長得是一種奇怪的表達符號,就像你貼的 ‹ 這樣,會被解碼程某種比較有意義的形狀,就像 ‹ 這樣的 ~
老師您好
import bs4 後VSCode顯示Import "bs4" could not be resolved from source Pylance(reportMissingModuleSource)[8, 12]
請問該怎麼解決?
你在 VS Code 中安裝了 Pylance 這個擴充輔助功能,建議直接移除就可以了。不然就要去學習如何設定 Pylance 的細節讓它適應你的運作環境,這個錯誤很可能和 Python 程式本身無關。
請問老師會出使用Scrapy和抓JSON格式的教學嗎?
JSON 格式的教學好像前面的影片有一些您可以找找看。
Scrapy 應該短時間內不會有哦 ~
彭彭老師好~請問一下如果要把多個頁面的標題寫入檔案中,程式撰寫上的思維是甚麼流程呢?
目前有成功寫入單個頁面的標題到檔案中(上一支教學影片的內容),但這次的內容試了幾次還是卡關,所以才想請教您。
可以試著利用一個變數先儲存所有的字串資料,最後再一次寫到檔案中。
@@cwpeng-course 謝謝老師,我再多嘗試幾次看看
想問老師為何 31:07第二個 pageURL 後面要加的是 getData(pageURL)
我看不懂 getData(pageURL) 顯示的會是甚麼字串(是字串連接嗎?)
getData(pageURL) 是上面的函數 會回傳一個string(仔細看函數結束地方的return值) , 所以 “.....” + getData(pageURL) 等同兩個string連接沒錯
感謝 @勝維李 的回應,很清楚 ~
請問會有網站把資訊放在local session storage的嗎?還是大家都是放cookie
會有的,要看實際的應用決定前端要怎麼存放資訊。
谢谢彭彭老师的教学分享,文科生用这个方法成功爬了豆瓣小组标题。但在尝试爬谷歌搜索结果时,只能爬到当前页面,无法抓取多页,nextLink=root.find("a", string="Next") 这一行里,不晓得该用什么替换“a”。请问该怎么解决呢?十分感谢!
如果我们看到的页面版本是一样的话,搜寻后,直接看下方的第二页的连结,按右键去检查背后的程式码,试着找找看 class="fl" 这个特性的 a 标签吧 ~
老師您好:想請教您一個問題,為什麼我的visual studio code的terminal裡面,跑出來的結果常常沒有辦法對齊?都會像下面這樣,每隔一行都會多空幾格呢?一直被這個問題困擾很久...。另外謝謝老師的影片教學,真的很淺顯易懂!
Re: [新聞] 7歲童上柔道課遭摔瀕腦死昏迷16天 昨腦
[問卦] 疫苗是不是再怎麼爛也比沒有好?
[問卦] 看好世界 龍巖漲停板是在嘲諷嗎??
PS D:\PYTHON>
如果取得的資料確實沒問題,某種程度上可以不用太在意,因為實際的需求通常也不是印在終端機,至少是輸出到檔案裡面。
不然就是要確認程式中是否有不小心放到空白的可能性。
老師,謝謝你的分享。有點小問題請問一下的,
如果說我想抓網頁2-3個class的資料,可以用for loop同時把它print出來嗎? 好像有點困難呢~~
謝 謝!
請問你是指同時具有特定3個class的tag,還是只要含有1個那3個之一的class?
如果是前者可以參考這篇,在findAll()函數加上額外參數 stackoverflow.com/questions/18725760/beautifulsoup-findall-given-multiple-classes。
或是用findAll( attrs = {"class" = "你要的class1 class2 class3"} ),這樣的寫法比較像是js的selector。
如果是後者可以findAll() 3次再print出來,但可能會重複唷。
你好啊,謝謝你的回覆啊。
我現在的代碼是
import bs4
root=bs4.BeautifulSoup(data, "html.parser")
titles=root.find_all("span", class_="abc")
for abc in titles:
print(abc.string)
我在stackoverflow看到他這樣建議
soup.findAll(True, {'class':['abc', 'edf']})
那我這樣改
root=bs4.BeautifulSoup(data, "html.parser")
titles=root.find_all{'span':['abc', 'edf']})
for abc and edf in titles:
print(abc.string)
print(edf.string)
好像不太像樣XD
如果再複雜一點,除了span之外,還有a標籤,都可以這樣加嗎
謝謝 @呂晟維 的回應 :)
我想如果是不同標籤,可以分開來做,或許會單純一些 ~
感謝🙏老師❤
不會 :)
老師不好意思,想請問昨天試了八卦版
for title in titles:
if title.a!=None:
print (title.a.string )
試了之後一直有錯誤
可能不再a標籤內,看一下頁面的代碼
@@占时年 謝謝,原來是find忘記all
感謝 @占时年 的回應 :)))
@@cwpeng-course 謝謝老師
彭彭老師會進一步拍登入所用到 session+python 的教學嗎 XD?
有哦,正在規畫這個部份,但可能和爬蟲沒有太大關係,主要是 Python Flask 網站後端的開發 ~
老師我遇到一個操作上的問題, 在最後設定的迴圈數(跑出來的頁面標題),我跑出來的是【網頁的原始碼跟標題】,跟影片中跑出來只有【文字的標題】有點不太相同,請問我要怎麼處理,才能只呈現只有【文字標題】的結果呢?
從抓取【一個頁面的標題】30:20那邊開始 然後,出來的畫面都是一個【html+文字標題】,迴圈的部分也如同一般,【跑一個網頁+文字標題】,就是說 我的操作出來的結果 跟影片中跑出來的都是【文字標題】的結果是不一致的。
更新一些: 我發現是我搞烏龍,我上面的 print (data)沒有刪除,所以就一直跑出HTML代碼😅😅😅
好哦,有解決就好,能自己處理是最好的哪,都是寶貴的經驗 :)
老師您好:在進入八卦板後因為本人未滿18歲按不同意就跳出來了該怎麼處理
影片中的操作應該就可以解決了 ~
成功了,但是我好像不知道怎么导出数据😳
恭喜成功,试着放进档案里可能是个方式 〜
謝謝老師~~~
不會 :)
請問我要爬網站states_code回應是429,查詢過後發現是被擋IP,有看到人說是CDN擋的,那我要在header帶cookies該怎麼做,頁面沒有出現類似PTT的未滿18
我爬的是Dcard提供的API,爬少量的時候可以,但大概超過20篇的時候會被擋,麻煩老師了!
被擋 IP 原則上就要等了,除非你換個 IP。或者是抓取的時候可以讓程式自動停頓幾秒鐘再抓取,不要去觸動到他的偵測機制。
辛苦了呀
不會,謝謝 :)
輸入此影片上述程式碼,執行時會出現此錯誤訊息【HTTPError: Forbidden】。請教作者如何解決?
謝謝您!
File "C:\ProgramData\Anaconda3\envs\tensorflow04\lib\urllib
equest.py", line 649, in http_error_default
raise HTTPError(req.full_url, code, msg, hdrs, fp)
你的電腦中安裝了 Anaconda,會影響到套件的使用。
如果不知道如何調整 Anaconda,蠻建議把它移除後,再試試看 ~
but what about the titles that are on the same page but need to click different buttons.
which button? it matters.
又完成一課了~
讚讚 ~
請問老師為何有時候抓取下來的原始碼跟檢查時看到的原始碼不一樣...對網頁檢查找到的標籤檢查,find的時後卻找不到
看網頁時要點檢視原始碼,不要點檢查。
點檢查看到的東西不一定是原始碼,這跟網頁背後運作的技術有關。
爬蟲要懂很多網頁運作的原理,這些在我的影片中還沒有講到呢,之後會再慢慢補上。