Re: [問題] 一個抓資料的問題

看板Python作者 (阿真)時間14年前 (2011/11/03 12:03), 編輯推噓0(001)
留言1則, 1人參與, 最新討論串4/4 (看更多)
※ 引述《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
文章代碼(AID): #1EiXA60x (Python)
文章代碼(AID): #1EiXA60x (Python)