iT邦幫忙

1

關於Python執行結果自動輸出 txt檔失敗問題

各位前輩大家好,小弟最近在學python爬蟲,然後遇到問題如下,我現在可以抓到所爬的網站資料原始碼,不過想要將把抓到的原始碼自動寫入txt檔存檔。

執行Python後發生問題:
Traceback (most recent call last):
File "tomy-request.py", line 32, in
file.write(root.html)
TypeError: write() argument must be str, not Tag

再請前輩們指教,謝謝!!

#抓取網站 原始碼
import urllib.request as req
url="https://www.cac.edu.tw/apply107/system/107ColQry_forapply_4hgd9/html/107_002012.htm"
#建立一個Request物件,附加Request Headers的資訊
request=req.Request(url,headers={
"User-Agent":"Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Mobile Safari/537.36"
})

with req.urlopen(request) as response:
data=response.read().decode("utf-8") #讀出資料

#解析原始碼
import bs4
root=bs4.BeautifulSoup(data,"html.parser")
print (root.html) #印出html內的原始碼

with open("html1.txt","w",encoding="utf-8") as file:
file.write(root.html)

ccutmis iT邦高手 8 級 ‧ 2019-06-03 16:20:38 檢舉
其實不需要用到海龜湯...
下列範例能做到同樣的事,這邊提供您參考:
from requests import get as webGet
url='https://www.cac.edu.tw/apply107/system/107ColQry_forapply_4hgd9/html/107_002012.htm'
r=webGet(url)
r.encoding='utf-8'
with open("html1.txt","w",encoding="utf-8") as file:
 file.write(r.text)
因為我看影片自學,所以照老師方式學習,感謝前輩提供方法。
0
詠竣
iT邦新手 5 級 ‧ 2019-06-03 16:08:03
最佳解答

TypeError: write() argument must be str, not Tag

轉換成str()格式即可:

with open("html1.txt","w",encoding="utf-8") as file:
    file.write(str(root.html))
2
浩瀚星空
iT邦大師 1 級 ‧ 2019-06-03 16:02:09

其實我剛看了一下。它的錯誤訊息是告訴你不是str(也就是文字格式)

所以我在想說,你的root.html會不會它是一個物件?
或許需要轉換一下成文字類型才行??

我用print(root.html)會呈現出此網站html的原始碼,我想它應該不是物件。因為藉由BeautifulSoup分析網頁,所以變成是bs4的格式非字串才導致不能直接寫入txt檔。
謝謝前輩問題已解決!!

1
froce
iT邦大師 3 級 ‧ 2019-06-03 16:04:19

太久沒用BS4了

file.write(root.prettify())

請學著看debug
TypeError: write() argument must be str, not Tag
這句其實已經告訴你一切

我有事先爬文找問題,原來只要加上一句str就可以解決問題,謝謝前輩!!

我要發表回答

立即登入回答