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