請問老師,我跟著做下面這段後, clist=data["result"]["results"] with open("data2.txt","w") as file: for company in clist: file.write(company["公司名稱"]+" ") 為什麼最後會出現這個error,能怎麼解決? Traceback (most recent call last): File "14.py", line 45, in clist=data["result"] " TypeError: string indices must be integers " # 我用mac , python 3.7.4
有個問題想請教老師 在clist =data [“result”][“results”]這行中的clist資料格式是屬於list 但在下面一行的for迴圈中 for company in clist: file.write(company[“公司名稱”]) company[“公司名稱”]這個寫法應該屬於字典中鍵與值的對應,但為什麼list也可以使用這個方法找出company對應的值,謝謝老師
想請問澎澎老師 為什麼在明明都在for迴圈裡面,在程式中直接print不用+" ",就可以直接換行 而在寫入另一個檔案("data.txt")中,卻要使用+" " 來換行?才會一列一列的 是觀察而得的嗎 這是您的程式: with open("data.txt","w", encoding="utf-8") as file: for company in clist: print(company["公司名稱"]) file.write(company["公司名稱"]+" ")
彭彭老師,为什么我写的出现这个提示 UnicodeEncodeError: 'gbk' codec can't encode character '\xbb' in position 30687: illegal multibyte sequence 找到原因了,用python3.5自带编译器可以正常显示,但不知道在Visual Studio Code 中怎么修正。
彭彭老師你好,想請教以下問題: import urllib.request as request import json src="data.taipei/opendata/datalist/apiAccess?scope=resourceAquire&rid=296acfa2-5d93-4706-ad58-e83cc951863c" with request.urlopen(src) as response: data=json.load(response) clist=data["result"]["results"]
不好意思 請問澎澎老師 我照著課程上面打 發現錯誤如下 "Traceback (most recent call last): File "", line 2, in data=json.load(response) File "C:\Python34\lib\json\__init__.py", line 268, in load parse_constant=parse_constant, object_pairs_hook=object_pairs_hook, **kw) File "C:\Python34\lib\json\__init__.py", line 312, in loads s.__class__.__name__)) TypeError: the JSON object must be str, not 'bytes'" 請問要如何解決呢? 謝謝您的教學影片~ 獲益良多~
澎澎老師,我不知道我為什麼連最基本的連線都做不了,我照著您敲代碼,試著run,但是出錯誤: Traceback (most recent call last): File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/urllib/request.py", line 1342, in do_open h.request(req.get_method(), req.selector, req.data, headers, File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/http/client.py", line 1255, in request self._send_request(method, url, body, headers, encode_chunked) File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/http/client.py", line 1301, in _send_request self.endheaders(body, encode_chunked=encode_chunked) File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/http/client.py", line 1250, in endheaders self._send_output(message_body, encode_chunked=encode_chunked) File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/http/client.py", line 1010, in _send_output self.send(msg) File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/http/client.py", line 950, in send self.connect() File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/http/client.py", line 1424, in connect self.sock = self._context.wrap_socket(self.sock, File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/ssl.py", line 500, in wrap_socket return self.sslsocket_class._create( File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/ssl.py", line 1040, in _create self.do_handshake() File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/ssl.py", line 1309, in do_handshake self._sslobj.do_handshake() ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate in certificate chain (_ssl.c:1122) During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/Users/bokmanchiu/Library/Mobile Documents/com~apple~CloudDocs/G-python/run.py", line 3, in with request.urlopen(scr) as response: #連線 File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/urllib/request.py", line 214, in urlopen return opener.open(url, data, timeout) File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/urllib/request.py", line 517, in open response = self._open(req, data) File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/urllib/request.py", line 534, in _open result = self._call_chain(self.handle_open, protocol, protocol + File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/urllib/request.py", line 494, in _call_chain result = func(*args) File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/urllib/request.py", line 1385, in https_open return self.do_open(http.client.HTTPSConnection, req, File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/urllib/request.py", line 1345, in do_open raise URLError(err) urllib.error.URLError:
可以在市政府開放資料搜尋畫面中篩選JSON的資料(我用了臺北市食材登錄平台的資料),API網址在下載資料的右邊預覽按鈕(按下去會顯示API網址),然後因為資料內容有一些不太一樣,所以我自己修改了一部分的編碼內容僅供參考 #由於台北市政府網站更新,所以修改了採用的資料與部分寫法 import urllib.request as request import json src="data.taipei/api/getDatasetInfo/downloadResource?id=8a569b5b-0cb1-4c7f-a064-780b3301354c&rid=9744ea1c-aafb-471c-8bb8-04f398ad415a" with request.urlopen(src) as response: data=json.load(response) #利用json模組處理json資料格式 print(data) #抓取特定資料 #clist=data["result"]["results"]#指定資料所在的巢狀字典,由於參考資料改變,這一行僅供參考 for market in data: print(market["夜市名稱"]) #取得夜市名稱的資料 with open("market.txt", "w", encoding="utf-8") as file: #開啟檔案並寫入資料 for market in data: file.write(market["夜市名稱"]+" ")
import urllib.request as request import json src="opendata.hccg.gov.tw/dataset/d55cf39b-bebc-488f-9a86-4f36e2865d3f/resource/111d2c30-a788-41f9-8ebd-0798fa69f261/download/20180328091122254.json" with request.urlopen(src) as response : data = json.load(response) clist=data with open("data4.txt","w",encoding="utf-8") as file : for company in clist: file.write(company["場所名稱"]+" "+company["AED放置地點"]+" ") print(company["場所名稱"]+" "+company["AED放置地點"]+" ")
這陣子心血來潮想學程式,看到老師的解說從最一開始不怎麼了解程式到現在有初步的了解,後續會再跟著老師學習!
謝謝你的回饋,很高興對你有幫助,一起努力 :)
这节课太棒了,就像实战一样,顺利得到程式结果,有一种成就感。
耶,很高兴对你有帮助哦 :)
每個細節都講得很清楚,有不懂的地方看幾遍配上解說就很好理解!
謝謝你的回饋哦 ~~~~~
加油!彭彭老師教得比看書教得好!
謝謝你這麼說 :) 給我很多動力 ~~~
原來要抓出統編要打上print(company["\ufeff統編"])
用網頁原始碼看不到,但是透過老師說的→
data=json.load(response)
print(data)
就會看的到了 ex:'\ufeff統編': '12978019'
想了很久,但複習課程很有幫助,謝謝彭彭老師。
謝謝你的分享 :) 原始資料總是會有很多意想不到的狀況,在也是工程師存在的理由 XDDDD
終於知道為什麼統編出不來了!!!!
謝謝
很實用也講得很清楚,已訂閱期待更豐富的內容 謝謝
好哦,還會再繼續努力 :)
謝謝彭彭老師把流程講解地很清楚~一步一步照著完成真的很有趣XD
哈哈哈,很高興看到有趣的回饋,謝謝哪 :)
老師聲音好親切哦,每次説要跑咯我就超激動XDDD
XDDDDD
彭彭老師的教學內容很讚,眾口鑠金、無庸置疑,在課程下方的留言部份有個建議(也是我的困撓)請老師試試看可否能改善,就是請老師讓系統在每則留言最前頭加上編號,方便追蹤。
以我為例子,留言共有500則,想要一則一則的看全部內容與回覆、了解、記錄作筆記,就要3小時以上的時間,問題不是這個,問題是只看完一部份留言,還沒有全部看完,臨時有需要馬上處理的事情,只好忍痛離開網站,去處理事情。下次進入留言後,要忍耐的由上往下或由下往上一則一則的去找要繼續看下去的留言,哈哈!終於找到了,看一下時間已經過了55分鐘快一小時了,很辛苦!好累喔!老師,如果有編號記住編號,下次要想看的留言不必30秒鐘就可以快速找到,感覺快速、方便、輕鬆、愉快、好感恩!
例如留言為 彭彭老師的教學內容很讚,好棒棒! 是第99則,加上編號後變成 99彭彭老師的教學內容很讚,好棒棒!,如此以後在追蹤這則留言就非常方便的快速找到,就是邀網友一起追蹤討論,網友也會非常樂意參與,敬請老師採納我的建議,試試看改善此功能,相信您一定可以成功,造福初學者與網友,功德無量,謝謝您!
系統是 RUclips 的,不是我的,所以可能無力去修改 XDDD 但感謝你的詳細建議,很棒 :)
老師你好.
不知道老師能出一集課程.來教導如何用Python建立資料庫.輸入資料.查詢資料...作業
感謝老師如此詳細且精彩的課程
會哦,在資料庫課程的後面會有這方面的介紹,也謝謝你的回饋呦 :)
今天終於跟著影片練習完了,覺得教得非常好
請問老師後續還會有相關課程嗎?
或是是否有專注於爬蟲相關應用的付費課程
謝謝彭彭老師
會哦,這個確實在規劃中,進階的爬蟲實例和範例我都打算在未來放在 Udemy 的付費課程中 ~ 應該會是近幾個月的事情 :)
@@cwpeng-course 為什麼不放在台灣的平台...例如Tibame或是Hahow??我目前只知道這兩個...
@@cwpeng-course 您之後會不會教AI呀??我覺得您上python上的好清楚喔...
新北市政府覺得困惑,為何廠商名錄點閱爆表XD
哈哈哈哈哈 XDDD
請問老師後面還會有新的影片是關於python的嘛
因為老師講解得很清楚 想請問老師
謝謝彭彭老師
不客氣 :)
會哦,還會持續有 Python 相關的教學 ~
謝謝老師 跟著老師學習 有進步且有成就感
很高興對你有幫助哦 :)
感謝老師 我今天學會怎麼用open-data api
哈哈哈,很棒呀,謝謝你和我分享 :)
感謝彭彭老師
做完這個課程之後 我有自己再去抓取公車的資訊
不過鎖定路線名稱之後 抓下來的是整個公車的value
有辦法鎖定我要的數值就好嗎?
他路線是按照藍紅綠黃等等 而我只想要抓取紅色的資料
不過通通都被包裹在"路線名稱"之中
謝謝彭彭
不同的資料,會有不同的格式,你得根據得到的資料去解析出你真正要的資訊。
每種狀況都不一樣,所以我也沒辦法在這裡幫上什麼忙 ~
請問老師,我跟著做下面這段後,
clist=data["result"]["results"]
with open("data2.txt","w") as file:
for company in clist:
file.write(company["公司名稱"]+"
")
為什麼最後會出現這個error,能怎麼解決?
Traceback (most recent call last):
File "14.py", line 45, in
clist=data["result"]
" TypeError: string indices must be integers "
# 我用mac , python 3.7.4
目前沒辦法完整判斷,我猜測可能是忘了將從網路上抓到的文字串,透過 json 模組轉換成字典和列表了?
這集非常有成就感!謝謝老師!
讚讚,繼續加油 :)
感謝老師的教學 萬分感謝
不會,謝謝你的回饋 :)
哈哈 今年2021/7月 那個名錄 的瀏覽次數66992次 其他資料只有10幾次大多個位數
所以估計平均每年27000次點擊 一天就會有70~80幾人 因為看了這個教學 跑去點網頁
網頁製作者保證滿頭問號xd
哈哈哈,這件事情確實挺有趣的,希望不會造成對方的困擾才好 @@a
老師,也可以順便教pands的相關影片,也預祝你破一萬!!!
哈哈哈,謝謝你關於教學方向的建議和祝福,我還沒注意到快破一萬的說 XD
應該是版本更新問題吧
第16行使用'w'會造成覆寫而不是往後追加
改成'a'就沒問題了
參考:網路資料
w 會複寫,a 會追加沒錯 ~ 謝謝你的分享 :)
嗨! 彭彭你好,有照老師的程式跑過一遍,但發現公司數量最多只能取到1000家,有看到台北市資料大平台的設定是單次最多1000筆。想請問老師是不是因為這樣的原因才讓資料只能被拿到1000筆,還是在取得公開資料時要另外做設定?
這是資料提供方的限制,你可以試著去查看 API 有沒有辦法放寬數量,如果沒辦法,那麼我們也就只能這樣。
@@cwpeng-course 了解!謝謝老師的回覆 👍👍
老師您的
with open("data.txt","w",encoding="utf-8") as flie:
為什麼不用加 mode="w" 就可以執行呢?
第二個參數預設就是 mode 的設定,要明確的寫出來也可以 ~
感謝彭彭老師~一路看到這個檔案~從0開始真的受益良多~
在練習的時候發現有的公開資料在寫入檔案的時候會有出現底下的錯誤:
TypeError: can only concatenate str (not "NoneType") to str
請問這樣要怎麼處理?謝謝
哈~知道了~自問自答~加一個判斷是不是none就好了~感謝老師~繼續往下學習
有解決就好嘍 :)
大有回饋
with open("companies.txt", mode="r", encoding="utf-8") as file:
print(file.read())
感謝你的分享 :)
謝謝彭彭老師的詳細教學!另外想請教最後寫入檔案時有沒有辦法寫入多項變數資料(例如:每一列資料都有名稱、統編、地址) 再次謝謝老師!
不客氣 :) 可以呦,就把變數串成一個字串再一起 write 出去嘍 ~
老師在用第一個台灣大學的網址時應該標註,網址下有底線才是有效網址,不然單純在visual code打出來的網址他似乎讀取不到
感謝您的建議 ~
感謝解惑,剛一直卡在這^^ 複製一下 貼上就好了
載入> 使用
先載入模組,在使用模組中的函式或變數
感謝紀錄 ~
謝謝老師的精彩解說,讓我可能迅速的了解,但是在網路連線這一章節一開始就卡住了 ,我用你網路連線跟資料串接的語法,重複打一遍,結果卻無法執行顯示錯誤,我確定有連網路@@,請問這跟版本有差異嗎?還是我哪邊錯了? 卡死中
有個問題想請教老師
在clist =data [“result”][“results”]這行中的clist資料格式是屬於list
但在下面一行的for迴圈中
for company in clist:
file.write(company[“公司名稱”])
company[“公司名稱”]這個寫法應該屬於字典中鍵與值的對應,但為什麼list也可以使用這個方法找出company對應的值,謝謝老師
同問
單純是 for 迴圈的基礎語法:把列表中的資料一一取出放到前面的變數名稱中,執行迴圈。變數名稱也不一定要叫做 company,要叫做 abc 也行。
老師請問:
如果是想印出 "_importdate" 裡面的"date" 是這樣寫嗎?
for company in clist:
print(company["_importdate"]["date"])
老師你好
我有個問題想問一下
這邊的 decode("utf-8")
為甚麼不能使用 上次提到的
encoding ("utf-8")
utf-8 不是任何形式都可以用嗎?
還是前面的英文單字 也是有影響?
decode 和 encode 是不同的意思,確實會有影響哦 ~~~
老師您好,目前如果直接複製api連結並在瀏覽器另開分頁,似乎就只有前20筆資料(按照影片步驟做也確實只有20筆資料;然而若直接下載csv檔案則會有非常多筆,想問是目前網站給的api本身就有誤嗎?或是我可能遺漏了哪些東西?謝謝老師!
老師您好:
想請問為什麼網路連線在vs code處理會跳出urllib.error.URLError:
但如果複製到google colab 卻可以正常顯示呢
如果你使用 Mac,可以在程式碼最上方加上:
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
謝謝彭彭老師! ◉‿◉
社區發展服務-社區發展協會(內湖)
2019-01-22
487次
臺北市內湖科技園區廠商資料。
2019-01-16
6574次
臺北市內湖垃圾焚化廠營運管理及環境品質監測報告
2018-12-24
851次
提供臺北市各區里疏散避難圖資訊
2018-10-23
219次
提供臺北市「中山、內湖區已登記公私有土地筆數面積」統計資料。
2018-01-22
144次
蠻多人關心誰進駐內湖 XD
哈哈哈,這件事情我有發現 XDDDDD
想請問老師,為什麼在 12:14 那邊的
data=json.load(response)
後面不用加入.decode(utf-8)
就能顯示中文了呢?
可以想成我們呼叫的函式內部幫我們處理掉解碼的部分了 ~
彭彭老师下午好!
我在跟着老师的视频学习,在爬台北公开资料,代码都是参照老师的一个一个敲打的,为何终端那里报错呢?例如:self.sock = self._context.wrap_socket(self.sock,
彭彭老師您好!謝謝提供這麼棒的課程教學
請問老師為什麼將公司名稱改成統編就跑錯誤KeyError,公司地址就可以順利產生。
影片老師有說原始的統編的key處理不乾淨,換成"\ufeff統編"再輸入run一次試試看
感謝 @AAAFFnnn 分享 :)
好有趣 老師教得讓人想一直學下去
哈哈哈,加油嘍 :))))
彭彭老師您好,想請問一下,我使用您的範例程式分別在macOS跟Windows系統上的vscode執行,macOS會編譯失敗,而windows則能印出結果,請問macOS有需要安裝其他套件嗎?謝謝
同問 我也適用macOS的vscode跑 從印出公司名稱那邊就出現問題 格式跟彭彭老師的結果會不一樣 會跑出亂碼QQ 想請問該怎麼解決?謝謝
要看看實際的錯誤訊息哦,另外 Mac 執行時請使用 python3 指令 ~
謝謝老師的教學~~
在練習的時候發現網站的code很難看懂一個資料是在哪一層的字典裏面
除了用肉眼自己找
有沒有一個程式的方法可以找出一個資料 是被哪幾層字典包裹起來的
sorry文字表達不太好
希望你看得懂我在講甚麼
利用 Chrome 的開發人員工具,裡頭有個 Network 的標籤,可以觀察到瀏覽器的網路連線和結果,他會幫你把資料整理的很容易看 ~
@@cwpeng-course
謝謝!
我試試看
謝謝彭彭老師
想請問為什麼老師在連線台灣大學的網址時,不用import ssl就可以成功連接上?
Mac 的憑證要特別處理,Windows 的不用 ~
谢谢彭彭老师
:)
目前照老師的爬取無法爬取資料請問老師還會重新拍一部影片更改過的版本嗎?因為會出現
urllib.error.URLError:
錯誤的訊息
Mac 電腦可以在程式最上方加上:
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
老師我用windows筆電也遇到一樣的情況,但也是加了上方兩行就ok了,請問這樣正常嗎
在Python 網路爬蟲 Web Crawler 教學 - Cookie 操作實務單元有教到怎麼抓取多頁,謝謝老師
不會呦,謝謝你的回饋 :)
- 網路連線公開資料連接
- 網路連線 載入模組
- 下載特定網址資料
- 公開資料 範例;; 台北市政府公開資料
- 確認資料格式
- 解認json格式
感謝紀錄 :)
謝謝彭彭老師
:)
api 存取是什麼東西 彭彭可以稍微介紹一下嗎?
最基本的理解就是網路上有些人會提供能夠用網址連線得到的資料,我們稱之為 API。我們可以透過 Python 程式去連結這樣的 API。
想請問澎澎老師
為什麼在明明都在for迴圈裡面,在程式中直接print不用+"
",就可以直接換行
而在寫入另一個檔案("data.txt")中,卻要使用+"
" 來換行?才會一列一列的
是觀察而得的嗎
這是您的程式:
with open("data.txt","w", encoding="utf-8") as file:
for company in clist:
print(company["公司名稱"])
file.write(company["公司名稱"]+"
")
print 本身會自己帶有換行的效果,但是 write 不會。
@@cwpeng-course 謝謝老師 !
模組 module: 獨立的程式檔案,可以重複使用
感謝紀錄 ~
首先感謝彭彭老師的教學影片
我完全是新手,一步一步地看著影片到這裡
有時候要想好久才了解程式碼的運作QQ
這個台北市政府的APi好像無法使用了
請問有哪位朋友可以提供其他的API嗎
我記得留言裡面好像有些其他的連結可以使用 ~
可以使用哦。。。因為有SSL 可以參考相關網友的寫法。。。是可以讀取資料的。。
不好意思,想請問一下彭彭老師,我突然想到在資料傳輸的過程中會有安全性的問題嗎?
如果網址是 https 開頭通常就大致上安全。
老师,我是做建筑的,bim。信息化这块的,里面有个插件叫dynamo,是以python作为底层驱动,经常需要调取数据,所以对层级关系比较容易理解,当中有个调取公司名称,那可以clist=data["result"]["results"]["公司名称"]嘛?
如果按照我们的资料格式,应该会是:clist=data["result"]["results"][0]["公司名称"]
老師好
有一個概念上的問題想請教老師
請問用網路連線程式、公開資料串接 來取得資料 會有哪些好處 相對於先下載資料(可能是csv or xlsx etc ...)然後在寫入python
因為我是從R轉換成python的使用者 所以很多想法都還會從R出發 慢慢在和python磨合中
還煩請老師幫忙解答 謝謝
直接用程式串接,主要的好處在於資料源如果有更新,程式就能夠直接取得最新的資料,不用再手動去下載一次 ~
想請問老師如果出現以下問題該如何處理?
程式碼都是按照老師的方式打
後來json那段也有改成data=json.loads(response.read().decode("utf-8"))
但依舊跑出這種情況
想問問老師該如何處理
File "/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/json/decoder.py", line 355, in raw_decode
raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
看起來是沒有順利抓取到資料,可能要再仔細檢查一下前面的程式碼。
谢谢,教的特别好
:)
請問老師為何我在data.txt擋中公司名稱只有1000筆的資料,但是您的教學影片當中有5000多筆,不解?請老師解惑!
應該是政府的資料來源,抓取一次被限制在 1000 筆資料了 ~
@@cwpeng-course 謝謝!
彭彭老師,請問讀取檔案是用json格式的話,最後在把公司名稱輸出到文字檔的時候不需要使用json嗎?
不需要哦,這是兩個獨立的動作。
讀取檔案,是要配合來源檔案的格式。
輸出檔案,是按照我們自己的想法輸出就可以。
老師您好,想請問為甚麼把最後 for company in clist: 這段
寫在 with open("0128kk",mode="w",encoding="utf-8")as file:之前 只會跑出一組數字呢?
那組數字可能來自於你程式碼的其他地方,細節要看你的完整程式碼我才能判斷。
原則上這段當然要寫在打開檔案的程式碼裡頭,才會有意義嘍 ~
感謝彭彭老師, 影片內容深入淺出
請問有教學的講義跟教學範例程式可以下載嗎?
你可以參考我的課程網站,所有相關公開的內容都在上面嘍:
training.pada-x.com/
感謝老師詳細的教學!!
想請問一下老師中間有放入的
clist=data["result"]["results"]這一個作法,在變數data後面放入兩個[][]這一段用法算是甚麼意思呢~? 他有沒有一個比較專門的名詞之類的~? 是專屬於json格式的資料有兩層才這樣做帶入嗎?? 我現在因為不理解只能先背的,但還是希望老師能簡單說明一下,感謝>
只是基本的字典用法而已,JSON 中的大括號在 Python 裡會被詮釋成字典。
老師 請問如何分辨資料是屬於哪一種格式(JSON,CSV)的呢,是看排列方式嗎。
對哦,直接打開文件,觀察資料的格式。例如 CSV 很明顯就是用逗號隔開的表格式資料。
彭彭老師您好
我在編譯方面有錯誤,實在解決不了,可以幫我看一下嗎 (我用的是mac電腦)謝謝
終端機顯示:
wangzihaode-MacBook-Air:python tranning hao0804$ python open-data.py
Traceback (most recent call last):
File "open-data.py", line 1, in
import urllib.request as request
ImportError: No module named request
很可能你使用的是 Python 2 的版本問題,如果是 Mac 電腦,確認有安裝新版的 Python 之後,執行時使用:python3 檔案名稱
那老師可以解釋一下socket模組嗎?
我在網路上學了很多,想聽聽看老師是怎麼說的
socket 模組的使用,必須跳脫 HTTP 通訊協定,回到更底層的 TCP/IP 通訊協定來思考,這個是大方向。
感謝你的建議,有時間的話我會考慮錄這方面的影片 :)
謝謝
老師您好:看了你的影片對我這初學者來說受益良多,但是有幾個問題想請教您指點一下。
1.網路上open data資料如果1小時更新一次,我要連續抓取不監斷(1小時抓一次),請問該怎處理?
2.如果成功抓取下來,我又不想覆蓋之前資料想要同個資料檔案下排序下去,請問該怎處理?
3.下載後的資料,依時間來說我只想要留取最近24小時的資料,等於超過1天以前資料會自動刪除,請問該怎做處理?
謝謝彭彭老師
1. 可以使用作業系統中的排程功能,通稱 cron job
2. 打開檔案時使用 append mode,例如 open("test.txt", "a")
3. 一樣,可以使用上述作業系統中的排程功能,每天跑一個程式來清除過期的資料。當然你在儲存資料的時候就要帶上時間的資訊。
謝謝老師的意見指導,我在試試看^_^
謝謝老師指點的方向,我試成功了!!希望未來可以跟老師學習到更多更實用的技巧^_^
恭喜成功 :)
彭彭老師,为什么我写的出现这个提示
UnicodeEncodeError: 'gbk' codec can't encode character '\xbb' in position 30687: illegal multibyte sequence
找到原因了,用python3.5自带编译器可以正常显示,但不知道在Visual Studio Code 中怎么修正。
感谢你的分享 :)
我的程式中好像没有用到 gbk 这个编码,抓取的资料包含繁体中文,有点不太能确定你那边的状况,不过你有初步解决问题我觉得很棒。
感谢彭彭老師, 我可能是安装Visual Studio Code的过程中出现了问题,不知道怎么解决
彭彭老師能不能出个安装Visual Studio Code的说明
好哦,有时间的话我会出一下 ~
老師好,想請問老師
import urllib.request as request
ImportError: No module named request
已下載python3.10.2(mac)
但一直跑出上面的錯誤訊息
想請問老師是哪個部分需要改進
謝謝老師
加上這個
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
#如果您不是在尋找經過驗證的 SSL,那麼只需使用未經驗證的 SSL
版本更新過了
感謝 @Jay 的回應。如果是 Mac 的話,執行時要輸入:python3 檔案名稱
@@q0988138683 太感謝了!
@@q0988138683 同樣感謝大大 小小mac新手路過!!
彭彭老師你好,想請教以下問題:
import urllib.request as request
import json
src="data.taipei/opendata/datalist/apiAccess?scope=resourceAquire&rid=296acfa2-5d93-4706-ad58-e83cc951863c"
with request.urlopen(src) as response:
data=json.load(response)
clist=data["result"]["results"]
data 是一個字典,你在原始的資料中看到最外層是大括號 {}。
data["result"] 也是一個字典,你在原始資料中看到 {"result":{}}。
data["result"]["results"] 是一個列表,你在原始資料中看到 {"result":{"results":[]}} 後面的那一對中括號 []。
這個名字太長了,所以放進新的變數 clist 中。
所以到 clist 之後,才是使用列表的邏輯來抓取資料。
你可以寫 clist[0] 代表列表中的第一筆資料。
@@cwpeng-course 了解了,感謝老師,所以如果把原始資料的內容拿掉就是長這樣嗎?
{"result":{"limit":1000,"offset":0,"count":0,"sort":"","results":[]}}
原來是巢狀字典的概念,之前沒有碰到反應不過來 = =
不好意思
請問澎澎老師 我照著課程上面打 發現錯誤如下
"Traceback (most recent call last):
File "", line 2, in
data=json.load(response)
File "C:\Python34\lib\json\__init__.py", line 268, in load
parse_constant=parse_constant, object_pairs_hook=object_pairs_hook, **kw)
File "C:\Python34\lib\json\__init__.py", line 312, in loads
s.__class__.__name__))
TypeError: the JSON object must be str, not 'bytes'"
請問要如何解決呢?
謝謝您的教學影片~
獲益良多~
可能需要你的完整程式碼來判斷原因哦 ~
老師,想請教,自從我寫了一些會跑出搜尋途徑ex:sys.path、或網路原始碼,在terminal 那裏用cls清除版面後,往上滾動滑鼠發現他們還是在,不知道這樣是不是正常?
不用太在意,他只是個小工具幫助你讓終端機清空視覺舒服而已,不用特別去轉動,就算轉動看到了之前的內容也不會有影響。
老師您好,執行過程中,一直遇到SSL: CERTIFICATE_VERIFY_FAILED with urllib的error,後來安裝了sudo /Applications/Python\ 3.10/Install\ Certificates.command之後有成功解決問題,但是想請問為什麼會出現這個錯誤呢?
如果要連線到 HTTPS 的網址,Python 本身要安裝 SSL 憑證,但某些 Python 版本和作業系統沒有預設安裝這個憑證,所以需要額外做處理。
老師,請問file.write()這個功能是不是一次只能寫入一個參數,我想寫入兩個參數(公司名稱跟公司地址)的時候他出現這個錯誤:TypeError: write() takes exactly one argument (2 given),所以這個用法一次只能寫入一個參數嗎?
P.S. 我完全照老師打的只寫入公司名稱有成功
對哦,只能夠寫入一個參數。
可能要看看詳細的程式碼才能判斷原因哦 ~
你好我想问一下我在网络连接的部分跟你的程序一样,但跑不到,会显示 raise URLError('unknown url type: %s' % type)
urllib.error.URLError:
请问是什么问题呢,我的是python 3
我无法从这个错误讯息中判断,可能需要你原始的程式码来看看 ~
臺北市內湖科技園區廠商名錄被使用了33740次,裡面都是老師的學生吧
這件事情我有注意到,挺有趣的 XDDD
彭彭老師好,請問如果同時print出統編和公司名稱,應該怎麼寫?用for迴圈卡住...謝謝
就依樣畫葫蘆:
print(company["\ufeff統編"], company["公司名稱"])
老師您好,若我是想要將篩選完的資料寫入某個資料夾內已存在的txt檔,有辦法操作嗎?
因為原本的方式會直接在資料夾外新增一個txt檔(與資料夾內的txt同檔名),謝謝!
使用 open 打開你想要存的檔案 ( 已經存在的也沒問題 ),然後就直接寫入資料即可。如果真的是同一個資料夾同檔名應該會直接覆蓋,可能是檔案名稱沒有完全顯示出來。
老師你好,我在照著老師寫的時候,發現他把urllib.request當成module這裡附上:ModuleNotFoundError: No module named 'urllib.request'; 'urllib' is not a package 請問老師是發生什麼事了
可能是你的 Python 是第二版的,這個模組是 Python 3 才支援。如果使用 Mac,執行時打:python3 檔案名稱
一直出現"AttributeError: partially initialized module 'json' has no attribute 'load' (most likely due to a circular import)",無法下一步
已解決,原來是我的檔名取成json!!
有解決就好 :)
想請問一下,我照著老師的影片示範打,要import的時候出現以下錯誤訊息
import urllib.request
ImportError: No module named response
我用的是MAC系統,python版本是3.9的
我有時候執行某一些老師教的專案也都會像你這樣,確定都有儲存資料,但還是會跳出訊息好像是沒抓到一樣
我的解法都比較怪,會關掉整個程式重開,他就會抓到了.... XDDD
但我也希望知道老師建議的方式
可能是版本問題,Mac 要執行第三版的話要輸入:python3 檔案名稱
我想要請問我在連線台大網址的時候出現異常,但填入例如google網址的時候就正常運作,請問是因為原始碼中有中文沒有辦法進行運作嗎? 想知道有什麼方式可以解決嗎呢?(有找到parse和quote,但不知道如何使用?)
謝謝彭彭老師
可能要把程式碼貼出來看看比較有機會幫得上忙 ~
老師您好,影片後半段的程式碼"for company in clist:"其中的company是什麼?(因為沒有去定義company但卻可以直接用這個名稱所以有疑慮)
你可以複習一下 for 迴圈的介紹哦,在 for 迴圈的語法中:
for 變數名稱 in 列表:
那個變數名稱是直接建立的,會依序取得列表中的資料,並可以在迴圈中使用。
这个和for i in range(1)中的i一样的,名字随便取
data=response.read().decode("utf-8")
已解决
嗯嗯嗯 :)
不好意思,想請問一下老師,若出現ImportError: No module named request是因為沒有安裝request模組嗎?如果是的話,請問該如何安裝?
然後還有,謝謝老師您的講解,非常清楚。
先確認一下模組的名稱應該是 urllib.request 不是 request。這是 Python 3 內建的模組,如果你沒有可能是 Python 版本問題,Mac 電腦執行時請輸入:python3 檔案名稱
彭彭老師您好
在我關掉Visual Studio Code 後
要執行程式時就突然跑出 can't open file 'open-data.py': [Errno 2] No such file or directory
這是路徑有問題嗎,想請問解決辦法
麻煩彭彭老師了
錯誤訊息的意思是找不到程式檔案。
觀察一下命令列的工作路徑,是否和你放檔案的資料夾一樣。
然後確認程式檔案的名稱確實正確。
你好 請問 data=response.read()是否等於 data=request.urlopen(src).read()呢?
後方ˇ的寫法是等於同時存取urllib.request模組的open與read方法嗎?
對哦,可以縮寫成後面那個。
先使用 open 方法建立連線,再使用 read 方法取得資料。
請問一下老師,我照老師的程式碼
用utf-8做解碼出線下面的錯誤訊息要怎麼辦 ? ><
UnicodeEncodeError: 'cp950' codec can't encode character '\xa9' in position 22491: illegal multibyte sequence
來幫忙一下。。
好像是因為在windows環境中會預設用cp950來encode/decode 所以需要把 encoding預設成utf8
試試加上底下那樣應該可以順利執行
(因為也是新手所以不一定正確,但可以試看看XD)
with open('你的文件位置/1.txt', 'a',encoding = 'utf8') as f:
results = obj.get_text()
f.write(results + '
') #f objeocct open txt
感謝 @鱈魚 的幫忙 :)
應該是沒有正確的使用 utf-8 解碼,或許需要看看你實際的程式碼,才能更仔細的判斷原因哦 ~
謝謝幫忙~已解決
澎澎老師,我不知道我為什麼連最基本的連線都做不了,我照著您敲代碼,試著run,但是出錯誤:
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/urllib/request.py", line 1342, in do_open
h.request(req.get_method(), req.selector, req.data, headers,
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/http/client.py", line 1255, in request
self._send_request(method, url, body, headers, encode_chunked)
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/http/client.py", line 1301, in _send_request
self.endheaders(body, encode_chunked=encode_chunked)
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/http/client.py", line 1250, in endheaders
self._send_output(message_body, encode_chunked=encode_chunked)
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/http/client.py", line 1010, in _send_output
self.send(msg)
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/http/client.py", line 950, in send
self.connect()
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/http/client.py", line 1424, in connect
self.sock = self._context.wrap_socket(self.sock,
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/ssl.py", line 500, in wrap_socket
return self.sslsocket_class._create(
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/ssl.py", line 1040, in _create
self.do_handshake()
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/ssl.py", line 1309, in do_handshake
self._sslobj.do_handshake()
ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate in certificate chain (_ssl.c:1122)
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/Users/bokmanchiu/Library/Mobile Documents/com~apple~CloudDocs/G-python/run.py", line 3, in
with request.urlopen(scr) as response: #連線
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/urllib/request.py", line 214, in urlopen
return opener.open(url, data, timeout)
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/urllib/request.py", line 517, in open
response = self._open(req, data)
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/urllib/request.py", line 534, in _open
result = self._call_chain(self.handle_open, protocol, protocol +
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/urllib/request.py", line 494, in _call_chain
result = func(*args)
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/urllib/request.py", line 1385, in https_open
return self.do_open(http.client.HTTPSConnection, req,
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/urllib/request.py", line 1345, in do_open
raise URLError(err)
urllib.error.URLError:
試著在程式碼的最上方加入以下程式:
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
可以試試"統編"會發現跑不出來喔
因為有隻蟲藏在裡面摟 呵呵
是的,裡面有隻蟲 XDDDD
夷,為什麼我的跑得出來??
這隻蟲子被堪稱史上最兇殘的防偽神奇寶貝沒有之一 趕緊收服牠吧
收服之後把牠有規律的放個幾千隻藏在你的文章里就能知道你的文章會被copy到哪裡去了
@@ud1279 我還是沒有很清楚ㄟ,可以麻煩樓主展示一下蟲子長甚麼樣子嗎?
@@Grapefruit-qs8yo5rg4t 在"統編"這句話當中藏了一隻沒有軀殼的蟲蟲,因為沒有軀殼所以很難形容牠的長相,
總之你去
data.taipei/opendata/datalist/apiAccess?scope=resourceAquire&rid=296acfa2-5d93-4706-ad58-e83cc951863c
找到"統編"把 "統 copy到筆記本,然後按方向鍵的左右,你會發現要多按一下,因為牠就藏在這兩個字之間,趕緊收伏牠吧
為什麼 for 迴圈 會突然有一個company ? 是在哪裡定義的?
就是定義在 for 迴圈的語法,那裡就是定義
彭彭老師您好:
想請教您這個error是為甚麼呢?(我程式碼和您的範例程式碼是相同的)
Traceback (most recent call last):
File "open-data.py", line 15, in
file.write(company["公司名稱"]+"/n")
OSError: [Errno 9] Bad file descriptor
還是要看看你的完整程式碼才能判斷可能的錯誤原因哦 ~
@@cwpeng-course 老師好:
底下是完整的程式碼,想請問是什麼問題
# 網路連線程式、公開資料串接
import urllib.request as request #載入模組
import json
src = "www.ntu.edu.tw/"
# 下載特定網址的資料
with request.urlopen(src) as response:
data = response.read() # 利用json模組處理json資料格式
print(data)
# 串接、擷取公開資料
謝謝
@@陳裕霖-j1s 沒有看到你一開始的那一段 file.write()?
@@cwpeng-course 老師,請問在哪裡呢?影片中並未提及,還請指正
@@陳裕霖-j1s 你分享給我的錯誤訊息包含 file.write(company["公司名稱"]+"/n") 這段程式碼,但你給我的程式碼中沒有看到 ~
受益良多
:)
12:16
請問老師
抓下來的公開資料內有中文為何不用decode就能顯示中文呢
會不會有需要decode的狀況呢
主要是 json.load() 這個方法幫我們順便解碼掉了哦 ~ 如果不是用這個方法,確實有可能會需要明確的寫 decode() 指令 ~
@@cwpeng-course 謝謝老師回復!
老師我照著您的程式打,但是在台灣大學原始碼的取得就出錯了,最後跑出錯誤訊息如下:
urllib.error.URLError:
請問您知道是哪兒出問題嗎?謝謝!
表示 Python 無法解析你提供的網址,可能要看看你打的網址是否有錯誤 ~
File "open-data.py", line 1, in
import urllib.request as request
ImportError: No module named request
请问彭彭老师:这样是哪里出了问题呢?
这可能是版本的问题,你执行的是 Python 2 版本。确定安装新版的 Python 3 之后,Mac 执行时使用:python3 档案名称
@@cwpeng-course Thank you!
想請問老師:第一種照老師寫法ok, 用urllib.request, 第二種用request會報錯,試了很久沒辦法正確抓取
import urllib.request as request
import json
src='data.taipei/opendata/datalist/apiAccess?scope=resourceAquire&rid=e7c98875-48fb-4ce8-835f-2304213b2e19'
with request.urlopen(src) as response:
data=json.load(response)
print(data)
---------------------------------------------------------------------------
import requests
import json
src='data.taipei/opendata/datalist/apiAccess?scope=resourceAquire&rid=e7c98875-48fb-4ce8-835f-2304213b2e19'
response=requests.get(src)
data=json.load(response)
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
in
3 src='data.taipei/opendata/datalist/apiAccess?scope=resourceAquire&rid=e7c98875-48fb-4ce8-835f-2304213b2e19'
4 response=requests.get(src)
----> 5 data=json.load(response)
~\Anaconda3\lib\json\__init__.py in load(fp, cls, object_hook, parse_float, parse_int, parse_constant, object_pairs_hook, **kw)
291 kwarg; otherwise ``JSONDecoder`` is used.
292 """
--> 293 return loads(fp.read(),
294 cls=cls, object_hook=object_hook,
295 parse_float=parse_float, parse_int=parse_int,
AttributeError: 'Response' object has no attribute 'read'
json.load() 能接受的東西是有限制的,你的第二種寫法丟回來的 response 不能被 json.load() 接受,可能要找點別的方式來處理 ~
@@cwpeng-course 謝謝老師回答,所以是json.load在requests這個package的用法不能這樣用嗎?
台北市政府的開放資料平台從107/11/1開始就換成現在的新平台了!!!QAQ
畫面完全不一樣 裡面的內湖廠商名單也只剩下CSV擋了!!! 只能下載下來變成EXCEL
拜託老師教學CSV黨如何連線串接~QQQQQ
感謝 @Winter 的回應 :)
確實好像 JSON 的資料來源不見了,只好再看看什麼時候來錄另外一段範例 @@a
@@Jimmy-qh5qi 感謝!!
只是政府又要疑惑為何突然很多人下載動物園的動物資料XDD
可以在市政府開放資料搜尋畫面中篩選JSON的資料(我用了臺北市食材登錄平台的資料),API網址在下載資料的右邊預覽按鈕(按下去會顯示API網址),然後因為資料內容有一些不太一樣,所以我自己修改了一部分的編碼內容僅供參考
#由於台北市政府網站更新,所以修改了採用的資料與部分寫法
import urllib.request as request
import json
src="data.taipei/api/getDatasetInfo/downloadResource?id=8a569b5b-0cb1-4c7f-a064-780b3301354c&rid=9744ea1c-aafb-471c-8bb8-04f398ad415a"
with request.urlopen(src) as response:
data=json.load(response) #利用json模組處理json資料格式
print(data)
#抓取特定資料
#clist=data["result"]["results"]#指定資料所在的巢狀字典,由於參考資料改變,這一行僅供參考
for market in data:
print(market["夜市名稱"]) #取得夜市名稱的資料
with open("market.txt", "w", encoding="utf-8") as file: #開啟檔案並寫入資料
for market in data:
file.write(market["夜市名稱"]+"
")
@@Jimmy-qh5qi 感謝你 真的可以用XDDD
可能因為對JSON格式不熟,看完有些疙瘩
特別是這一行:
clist=data["result"]["results"]
小弟選擇的檔案是:新竹市AED心臟電擊器設置地點
opendata.hccg.gov.tw/dataset/d55cf39b-bebc-488f-9a86-4f36e2865d3f/resource/111d2c30-a788-41f9-8ebd-0798fa69f261/download/20180328091122254.json
檔案中沒有"result" & "results" 字眼
將程式碼改成
clist=data #["result"]["results"]將後面的result註解掉
雖然能順利執行 但到底這一行程式碼的作用是什麼?
心裡不舒服 希望彭彭老師能出詳解 感謝!~
建議就閱讀一下 JSON 的格式是怎麼回事。
然後比較我們影片中用的資料,和你連結的這個資料,在階層組織上有什麼不同。
在資料處理的領域上,認真的解讀原始資料是重要的工作之一。
import urllib.request as request
import json
src="opendata.hccg.gov.tw/dataset/d55cf39b-bebc-488f-9a86-4f36e2865d3f/resource/111d2c30-a788-41f9-8ebd-0798fa69f261/download/20180328091122254.json"
with request.urlopen(src) as response :
data = json.load(response)
clist=data
with open("data4.txt","w",encoding="utf-8") as file :
for company in clist:
file.write(company["場所名稱"]+"
"+company["AED放置地點"]+"
")
print(company["場所名稱"]+"
"+company["AED放置地點"]+"
")
請問,在一般公開資料的Json格式中並無如: "result":{"limit":1000,"offset":0,"count":5349,"sort":"","results":的寫法,而是直接一連串的{key:value, ...}表單。程式要如何修改以讀取表單?謝謝。
按照資料的不同,去臨機應變。
例如你寫的範例,就直接 data["key"] 就會得到 value 的資料。