0

こんにちは!私はこのスクリプトを持っています:

URL = "http://www.hitmeister.de/"

page = urllib2.urlopen(URL).read()
soup = BeautifulSoup(page)

links = soup.findAll('a')

for link in links:
    print link['href']

これにより、Web ページからリンクが取得されるはずですが、取得されません。何が問題なのですか? User-Agent ヘッダーも試してみましたが、結果はありませんが、このスクリプトは他の Web ページでも機能します。

4

2 に答える 2

3

BeautifulSoup から非常に素晴らしいエラー メッセージが表示されます。あなたはそれを読み、そのアドバイスに従いましたか?

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

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

トレースバック (最新の呼び出しが最後):

ファイル ""、1 行目、

ファイル " /Library/Python/2.7/site-packages/bs4/ init .py"、172 行目、init self._feed()内

ファイル「 /Library/Python/2.7/site-packages/bs4/init.py」、185 行目、 _feed self.builder.feed(self.markup) 内

ファイル「/Library/Python/2.7/site-packages/bs4/builder/_htmlparser.py」、150 行目、フィードの raise e

HTMLParser.HTMLParseError:不正な形式の開始タグ、57 行目、872 列目

于 2012-05-07T12:02:50.840 に答える
0
import urllib
import lxml.html
import urlparse

def get_dom(url):
    connection = urllib.urlopen(url)
    return lxml.html.fromstring(connection.read())

def get_links(url):
    return resolve_links((link for link in get_dom(url).xpath('//a/@href')))

def guess_root(links):
    for link in links:
        if link.startswith('http'):
            parsed_link = urlparse.urlparse(link)
            scheme = parsed_link.scheme + '://'
            netloc = parsed_link.netloc
            return scheme + netloc

def resolve_links(links):
    root = guess_root(links)
    for link in links:
        if not link.startswith('http'):
            link = urlparse.urljoin(root, link)
        yield link


for link in get_links('http://www.google.com'):
    print link
于 2015-01-21T21:11:24.673 に答える