[問題] 網頁中部份中文字元影響爬蟲

看板Python作者 (樹枝擺擺)時間6年前 (2019/01/31 18:01), 6年前編輯推噓8(805)
留言13則, 5人參與, 6年前最新討論串1/1
大家好,我是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

01/31 18:4, , 1F
試試 big5-hkscs? https://is.gd/3FFpLq
01/31 18:4, 1F
謝謝,我再試看看 [更新]謝謝,用這個編碼成功了XD

01/31 19:30, 6年前 , 2F
code貼來看看
01/31 19:30, 2F
因為這個網頁一開始會有隨機驗證碼,後續還有一些反爬機制, 我暫時還不想在舊課題未完前面對一堆新課題,所以把我需要的網頁先存在本機端, 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(+建照碼+' '+地號)

01/31 20:22, 6年前 , 3F
BIG-5尚有著名的許功蓋問題,也值得研究一下 XD
01/31 20:22, 3F
謝謝,這個好像有點深,我再慢慢研究XD ※ 編輯: liquidbox (59.115.117.188), 01/31/2019 21:09:58

01/31 21:05, 6年前 , 4F
str不能decode吧。要先encode再decode
01/31 21:05, 4F

01/31 21:07, 6年前 , 5F
網頁是utf-8,應該用utf-8編碼就可以輸出了
01/31 21:07, 5F
※ 編輯: liquidbox (59.115.117.188), 01/31/2019 21:14:15

01/31 23:24, 6年前 , 6F
你存下來就是亂碼了
01/31 23:24, 6F

01/31 23:24, 6年前 , 7F
你乾脆直接給網址,說不定是你存的問題
01/31 23:24, 7F

02/01 17:22, 6年前 , 8F
兆峯建築師事務所 不過看起來檔案用的也不是big5-hkscs
02/01 17:22, 8F

02/01 17:36, 6年前 , 9F

02/01 17:36, 6年前 , 10F
這個就是big5-hkscs了
02/01 17:36, 10F

02/01 17:37, 6年前 , 11F
感覺是你這邊抓的網頁編碼已經出問題
02/01 17:37, 11F
我是直接對著連結右鍵另存新檔,把一個個的.htm抓下來, 過程中似乎沒有可以調整編碼的機會,但仔細想想,您說的有道理, 因為我在抓下數百個檔案時確實發現一直遇到編碼問題 絕大部份似乎可以用big5-hkscs解決,但少數無法的就直接用人工了XD ※ 編輯: liquidbox (36.227.169.167), 02/03/2019 10:27:04

02/04 12:59, 6年前 , 12F
像你缺的字應該是 兆峯建築師事務所的峯 正確的big5-hksc
02/04 12:59, 12F

02/04 12:59, 6年前 , 13F
s編碼是我貼的這篇才對 你貼的用hkscs解出來不是峯這個字
02/04 12:59, 13F
文章代碼(AID): #1SKiTX31 (Python)
文章代碼(AID): #1SKiTX31 (Python)