使用Python检索类似Facebook的链接摘要(标题、摘要、相关图像)

7
我希望能够复制Facebook用于解析链接的功能。当您将链接提交到Facebook状态中时,他们的系统会从该页面检索建议的标题、摘要和通常一个或多个相关图像,您可以从中选择缩略图。
我的应用程序需要使用Python实现此功能,但我愿意接受任何指南、博客文章或其他开发人员的经验,这些经验与此相关,可能会帮助我找出如何完成它的方法。
在跳入之前,我真的很想从别人的经验中学习。
明确一下,当给定网页的URL时,我想能够检索到以下内容:
1. 标题:可能只是标签,但也可能是<h1>,不确定。 2. 一页的一段摘要。 3. 一堆相关的图像,可用作缩略图。(棘手的部分是过滤掉像横幅或圆角之类的无关图像)</br><div class="h-2"></div>我可能必须自己实现它,但至少我想知道其他人如何完成这些任务。
2个回答

3

BeautifulSoup非常适合完成大部分操作。

基本上,您只需初始化soup对象,然后执行以下操作来提取您感兴趣的内容:

title = soup.findAll('title')
images = soup.findAll('img')

您可以使用urllib2根据它们的url下载每个图像。标题相对简单,但图像可能会更加困难,因为您必须下载每个图像才能获取有关它们的相关统计信息。也许您可以基于大小和颜色数量过滤掉大部分图像?例如,圆角通常很小,只有1-2种颜色。至于页面摘要,那可能会更加困难,但我一直在做类似这样的事情:1.我使用BeautifulSoup通过使用.findAll然后.extract来删除html中的所有样式、脚本、表单和头块。2.我使用.join(soup.findAll(text = True))获取剩余文本。在您的应用程序中,也许您可以将此“文本”内容用作页面摘要?希望这可以帮到您。

3
BeautifulSoup在Python 3.1上的支持不够好,而且其原始作者已经很少进行开发。建议使用lxml.html和/或html5lib(后者被BeautifulSoup作者推荐)。 - user355252
以后参考很有用。谢谢! - Donald Miner

1

这里有一个完整的解决方案:https://github.com/svven/summary

>>> import summary
>>> s = summary.Summary('http://stackoverflow.com/users/76701/ram-rachum')
>>> s.extract()
>>> s.title
u'User Ram Rachum - Stack Overflow'
>>> s.description
u'Israeli Python hacker.'
>>> s.image
https://www.gravatar.com/avatar/d24c45635a5171615a7cdb936f36daad?s=128&d=identic
on&r=PG
>>>

很遗憾,这个项目不支持Python 3。 - illagrenan

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