用Python获取Facebook风格的链接摘要(标题、摘要、相关图片)

7 投票
2 回答
1258 浏览
提问于 2025-04-16 01:37

我想实现一个功能,跟Facebook解析链接的方式差不多。当你在Facebook状态中提交一个链接时,他们的系统会去获取这个链接页面的推荐 标题摘要,通常还会有一张或多张相关的 图片,你可以从中选择一个缩略图。

我的应用程序需要用Python来完成这个功能,但我也愿意参考任何相关的指南、博客文章或者其他开发者的经验,这些都可能帮助我搞明白怎么实现这个功能。

我真的很想在直接动手之前,先学习一下其他人的经验。

为了更清楚,当我给出一个网页的URL时,我想要获取:

  1. 标题:可能就是 <title> 标签,也可能是 <h1>,不太确定。
  2. 页面的一段摘要。
  3. 一堆可以用作缩略图的相关图片。(比较棘手的部分是要过滤掉一些不相关的图片,比如横幅广告或者圆角图片)

我可能需要自己实现这个功能,但至少我想了解一下其他人是怎么做这些事情的。

2 个回答

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
>>>
3

BeautifulSoup 非常适合完成大部分这类工作。

基本上,你只需要初始化一个 soup 对象,然后像下面这样做,就能提取你感兴趣的内容:

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

接着,你可以通过 urllib2 根据每个图片的 url 下载它们。

标题比较简单,但图片可能会有点麻烦,因为你需要下载每一张才能获取相关的信息。也许你可以根据图片的大小和颜色数量来筛选大部分图片?比如,圆角的图片通常比较小,而且一般只有1-2种颜色。

至于页面摘要,这可能会稍微复杂一些,但我一直在做类似的事情:

  1. 我使用 BeautifulSoup 来移除 html 中的所有样式、脚本、表单和头部块,方法是使用 .findAll 然后 .extract
  2. 我用 .join(soup.findAll(text = True)) 来获取剩下的文本。

在你的应用中,也许你可以把这个 "text" 内容作为页面摘要呢?

希望这对你有帮助。

撰写回答