作者KSJ (阿真)
看板Python
标题Re: [问题] 一个抓资料的问题
时间Thu Nov 3 12:03:14 2011
※ 引述《poopoo888888 (阿川)》之铭言:
: : cmd是指黑底的吗?? 黑底的应该比较容易正常说 虽然都转成unicode就没事了
: : 我测试直接urllib2抓网页 有下面的结果
: : http://dl.dropbox.com/u/24628527/TEST.PNG
: : 用unicode来看都还蛮正常的 ( 用str不正常就不提了... windows oooos)
: : 然後我也用了re (想学一直没空 我抄你的程式码) 有以下的结果
: : http://dl.dropbox.com/u/24628527/test2.PNG
: : 当然在黑底的cmd也是没问题
: : 上面是在 windows xp
: : python 2.5.4 测试的
: : 蛮好奇你怎麽抓不出来@_@a
: 谢谢各位大大的帮忙!
: 我学KSJ大直接用re去处理fetch到的网页原始码
: 甚至不需要decode就可以正确显示那些中文字
: response = urllib.urlopen(url)
: page = response.read()
我有试着把page直接开档案写入txt看看
结果是正确的字
代表idle的"print"在显示上出了点问题 不过cmd的没有
: number = re.findall(u"frmlist.no.value='(.+)';frmlist.foreigner.value",
: page)
这边用u似乎很怪 里面没有ascii之外的字
在str里找unicode的字还蛮特别的
不过找得到也ok
在这里print number时又是正常的了
最底下会稍稍讨论一下我的想法
: for n in number:
: print n
: (其实这边我满疑惑的 我没做decode 表示收到的是网页原始的big5编码资料
: 在windows XP用cp950编码的cmd模式下为什麽可以正确显示?)
: 至於我用BeautifulSoup先parse再做re而遇到的问题 则出在这里:
: page = response.read()
: u_page = page.decode('big5')
: tags = BeautifulSoup(u_page).findAll('a')
: 这样decode时会出错
: 改成u_page = page.decode('big5', 'ignore')就可以了
: 但我却有了新的疑问
: 为什麽要加上'ignore'参数?
: 是叫它忽略掉看不懂的byte吗
没错
: 又为什麽会有看不懂的byte呢 是因为big5看不懂某些中文字吗?
这个问题...decode的时候不是会报错吗?
Traceback (most recent call last):
File "C:\Users\ksj\Desktop\tt.py", line 16, in <module>
content.decode("cp950"))
UnicodeDecodeError: 'cp950' codec can't decode bytes in position
141699-141700: illegal multibyte sequence
找找位置 你会发现 这个字是 "铟" 是个简体字
为什麽有简体字 为什麽网页上的big5可以正常显示...这个我不知道...orz
我认为是这些big5(pyton里的)编不出来的字
造成idle print显示上的错误 (但值是对的)
而用re找的时候 似乎没有编不编码的问题 直接str下去对
自然不会有这个错误
也许beautifulsoup自动忽略编码错误也说不定 我没用过@_@
有错请指正 感恩~
: 不好意思 新手上路 问题有点多
: 谢谢大家
: P.S.
: KSJ大 我找到一份不错的学re资源跟您分享
: http://www.diveintopython.net/regular_expressions/index.html
谢谢你的分享~
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.112.63.202
1F:→ poopoo888888:获益良多!! 太感谢了!! 11/03 13:26