4

あるWebサイトからHTMLを取得し、それをBeautifulSoupに送信して解析したいと思います。問題は、urllib2.urlopen()によって返されるHTMLに改行(\ n)とタブ(\ t)が含まれているだけでなく、一重引用符やその他の文字がエスケープされていることです。このHTMLを使用してBeautifulSoupオブジェクトを作成しようとすると、エラーが発生します。

b = BeautifulSoup(src)

このエラーが発生します。

私のコード:

def get_page_source(url):
    """
    Retrieves the HTML source code for url.
    """
    try:
        return urllib2.urlopen(url)
    except:
        return ""


def retrieve_links(url):
    """
    Use the BeautifulSoup module to efficiently grab all links from the source
    code retrieved by get_page_source.
    """
    src = get_page_source(url)   
    b = BeautifulSoup(src)

    .
    .
    .

どうすればこの問題を解決できますか?

編集

import urllib2

link = "http://www.techcrunch.com/"
src = urllib2.urlopen(link).read()

f = open('out.txt', 'w')
f.write(src)
f.close()

この出力を与えます。

4

1 に答える 1

2

問題は、解析している HTML に JavaScript コードが埋め込まれており (BeautifulSoup エラーは、埋め込まれた JavaScript の途中にある 130 行目について不平を言っています)、JavaScript に HTML が埋め込まれていることです。

130 行目、次の<a>タグに注意してください。

adNode += "<a href='http://t.aol.com?ncid=...

これは HTML と JavaScript のマトリョーシカ人形であり、Python の組み込みパーサーでは処理できません。

あなたが投稿したエラーメッセージでBeatifulSoup自体によって与えられたパーサーをインストールするための指示に従うことができます:

Python の組み込み HTMLParser は、指定されたドキュメントを解析できません。これは Beautiful Soup のバグではありません。最善の解決策は、外部パーサー (lxml または html5lib) をインストールし、そのパーサーで Beautiful Soup を使用することです。ヘルプについては、 http://www.crummy.com/software/BeautifulSoup/bs4/doc/#installing-a-parserを参照してください。

于 2012-05-18T05:46:06.170 に答える