Re: [問題] 一個抓資料的問題
※ 引述《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
→
11/03 13:26, , 1F
11/03 13:26, 1F
討論串 (同標題文章)
Python 近期熱門文章
PTT數位生活區 即時熱門文章