2011-06-27 28 views
1

當我使用urllib2打開器讀取python中的一些(但不是全部)HTML文件時,在某些文件中,我得到的文本中充滿了大量反斜槓和unicode 003c字符串。我將這段文本發送到BeautifulSoup,並且無法通過findAll()查找我正在尋找的內容,現在我認爲這是由於所有這些unicode字符串造成的。如何翻譯/轉換unicode轉義< and >在閱讀HTML文檔?

這是怎麼回事,我該如何擺脫它?

類似soup.prettify()的方法沒有效果。

下面是一些示例代碼(這是來自Facebook的個人資料)

\\u003cdiv class=\\"pas status fcg\\">Loading...\\u003c\\/div> 
\\u003c\\/div>\\u003cdiv class=\\"uiTypeaheadView fbChatBuddyListTypeaheadView dark hidden_elem\\" id=\\"u971289_14\\">\\u003c\\/div> 
\\u003c\\/div>\\u003c\\/div>\\u003cdiv class=\\"fbNubFlyoutFooter\\"> 
\\u003cdiv class=\\"uiTypeahead uiClearableTypeahead fbChatTypeahead\\" id=\\"u971289_15\\"> 
\\u003cdiv class=\\"wrap\\">\\u003clabel class=\\"clear uiCloseButton\\" for=\\"u971291_21\\"> 

此相同的HTML網頁的外觀罰款和正常的「查看源文件」窗口。

編輯:這是產生該文本的代碼。奇怪的是,我沒有從其他HTML頁面獲得這種輸出。請注意,我用USERNAME和PASSWORD替換了用戶名和密碼。如果您替換這兩個,您可以在您自己的FB配置文件中嘗試此操作。

fbusername = "[email protected]" 
fbpassword = "PASSWORD" 
cookiefile = "facebook.cookies" 

cj = cookielib.MozillaCookieJar(cookiefile) 
if os.access(cookiefile, os.F_OK): 
    cf.load() 

opener = urllib2.build_opener(
    urllib2.HTTPRedirectHandler(), 
    urllib2.HTTPHandler(debuglevel=0), 
    urllib2.HTTPSHandler(debuglevel=0), 
    urllib2.HTTPCookieProcessor(cj) 
) 

opener.addheaders = [('User-agent','Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_7; en-us) AppleWebKit/533.21.1 (KHTML, like Gecko) Version/5.0.5 Safari/533.21.1'),('Referer','http://www.facebook.com/')] 

def facebooklogin(): 
    logindata = urllib.urlencode({ 
     'email' : fbusername, 
     'pass' : fbpassword, 
    }) 

    response = opener.open("https://login.facebook.com/login.php",logindata) 
    return ''.join(response.readlines()) 


print "Logging in to Facebook...\n" 
facebooklogin() 
facebooklogin() 
print "Successful.\n" 

fetchURL = 'http://www.facebook.com/USERNAME?ref=profile&v=info' 

f = opener.open(fetchURL) 
fba = f.read() 
f.close() 
soup = BeautifulSoup(fba) 
print soup 
+1

發佈生成此文本的代碼。 –

+0

嘗試: 'unicodeTextFromUrlLib.encode( 「ASCII」, 「忽略」)' 什麼,我想說的是: '>>> S = U 「\ u003c」 >>>小號 U '<' >>> s.encode( 「ASCII」, 「忽略」) '<' ' –

回答

5

u"""結構就是Python 2.您爲Python 3

>>> a=u"""\\u003cdiv class=\\"pas status fcg\\">Loading...\\u003c\\/div> 
... \\u003c\\/div>\\u003cdiv class=\\"uiTypeaheadView fbChatBuddyListTypeaheadView dark hidden_elem\\" id=\\"u971289_14\\">\\u003c\\/div> 
... \\u003c\\/div>\\u003c\\/div>\\u003cdiv class=\\"fbNubFlyoutFooter\\"> 
... \\u003cdiv class=\\"uiTypeahead uiClearableTypeahead fbChatTypeahead\\" id=\\"u971289_15\\"> 
... \\u003cdiv class=\\"wrap\\">\\u003clabel class=\\"clear uiCloseButton\\" for=\\"u971291_21\\"> 
... """ 
>>> print(a.decode('unicode_escape')).replace('\\/', '/') 
<div class="pas status fcg">Loading...<\/div> 
<\/div><div class="uiTypeaheadView fbChatBuddyListTypeaheadView dark hidden_elem" id="u971289_14"><\/div> 
<\/div><\/div><div class="fbNubFlyoutFooter"> 
<div class="uiTypeahead uiClearableTypeahead fbChatTypeahead" id="u971289_15"> 
<div class="wrap"><label class="clear uiCloseButton" for="u971291_21"> 

我希望這有助於忽略u。如果不是,請改善您在問題中提供的信息。

編輯:現在建議的答案更改\//也。

+0

這仍然葉'<\/div>末標籤'。 –

+0

謝謝,這工作。儘管如此,仍然不確定爲什麼它會以這種方式出現,儘管(請參閱我對原始問題的編輯)。無論如何,解決這個問題似乎並沒有解決我的BeautifulSoup問題。如果我無法弄清楚,我會發佈一個新問題。 – mix