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']

这应该从网页中获取链接,但它没有,可能是什么问题?我也尝试过使用 User-Agent 标头,但没有结果,但此脚本适用于其他网页。

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 ()

_feed self.builder.feed( self.markup ) 中的文件“/Library/Python/2.7/site-packages/bs4/init .py”,第 185 行

文件“/Library/Python/2.7/site-packages/bs4/builder/_htmlparser.py”,第 150 行,在提要中

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 回答