看板 Python 關於我們 聯絡資訊
大家好,我是Python自學者,雖然習慣自己上網找答案, 但很多基本觀念可能沒有學到或學好, 所以現下出了一個我不知如何在網路上找答案的問題 我在爬某政府網頁時,發現若網頁中包含某些中文字元,如 https://ctext.org/dictionary.pl?if=gb&char=%E3%95%A1 https://ctext.org/dictionary.pl?if=gb&char=%F0%A4%A5%82 Python就會無法讀取該字元之後的網頁原始碼, 以致在該字元前的元素可正常定位,但該字元後的元素用xpath都定位不到 該網頁有寫charset=big5,所以我試著先把網頁原始碼重新編碼,如: str.decode('bi5').encode('utf8') 但就會出現編碼失敗 而這些奇怪字元在Chrome上可正常顯示,在Edge上會變缺字,這兩個字也無法貼上批踢踢 若用Excel查,第一個字在Excel上用code查是64386,第二個字的code是63(相當於缺字) 想請問這些奇怪的字元是因為原本就不在unicode或big5字元集裡頭嗎? 因為某政府網頁中有這兩個怪字的數量不低,我無法以個案處理, 不知道是否有什麼辦法可以正常處理,感謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 59.115.117.188 ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1548928865.A.0C1.html
eight0: 試試 big5-hkscs? https://is.gd/3FFpLq 01/31 18:4
謝謝,我再試看看 [更新]謝謝,用這個編碼成功了XD
f496328mm: code貼來看看 01/31 19:30
因為這個網頁一開始會有隨機驗證碼,後續還有一些反爬機制, 我暫時還不想在舊課題未完前面對一堆新課題,所以把我需要的網頁先存在本機端, https://1drv.ms/u/s!AuQERVaW1DVCgv4lwTnpEymSIN0ORQ 例如以上這個檔就有怪字(big5編碼,需下載,直接用OneDrive會以unicode開出亂碼) 程式碼如下: from lxml import etree,html with open('147.htm','rb') as f: page = f.read() tree = html.fromstring(page) # 怪字前元素,可定位 建照碼 = tree.xpath('//td[contains(text(),"(105)")]')[0].text # 怪字後元素,無法定位 地號 = tree.xpath('//td[contains(text(),"基地概要")]')[0].text print(+建照碼+' '+地號)
BZnoo: BIG-5尚有著名的許功蓋問題,也值得研究一下 XD 01/31 20:22
謝謝,這個好像有點深,我再慢慢研究XD ※ 編輯: liquidbox (59.115.117.188), 01/31/2019 21:09:58
shala: str不能decode吧。要先encode再decode 01/31 21:05
shala: 網頁是utf-8,應該用utf-8編碼就可以輸出了 01/31 21:07
※ 編輯: liquidbox (59.115.117.188), 01/31/2019 21:14:15
f496328mm: 你存下來就是亂碼了 01/31 23:24
f496328mm: 你乾脆直接給網址,說不定是你存的問題 01/31 23:24
ckc1ark: 兆峯建築師事務所 不過看起來檔案用的也不是big5-hkscs 02/01 17:22
ckc1ark: 這個就是big5-hkscs了 02/01 17:36
ckc1ark: 感覺是你這邊抓的網頁編碼已經出問題 02/01 17:37
我是直接對著連結右鍵另存新檔,把一個個的.htm抓下來, 過程中似乎沒有可以調整編碼的機會,但仔細想想,您說的有道理, 因為我在抓下數百個檔案時確實發現一直遇到編碼問題 絕大部份似乎可以用big5-hkscs解決,但少數無法的就直接用人工了XD ※ 編輯: liquidbox (36.227.169.167), 02/03/2019 10:27:04
ckc1ark: 像你缺的字應該是 兆峯建築師事務所的峯 正確的big5-hksc 02/04 12:59
ckc1ark: s編碼是我貼的這篇才對 你貼的用hkscs解出來不是峯這個字 02/04 12:59