如果有遇到ModuleNotFoundError:No module named ‘bs4’且載過不同版本的python的人 可以到底部那條藍色的點選python版本(ex 3.11.0),此時上方(Select interpreter)會出現其他python版本,切換完再重新執行就可以了 By 卡在這裡很久終於解決的人QAQ
我照著打出現這 Traceback (most recent call last): File "test.py", line 14, in root=bs4.beautifulsoup(data,"html.parser") AttributeError: module 'bs4' has no attribute 'beautifulsoup'
@@cwpeng-course 以下是出現的錯誤訊息 再麻煩老師解答了 WARNING: You are using pip version 21.1.1; however, version 21.1.3 is available. You should consider upgrading via the 'c:\users\何侑剛\appdata\local\programs\python\python39\python.exe -m pip install --upgrade pip' command.
老師你好,我跟著影片一起操作後執行程式後,終端顯示ModuleNotFoundError: No module named 'bs4'。已經在終端下載pip3 install beautifulsoup4,然後在編輯器 import bs4,可是一直顯示module not found error no module named bs4,我有再確認一次 beautifulsoup4下載成功也改程式寫成from bs4 import beautifulsoup,但還是行不通😢,我該怎麼處理呢
老師您好,先謝謝老師用心的教學,想請問將爬蟲結果寫入txt檔的問題,我的程式碼如下 with open("movie.txt",mode="w",encoding="utf-8") as file: file.write(str(title.a.string)) 有成功建立movie.txt檔案,但裡面只有輸入一筆電影名稱的資料,沒有將全部電影名稱顯示出來,想很久不知道問題出在哪裡,因此想詢問彭彭老師要如何解決比較好,謝謝
老師我想請問我想要讓每筆資料之間有區隔(換行) 所以我就把程式碼改成這樣: with open('data.txt',mode='w',encoding='utf-8') as word: for title in titles: if title.a!=None: word.write(title.a.string) word.write(' ') 但這樣最下面就會多出一行欸 請問我有辦法把那行刪掉嗎 還是說我可以用別種寫法達成這個目標 謝謝老師
@@cwpeng-course 照著老師的提示寫了一下, 請問這樣是對的嗎 或是有更有效率的寫法嗎 count = 0 with open('movie.txt', 'w', encoding=('utf-8')) as file: for title in titles: if title.a != None: count += 1 if count != len(titles): file.write(title.a.string+' ') else: file.write(title.a.string)
老師好!我輸入pip install beautifulsoup4後,終端機跑出 Traceback (most recent call last): File "", line 198, in _run_module_as_main File "", line 88, in _run_code File "D:\Scripts\pip.exe\__main__.py", line 4, in ModuleNotFoundError: No module named 'pip' 請問是哪裡出了問題QQ
bs4.FeatureNotFound: Couldn't find a tree builder with the features you requested: html.praser. Do you need to install a parser library? 老師跳出這樣的訊息是代表我還要下載什麼嗎
謝謝老師的影片 也因此開始coding 有一個問題想請問老師: 自己想要印出td class下的href, 理想中要出現“href="C.php?bsn=60404&snA=3890&tnum=1” 但用了print(lastpage["href"]) 出現TypeError: list indices must be integers or slices, not str 請問老師哪裡不對了 *********** Code1: lastpage = root.find_all("td", class_="b-list__main") print(lastpage) Output1: [ 置頂 【巴哈】輕鬆不放縱,哈啦園地有賴你我共同維繫 , 【情報】10月8號開發日誌 *********** *********** Code2: lastpage = root.find_all("td", class_="b-list__main") print(lastpage["href"]) Output2: TypeError: list indices must be integers or slices, not str ***********
這幾天開始上老師的課,使用的是macOS系統:
首先要跑網頁使用url,需要多下
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
這個指令(在先前的影片老師有回答過),
在這個堂課中發現要下載bs4時,終端機輸入pip install beautifulsoup4沒有成功,詢問chatGPT後發現可能是版本問題,在終端機輸入pip3 install beautifulsoup4就成功了!
給大家做參考~
感謝指出關鍵重點
我跟著老師操作一遍之後,取得網頁資料的那一霎那有點想掉淚,好感動,竟然可以自己操作出爬蟲的結果!! 很有趣 老師真的是很會教QQ
哈哈哈,謝謝你的分享,很高興對你有幫助哦 :)
不太符合你的形象啊
看這門課程也快一半了,覺得內容很有趣也實用,一堂一堂聽下來覺得教學很詳細淺顯易懂,對初學PYTHON的人真的幫助很大,謝謝老師無私的教學,真的教得非常好,很感恩 ! ! !
謝謝你的回饋呦,很高興對你有幫助 :)))
老師您好阿~去年有去上您在台大開的課~每次想到你很認真的教學~內心就非常感動~謝謝你持續努力來分享您的專業~幫助這個社會~
謝謝你特別來這裡給我鼓勵 :)
感謝老師的影片~受益良多,喜歡這種有實作的教學影片,期待老師推出下一集~
好哦,我會持續更新,頻率就盡量嘍 :)
感謝老師,讓無基本程式概念的初學者找到一個可以慢慢上手的教學影片
謝謝回饋,很高興對你有幫助哦 :)
謝謝老師手把手的細心教學,之前覺得爬蟲是很難很難的技術,一直逃避不敢嘗試,謝謝老師讓我敢邁出第一步QVQ
很高興對你有幫助哦,讚讚!
18:22
2021更新
如果輸入 pip install beautifulsoup4
出現錯誤碼: command not found: pip
可以試試改成 pip3 install beautifulsoup4
感謝你的經驗分享 :)
@@cwpeng-course 我才要謝謝你,很好的影片
@@leoccc 您好,但我的都會顯示invalid syntax在install上,不知道是哪裡出了問題,謝謝您
有同樣的困擾~
@@王孟肜 google就有解了
感謝老師, 這是我看過的 crawler 講的最好的影片
謝謝你的肯定和鼓勵呦 :)
終於等到老師出新影片了 超喜歡這次的教學範例 感覺很實用 希望老師之後能多多出類似這一集的實用範例
好哦,我盡量 :)
謝謝彭彭老師簡單又直接的教導, 很容易明白, 十分感謝!
謝謝你的回饋 :)
老師,你的教法真的淺顯易懂,謝謝你
不會,也謝謝你的訊息 :)
感謝老師,把原本覺得艱深的講得很淺顯易懂XD
謝謝你的回饋哪 :)))))
講解得很清楚! 第一次寫爬蟲覺得好感動!!! 謝謝你拍這部影片❤
讚讚,感動的感覺很棒 ❤
因為好奇修改了一下,
不小心把整個PTT電影版七千多頁的標題全部抓下來了,
實測有15萬筆資料喔~
哦哦哦!很不錯哦 XDDDDD 抓了這麼多資料可以來分析一下了!!!
怎麼用QAQ 我也想知道~~
想知道+1
迴圈控制頁數嗎?我只想到這樣
我的天啊 我也學會了 我好興奮阿
8:58 準備執行code
會出現error
17:48 beautifulsoup
25:15 find all
25:52
印出來的是list 列表
感謝分享 :)
The syntax print(title.a.string) can be written as print(title.a.text)
thanks for sharing. :)
老师讲的好,是我目前看到的最好的
谢谢你哪 :)
超菜鳥總算能回饋一下關於Mac安裝BeautufulSoup的過程:
要安裝bs4要先安裝pip才能像老師那樣直接打指令就安裝bs4(應該吧XD)
像我直接打"sudo easy_install pip"或是"pip install beautifulsoup4"等指令
最後一行都會跳出:
"error: Could not find suitable distribution for Requirement.parse('pip')"
在網路上亂搜了幾個小時後才發現 "嗯,應該是pip的問題"
於是乎就搜了"mac pip error",然後就找到了面這個指令:
curl bootstrap.pypa.io/get-pip.py -o get-pip.py
sudo python get-pip.py
終端機輸入上面兩行後再重新安裝pip
"sudo easy_install pip"
然後在
"pip install beautifulsoup4"
接著再
"pip3 install beautifulsoup4"
就可以了(吧?
--------------------------------------------------------------
想請問一下老師:
對於一個完全沒有程式背景,看不懂終端,每次在程式有誤的時候都得花好幾個小時才能把bug全部消掉是正常的情況嗎?該怎麼克服這個問題?謝謝老師
非常感謝你幫忙說明在 Mac 上的狀況,相信對很多人都很有幫助 :)
看不懂錯誤訊息是比較可惜的,如果能在英文上加強一些,錯誤訊息通常會很有幫助。不過,初期花很多時間 debug 其實很正常,倒也不用特別放心上 ~
請問一下你也是使用vs code嗎?
Mac使用者感謝大大的回饋
謝謝 你幫助到我了 感恩
沒摸過程式跳著看滿吃力 我把你的影片從頭開始看好了
沒摸過程式的話確實要重頭看比較適合嘍 :)
老師你好,在影片中有提到 class 是內建關鍵字,因此使用 class_ ,照文字邏輯來說,有底線的 class 跟一般 class 應該是兩種不同的條件,為什麼這樣的篩選條件可以成功呢? 謝謝
參數名稱是可以任意指定的,內部邏輯才是重點 ( 內部邏輯就是套件的開發者寫的 ~
搞懂了 也成功把東西寫到別的路徑下,感謝老師!!
Chang Stanly 不好意思請問可以分享寫到別的路徑的程式碼嗎,因為我寫的都只會寫入最後一筆 謝謝
@@edison9514 您好,with opne("指定路徑\data.txt", "w", encoding="utf8") 就可以寫到您所指定的路徑,並不複雜,我也是爬了一些文才找到。w所指的應該是單次寫入,下次寫入時會覆蓋原有的資料。如果要寫入所有的資料要改用"a"就可以了。如果程式沒問題應該可以成功。
@@changstanly1095 WOW原來如此 太感謝你了
不會,很高興大家都能在這裡有收穫 :)
想請問老師
在HTML 中 不是只有 嗎?
為何 22:44 中 class 後面為何要加 "_" 底線啊?
(class_="title")
同问老师。不加会报错,但是为什么是加_呢?
單純只是 class 是 python 的保留字,程式中不能使用。
所以 BeautifulSoup 就選擇使用 class_ 來篩選標籤中的 class 屬性。
@@cwpeng-course 收到。谢谢老师。
謝謝老師!
@@cwpeng-course 原來是這樣,感謝解說
講的真好。看過講的最好的,沒有之一。
謝謝哪,希望對你有幫助 :)
超強老師打字超快的
XDDDDDDD
@@cwpeng-course 老師是不是玩遊戲常常跟人吵架XD (喂
實在有夠複雜,多謝老師指引
準備加入會員~
不客氣哦,歡迎 :)
麥克風很棒,其他頻道的講解都會有雜音
歸功我的麥克風 XDDDD
@@cwpeng-course 真的哦,我點進去其他的教學,他們的麥克風雜音太多了啦,我就直接走了
感謝老師,看過思路最清晰的教學~
謝謝你 :)
跟 各位分享我的練習 過程發生的 障礙
我本來想說 不要跟老師 用完全一樣的網站
所以我用 ptt 的表特版 練習 結果到
22:00
titles = root.find("div" , class_="title")
結果顯示出來的結果 沒有出錯,但是 一直顯示None 一直抓不到 標題
後來我才發現 因為 進去 表特版的時候 他會先 進入一個問你 是否已滿18歲的 頁面 所以 才會抓不到 標題 分享給各位
我也遇到一樣的問題,困擾許久,謝謝解惑!
我也是用別的板結果抓不到資料....
好險看到你的分享~~感謝
感謝你的分享 :)
Last group was mad funny, my favourite one in all of these videos
good. :)
老師你好 我想找標題的時候在標籤div 後的篩選條件 class_=“title” 為什麼一定要加_呢?那除了_這個以外還可以加其他的嗎?謝謝老師。
「class」是python的保留字,所以用find方法在爬資料時,必須把class後面加一個_,才不會和python的保留字衝突
@@ryanlin6205 原來如此,謝謝你
感謝 @Ryan Lin 的說明,很清楚 :)
@@cwpeng-course 原來如此,我也有同樣的問題!感謝老師的解答,所以本來應該是要打class="title",但是因為保留字衝突所以要打成class_="title"這樣,這樣python分辨得出來喔? 真神奇
非常詳細的解說,感謝彭彭老師!
不會,謝謝你的回饋 :)
這鍵盤聲,ASMR嗎? 超舒服XDD
哈哈哈哈 XDDDDD
解說得很詳細,感謝分享此影片,受益良多!!!
謝謝,很高興對你有幫助 :)
mac 如果要升級pip 可以在終端機打上 pip3 install --upgrade pip
感謝你的分享哦 :)
感謝老師 目前已經跟到 web Crawler
加油加油 :)
非常感謝老師的影片~ 讓我從0基礎開始看到現在 都很淺顯易懂喔。
目前在安裝 beautifulsoup4 後出現以下問題:
下 "pip install beautifulsoup4
" 指令後 說已經安裝,最後出現:
"You are using pip version 19.0.3, however version 19.2.2 is available.
You should consider upgrading via the 'python -m pip install --upgrade pip' command. "
我再下 "-m pip install --upgrade pip" 或 "m pip install --upgrade pip" 的指令後都出現錯誤...
不安裝到最新版好像也不行,該如何安裝到最新的版本呢? 先謝謝老師了!
我打 "python -m pip install --upgrade pip" 可以了
恭喜你解決問題 :)
感謝
那請問老師import bs4如果升級以後bs4要打成甚麼? 因為我打bs4出現error
@@davidlin2040 感謝分享。
請問老師, 影片20:25 為什麼是寫"html.parser", parser是哪來的? 是什麼意思? 麻煩您解惑
+1想問
套件內建的解析器名稱用字串表示,寫對名稱套件才能找到正確的解析器,就只是個規矩。
老師:
目前PTT仍然可以用這樣的方式爬嗎?
因為再加入User-Agent資料後,仍然顯示urllib.error.HTTPError: HTTP Error 403: Forbidden
但嘗試其他網頁,可以正常使用
應該是可以的哦,要再確認看看你的程式碼 ~
老師您好,我也碰上同樣的問題
我爬其他網頁沒問題,但ptt的電影版仍然顯示urllib.error.HTTPError: HTTP Error 403: Forbidden
想請問老師,python 版本都會持續更新,語法也會更新,那我們身為學習者是也要跟進最新的語法嗎?好奇如果都是使用舊的版本會怎樣嗎?謝謝🙏~看老師教學影片真的很有幫助
目前都還是第三版,如果大版本一樣,其實就沒有什麼非常核心的差異,基礎的語法基本都不會有變化,所以沒那麼嚴重,實際要應用時發現有版本問題再去升級即可。
很高興對你有幫助哪 :)
老師您好想請問為何轉碼有時候用 decode 有時候用encode?
encode 是把文字轉碼成位元組,decode 是把位元組解碼成文字。兩個是相對的操作,根據實際狀況決定要做哪一個方向,大概是這樣 ~
淺顯易懂的教學,非常實用~~~
感謝你的回饋 ~~~
請問老師問為甚麼我下載完beautifulsoup4, 然後打bs4的時候都無法被辨認
如果確定有安裝成功,可能你的電腦中有安裝其他的 Python 虛擬環境,例如 Anaconda 之類的,會產生一些環境管理的問題,如果不懂如何管理,可以移除其他 Python 相關的工具再回來試試看
@@231-p8m 我也有出現這個問題欸 它上面寫bs4 could not be resolved from source
如果有遇到ModuleNotFoundError:No module named ‘bs4’且載過不同版本的python的人
可以到底部那條藍色的點選python版本(ex 3.11.0),此時上方(Select interpreter)會出現其他python版本,切換完再重新執行就可以了
By 卡在這裡很久終於解決的人QAQ
我照著打出現這
Traceback (most recent call last):
File "test.py", line 14, in
root=bs4.beautifulsoup(data,"html.parser")
AttributeError: module 'bs4' has no attribute 'beautifulsoup'
你“BeautifulSoup”的B跟S沒大寫
感謝 @7788250 的回應,是這樣沒錯哦 :)
@@iamnate791031 哈哈哈哈為了這個大寫花了我快半小時XDDD
真的很詳細,非常謝謝老師
不會,加油嘍 ~
想請問老師,如果我想抓取不只一頁的資料,該怎麼做呢?
抓取到第一頁的資料之後,從中找到第二頁的網址,接著再去抓第二頁的資料。把這樣的程序寫成完整的程式碼,其實是很好的練習 :)
澎澎老師請問以後會出 分散式爬蟲技術的相關影片嗎?
目前沒有規劃,感謝你的建議,我會考慮看看的 :)
好有趣~
:)
class FileRead3:
def __init__(self,name):
self.Filename = name
def read(self):
with open(self.Filename,mode="r",encoding="utf-8") as data:
Filedata = data.read()
return Filedata
F3 = FileRead3("aaaa.txt")
print(F3.read())
這樣的寫法會更好嗎 ?
我覺得沒問題哦,謝謝你的分享。但會不會更好,需要更多使用情境比較能判斷 :)
最後是重點!!27:56
XDDDDDDD
期待下一集,感谢。
好哦 ~
謝謝老師的影片 在影片中學到很多知識!!!
太好了!!!
老師請問這邊要透過附加Request header才能存取網頁資料,而非前一支影片那樣可以直接存取台北市政府的資料,是因為不是開放平台資料的緣故嗎?
一般網站都必須要刻意的去模仿瀏覽器才能抓取,有公開的 API 就是對方本來就願意讓我們抓取,所以比較少議題 ~
老師您好!! 想了解為何beautifulsoup4 無法install?請求老師解答
你可能要描述一下你打的指令是什麼,是否有錯誤訊息哦 ~ 不然無法憑空判斷的 ~
@@cwpeng-course
以下是出現的錯誤訊息 再麻煩老師解答了
WARNING: You are using pip version 21.1.1; however, version 21.1.3 is available.
You should consider upgrading via the 'c:\users\何侑剛\appdata\local\programs\python\python39\python.exe -m pip install --upgrade pip' command.
@@casper87623 這個訊息並沒有說錯誤哦,只是提醒你可以升級,但版本很接近沒升級也沒太大差別。可能是別的問題 ~
彭彭老師~你好~很高興能夠從你的教學片學到很多,想跟你請教一下,可否再拍一部用python 使用gmail寄信包含夾帶附檔,附圖片的影片。
感恩你
感謝你的回饋,有收到了,我會加入考慮之中 :)
import bs4
root=bs4.BeautifulSoup(data,'html.parser')
#抓取網頁標題
print(root.title.string)
#抓取文章標題
titles=root.find('div',class_='title')
print(titles.a.string)
想請問老師為何抓取文章標題時要使用find,抓取網頁標題時就不用?? 謝謝老師
因為一個網頁只會有一個標題,所以可以直接取得。但網頁的內容是多變的,所以程式開發的概念是是根據抓到的資料去【搜尋】也就是 find 你想要找的部份。
講得超好的 謝謝老師
不客氣呦 :)
謝謝老師,受益良多!
很高興對你有幫助 :)
請問老師用的是何Python Editor? 看起來很清晰! Are you using Visual Studio Code?
Yes
This is vscode editor
對哦,Visual Studio Code
碰碰老师讲的很好
Nice 碰碰 XDDD
老师 我是你的忠实的粉丝,我是编程初学者在学习python3,使用mac,subilme text 编辑器来看着你的影片来学习的,您用的编辑器是什么?
谢谢你的支持 :) 我这边是用 Visual Studio Code 哦 ~
彭彭老師您好:
想請問在第15行 if titl.a ! =None這段
一個空格再加一個驚嘆號的用法是什麼? 驚嘆號代表什麼意義可以再解釋一下嗎?
謝謝!
!= 是不等于的意思
>= 是大于或等于的意思
感謝幫忙解釋 :)
老師你好
我在15:12 的地方
要跑的時候完全沒有跑出任何東西,也沒有跑出錯誤碼....(完全沒有抓到網頁原始碼)
請問是甚麼問題
但下載Beautifulsoup之後都正常 就都跑得出來了
謝謝老師
好哦,最後有成功就好 :)
老師您好,我是使用MacBook 的用戶,但我按照您的影片走到15:30時,Run程式,但最後卻出現
urllib.error.URLError:
我檢查了我的Typing很多遍,但確認跟您的指示完全相同,想詢問您,我中間是哪一步出錯了,導致我無法出現跟您一樣的結果。
再麻煩您解答,謝謝🙏🏻
試著在程式碼的最上方加入:
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
感謝老師的回答!剛好有相同的問題
讲的非常棒
謝謝 :)
老師請教您:把抓到的標題寫到data.txt檔,當第二頁再寫入時會覆蓋掉上一次的內容,請問要如何排除,才能將抓多次的資料,寫在同一個文字檔內,謝謝!
打開檔案的時候設定 mode="a" 可以把每次寫入的資料附加在後面 ~
@@cwpeng-course 感謝
老師你好,我跟著影片一起操作後執行程式後,終端顯示ModuleNotFoundError: No module named 'bs4'。已經在終端下載pip3 install beautifulsoup4,然後在編輯器 import bs4,可是一直顯示module not found error no module named bs4,我有再確認一次 beautifulsoup4下載成功也改程式寫成from bs4 import beautifulsoup,但還是行不通😢,我該怎麼處理呢
很可能你的電腦裡已經安裝過一些 Python 的工具,例如 Anaconda 之類的,然後你正在虛擬環境中運作。建議可以先移除目前用不到的各種 Python 相關工具,然後再使用 pip3 安裝後試試看
PIP 是 “Python Package Index” 的縮寫
感謝分享 :)
那為什麼不是PPI
想請教老師或有看到留言的大大 第13行找div標籤的那邊
如果我想找兩個以上但不是div開頭標籤的話要怎麼寫
我試了寫2個for迴圈是寫得出來
不過資料跑出來會是兩份分開的還要一個個去對
感謝~~~
寫兩個迴圈是蠻正常的處理方式,比對資料也是很常見的操作,所以你有解決其實很棒哦 :)
請問為什麼find_all("div",class_="title") 裡面的class_要有底線??只打class好像不行
p.s很謝謝老師這麼用心的教學!!!雖然實體物件那類的東西我還搞不太懂,不過我想應該是熟悉度問題xd
因为class是内建关键字,所以必须用class_。或者您也可以用字典方式操作{"class":"title"}
odin king 明白了 謝謝你!!
感謝 @odin king 的分享和回應,很棒的訊息 :)
老師您好,先謝謝老師用心的教學,想請問將爬蟲結果寫入txt檔的問題,我的程式碼如下
with open("movie.txt",mode="w",encoding="utf-8") as file:
file.write(str(title.a.string))
有成功建立movie.txt檔案,但裡面只有輸入一筆電影名稱的資料,沒有將全部電影名稱顯示出來,想很久不知道問題出在哪裡,因此想詢問彭彭老師要如何解決比較好,謝謝
你可以試著把 mode="w" 改成 mode="a"
@@cwpeng-course 感謝老師問題已解決,改成 mode="a"以及縮排後就成功跑出結果了
@@cwpeng-course 請問老師mode='a'代表的是什麼意思
@@kai_b2w 代表要把新寫入的資料串接在檔案內容的後面。
有一點怪怪的...
with req.urlopen(>>>urlurlrequest
謝謝哥
感謝分享 ~
謝謝
老師您好
我在VScode裡輸入 pip install beautifulsoup4後出現:
pip : 無法辨識 'pip' 詞彙是否為 Cmdlet、函數、指令檔或可執行程式的名稱。請檢查名稱拼
字是否正確,如果包含路徑的話,請確認路徑是否正確,然後再試一次。
位於 線路:1 字元:1
+ pip install beautifulsoup4
+ ~~~
+ CategoryInfo : ObjectNotFound: (pip:String) [], CommandNotFoundExcep
tion
+ FullyQualifiedErrorId : CommandNotFoundException
想請問這是怎麼了及如何解決>
一樣
可以參考系列影片的第一部,確定有將 Python 的引擎安裝到電腦中,重新啟動編輯工具或電腦之後,再試試看 ~
彭彭老師你好 我想請問 在影片中class 後面為何要加上一個底線 與 !=None 的意思是?!
那只是 BeautifulSoup 的規矩,因為 class 是保留字不能用,所以他就使用 _class。
這個符號 != 是不等於的意思。
老師我想請問我想要讓每筆資料之間有區隔(換行)
所以我就把程式碼改成這樣:
with open('data.txt',mode='w',encoding='utf-8') as word:
for title in titles:
if title.a!=None:
word.write(title.a.string)
word.write('
')
但這樣最下面就會多出一行欸
請問我有辦法把那行刪掉嗎
還是說我可以用別種寫法達成這個目標
謝謝老師
可以自己定義一個 count,在迴圈中加一,並和資料的長度比較,確認目前的迴圈是否在最後一圈,如果是最後一筆資料,就不要加 write("
") 這樣的邏輯
@@cwpeng-course
照著老師的提示寫了一下, 請問這樣是對的嗎 或是有更有效率的寫法嗎
count = 0
with open('movie.txt', 'w', encoding=('utf-8')) as file:
for title in titles:
if title.a != None:
count += 1
if count != len(titles):
file.write(title.a.string+'
')
else:
file.write(title.a.string)
老師還有我想請問一下,是大部分網站都可以用這種偽裝成使用者的方法取得資料嗎,但如果有人用這種方法大量訪問網站的話,不會造成網站癱瘓之類的嗎?
大部分都可以,有些比較困難有些比較簡單而已。
你講的就是所謂 DDoS 攻擊,確實有心的話是能造成網站癱瘓的,但這對攻擊者而言,也不是完全沒成本。
另外在老師放上新教學影片前如果還想再學習爬蟲相關的部分是該先去學BeautifulSoup的檔案還是要學html的知識?
可以多了解 html 的組成,然後再研究 BeautifulSoup 還提供哪些我在影片中沒有提到的分析函式。
@@cwpeng-course 了解,我再回去先在看一次老師的html基本教學影片,然後再找看看有沒有入門的Beautiful Soup教學
老師 想請問為甚麼安裝pip後會顯示這個訊息 該怎麼做
raceback (most recent call last):
File "D:\python-tranning\crawler.py", line 13, in
root=bs4.BeautifulSoup4(data,"html.parser") #讓beautifulsoup解析HTML格式
AttributeError: module 'bs4' has no attribute 'BeautifulSoup4'
程式碼是 bs4.BeautifulSoup,沒有後面的 4
我也成功了,感謝教學
讚讚,恭喜成功!
彭彭老師您好:
程式碼最後
with open("data1.txt",mode="w",encoding="utf-8")as file:
file.write(title.a.string)
想請問老師,為什麼這個只存到第一行文字,其他沒有存到
title.a.string 代表網頁標題,所以就只是把網頁標題寫入檔案裡面而已 ~
老師好!我輸入pip install beautifulsoup4後,終端機跑出
Traceback (most recent call last):
File "", line 198, in _run_module_as_main
File "", line 88, in _run_code
File "D:\Scripts\pip.exe\__main__.py", line 4, in
ModuleNotFoundError: No module named 'pip'
請問是哪裡出了問題QQ
這個指令要直接打在終端機的提示字元後面哦 ~
终于看到爬虫了😊
加油 :)
澎澎老師你好!!
請教老師一個問題
在安裝beautifulsoup4
時出現兩行安裝結果:
E:\Python>pip install beautifulsoup4
Requirement already satisfied: beautifulsoup4 in c:\users\dada\appdata\local\programs\python\python37-32\lib\site-packages (4.8.0)
Requirement already satisfied: soupsieve>=1.2 in c:\users\dada\appdata\local\programs\python\python37-32\lib\site-packages (from beautifulsoup4) (1.9.3)
程式:
import bs4
root=bs4.BeautifSoup(data,"html.parser")
print(root.title.string)
在執行程式時出現
File "crawler.py", line 13, in
root=bs4.BeautifSoup(data,"html.parser")
AttributeError: module 'bs4' has no attribute 'BeautifSoup'
這是哪個環節出錯了
感謝老師
應該是 BeautifSoup 字打錯了,正確的是 BeautifulSoup
@@cwpeng-course
感謝老師!!找了很多次程式,都沒發現到
老師,不好意思需要再請教您二個問題:
(1.)請問老師,我無法理解為何下列程市中這段建立Request物件可以直接在req模組後建立新的物件,一般不是先在模組中先建立物件(函數、參數)再回主程式召喚模組,還是這其實整個是實體物件概念,但是class在哪裡? 我這個疑惑很頭痛,再請老師解惑謝謝
request=req.Request(url, headers={
"User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36"
})
(2.)請問之前網路連線教學中的"file.write(company["公司名稱"]+'
')",這段碼中為何一定要用"+"來串接,不能直接寫["公司名稱"]'
',我認為字典company["公司名稱"]會直接對應到字串,所以按理應該可以這樣串["公司名稱"]'
',還是真的因為兩個型態不同不能並一起,再請老師說明謝謝
1.
req.Request 這個背後就是一個我們引入的模組中寫好的 class 定義,我們透過這個 req.Request 類別去建立新的物件。
2.
company["公司名稱"] 是一個字串,"
" 是另一個字串,兩個字串要用 + 來串接。相當於 "Hello"+"World" 是對的,但不能寫 "Hello""World",可以寫 "HelloWorld" 直接放在一起,但在我們的程式情境中無法這樣做。
@@cwpeng-course 了解 很謝謝老師講解
bs4.FeatureNotFound: Couldn't find a tree builder with the features you requested: html.praser. Do you need to install a parser library? 老師跳出這樣的訊息是代表我還要下載什麼嗎
建議先檢查看看程式中是否有打錯任何細節 ~
@@cwpeng-course 謝謝老師我試試看
謝謝,太厲害了,如果要爬"子網頁的資料"可行嗎?
可以呀,
技術上每個網頁都會有獨立的網址,要把網頁的網址找出來,然後用同樣的方式去連線抓取資料。
@@cwpeng-course 希望老师能继续深入地讲讲爬虫的内容
老师您好,不知道为什么我按照您后面的操作做了那个网页还是拒绝了连线。之前的网络连线教程我也没有成功
老師 最後判斷式的部分不理解
if title.a !=None:
運算符號【!=】要放在一起看,是【不等於】的意思。所以口語上我們說:如果 title.a 不等於 None。
第二個問題要看看當時 PTT 的版面中有沒有被刪除的文章,如果都沒有被刪除的文章,結果就會沒什麼差別。
@@cwpeng-course
謝謝彭彭老師! 這樣我了解了!
也就是說 如果版面沒有刪除的文章
即便不寫判斷式的指令也不影響抓到的標題列表
非常感謝!
感謝你的發問 我也是這一個!=看不懂 幫大忙了!
老師,不好意思請問一下。
我已經跟你一樣成功 pip install beautifulsoup4
但是跑起來仍出現
import bs4
ModuleNotFoundError: No module named 'bs4'
的狀況
另外,我的電腦是mac
Mac 建議用 python3 取代 python 來執行程式,安裝的時候就用 pip3,如果有權限問題前面就加個 sudo,例如:
sudo pip3 install beautifulsoup4
謝謝!
不客氣哦 ~
@@cwpeng-course 老師您好,想請問一下為何加入會員還無法觀看會員影片?謝謝
@@阿騰-g7n 你加入的是每月 30 元的贊助會員,可以再仔細看看會員服務的內容,專屬的影片要加入每月 100 元的會員才能看哦 ~
太厉害了,能跟学得到结果,但是不知道为什么这样写程式?
哈哈哈,先有成果很重要,细节可以回顾系列的基础教学喽 :)
請問用Visual Studio Code 安裝BeautifulSoupc4執行後會出現 No module named 'bs4 ˇ請問我要怎麼修改錯誤
若確實有按照程序安裝也沒有顯示錯誤,就要看程式碼的引用是否正確,若程式碼引用也正確,那就要看你的電腦裡是否有安裝其他的 Python 虛擬環境,例如 Anaconda,若有安裝其他的虛擬環境可能會有些環境切換的議題,若是不瞭解虛擬環境的詳細操作方式 ( 可能也不是留言能處理的 ),建議可以先把其他 Python 的環境先移除,重新啟動電腦之後再跟著教學做。
@@cwpeng-course 非常謝謝您的回答,我重新試看看
老师讲的真好。非常感谢。顺便问一下,为什么用这个程序抓取不了综合版的title呢?
你可以看下一部影片哦,可能有 Cookies 的部分要处理
謝謝老師的影片 也因此開始coding
有一個問題想請問老師:
自己想要印出td class下的href,
理想中要出現“href="C.php?bsn=60404&snA=3890&tnum=1”
但用了print(lastpage["href"]) 出現TypeError: list indices must be integers or slices, not str
請問老師哪裡不對了
***********
Code1:
lastpage = root.find_all("td", class_="b-list__main")
print(lastpage)
Output1:
[
置頂
【巴哈】輕鬆不放縱,哈啦園地有賴你我共同維繫
,
【情報】10月8號開發日誌
***********
***********
Code2:
lastpage = root.find_all("td", class_="b-list__main")
print(lastpage["href"])
Output2:
TypeError: list indices must be integers or slices, not str
***********
lastpage 是一個列表 (List),所以不能直接取屬性。需要先寫一個迴圈,把列表中的每個 td 都抓出來,然後再抓底下的 a,之後才能取得屬性。
想問一下若剛好找到ppt那頁沒有刪除的文章(也就是每篇文章皆有標題),那最後的for迴圈方式還會跟老師您打得一樣嗎,因為最後都跑不出全文字
老師抱歉我剛學不清楚:
請問一下如果 import bs4 的時候下面出現黃色線是 什麼原因?
*我已經有照步驟下載beautifulsoup4了
如果程式可以執行就沒問題。那只是你安裝的程式碼檢查工具給的建議,但不一定正確 ~
難得的好教學!
謝謝 :)
我學到這裡發現與發好多要載入的模組也蠻多的 想請教一下老師您都會去記這些語法嗎??
我們不會記得每個語法的細節,但會記得搜尋資料的思考方式 ~
老師您好,請問一下最後用beautifulsoup 解析完後,裝進root內。後續用root.find_all時,其中的find_all(程式第14行)是beautifulsoup裡面內建的功能嗎?還是單純python內建的函式? 並謝謝老師
find_all 是 beautifulsoup 提供的功能哦。