从python获取网页链接

时间:2012-05-07 11:52:43

标签: python web-crawler web-scraping

您好!我有这个脚本:

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标题,没有结果,但是这个脚本适用于其他网页。

2 个答案:

答案 0 :(得分: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和该解析器。请参阅{{ 3}}求助。“))

     

追踪(最近一次呼叫最后一次):

     

文件“”,第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行,在Feed中       提高e

     

HTMLParser.HTMLParseError:格式错误的开始标记,位于第57行第872行

答案 1 :(得分: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