2011-06-27 10 views
1

私はいくつかのファイルでurllib2オープナーを使ってPythonでHTMLファイルの一部を読むと(しかし、すべてではありません)、たくさんのバックスラッシュとUnicode 003c文字列が埋め込まれています。私はこのテキストをBeautifulSoupに送りますが、findAll()で探しているものを見つけるのが難しくなりました。私は現在、これらのすべてのUnicode文字列が原因だと考えています。ユニコードを変換/変換する方法は、読んだHTML文書で< and >をエスケープしましたか?

これで何が起こっているのですか。どのように取り除きますか?

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ページには、[ソース]ウィンドウで、微細で通常に見えるのです。

EDIT:このテキストを生成するコードは次のとおりです。奇妙なのは、他のHTMLページからこの種の出力を得られないということです。ここでは、ユーザー名とパスワードをUSERNAMEとPASSWORDに変更しました。これらの2つを置き換えると、自分の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" >>> sの は、U '<' >>> s.encode( "ASCII"、 "無視") '<' ' –

答えて

5

u"""コンストラクトは、あなたが私はこれが役に立てば幸い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を省略Pythonの2のためです。そうでない場合は、質問に記載された情報を改善してください。

EDIT:提案された回答が変更されました\//も変更されました。

+0

これはまだ' '<\/div>と終了タグを残します。 –

+0

ありがとう、それは動作します。それは最初の場所でそのように出てくる理由はまだ分かっていません(元の質問に私の編集を参照してください)。この問題を修正しても、私のBeautifulSoup probは修正されているようには見えません。もし私がそれを理解できなければ、新しい質問を投稿します。 – mix

関連する問題