作者liquidbox (树枝摆摆)
看板Python
标题[问题] 网页中部份中文字元影响爬虫
时间Thu Jan 31 18:01:02 2019
大家好,我是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://webptt.com/cn.aspx?n=bbs/Python/M.1548928865.A.0C1.html
谢谢,我再试看看
[更新]谢谢,用这个编码成功了XD
2F:推 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(+建照码+' '+地号)
3F:推 BZnoo: BIG-5尚有着名的许功盖问题,也值得研究一下 XD 01/31 20:22
谢谢,这个好像有点深,我再慢慢研究XD
※ 编辑: liquidbox (59.115.117.188), 01/31/2019 21:09:58
4F:推 shala: str不能decode吧。要先encode再decode 01/31 21:05
5F:推 shala: 网页是utf-8,应该用utf-8编码就可以输出了 01/31 21:07
※ 编辑: liquidbox (59.115.117.188), 01/31/2019 21:14:15
6F:→ f496328mm: 你存下来就是乱码了 01/31 23:24
7F:→ f496328mm: 你乾脆直接给网址,说不定是你存的问题 01/31 23:24
8F:推 ckc1ark: 兆峯建筑师事务所 不过看起来档案用的也不是big5-hkscs 02/01 17:22
10F:→ ckc1ark: 这个就是big5-hkscs了 02/01 17:36
11F:→ ckc1ark: 感觉是你这边抓的网页编码已经出问题 02/01 17:37
我是直接对着连结右键另存新档,把一个个的.htm抓下来,
过程中似乎没有可以调整编码的机会,但仔细想想,您说的有道理,
因为我在抓下数百个档案时确实发现一直遇到编码问题
绝大部份似乎可以用big5-hkscs解决,但少数无法的就直接用人工了XD
※ 编辑: liquidbox (36.227.169.167), 02/03/2019 10:27:04
12F:推 ckc1ark: 像你缺的字应该是 兆峯建筑师事务所的峯 正确的big5-hksc 02/04 12:59
13F:→ ckc1ark: s编码是我贴的这篇才对 你贴的用hkscs解出来不是峯这个字 02/04 12:59