如何从Beautiful Soup中获取URL?

3

我是Python的新手,尝试编写一个网络爬虫程序,想要使用Beautiful Soup从BBC新闻网站上获取一些数据。

但是当我用Firebug检查元素时,发现该页面中的HTML没有URL链接。

<li class="">
<a class="navigation-wide-list__link navigation-arrow--open" data-panel-id="js-navigation-panel-World" href="/news/world">
    <span>World</span>
</a>

href='/news/world'中,并不能显示真正的URL链接。如果我想要从这个网页中爬取所有链接怎么办?这是因为该网站使用了Javascript吗?
2个回答

5

如果你需要根据当前/基本URL和从href值中获取的相对路径来生成一个绝对URL,一种推荐的方法是使用urlparse.urljoin()函数:

from urlparse import urljoin  # on Python 3: from urllib.parse import urljoin

absolute_url = urljoin(url, href)

感谢您提供正确/推荐的答案。学到了新知识。一旦我回到桌面电脑,就会删除我的答案。+1 :) - JRodDynamite
@JRodDynamite 谢谢,我认为你应该保留答案,因为它也解决了问题。 - alecxe

1

回答你的最后一个小问题:

href 的取值为 /news/world 并不奇怪。这是一个相对引用,它在 URI 语法 RFC 的某个地方被指定。Javascript 不需要处理它们,自古以来浏览器就支持它们,用于链接到与当前文档或主机相关的文档。


1
只是为了明确:@alecxe的答案是实现OP想要完成的内容,而我的意图是通过回答帖子中的相关问题来补充他的答案。据我所知,一旦他的答案被接受,它们可以合并成一个。 - millimoose

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接