用Python获取Facebook风格的链接摘要(标题、摘要、相关图片)
我想实现一个功能,跟Facebook解析链接的方式差不多。当你在Facebook状态中提交一个链接时,他们的系统会去获取这个链接页面的推荐 标题
、摘要
,通常还会有一张或多张相关的 图片
,你可以从中选择一个缩略图。
我的应用程序需要用Python来完成这个功能,但我也愿意参考任何相关的指南、博客文章或者其他开发者的经验,这些都可能帮助我搞明白怎么实现这个功能。
我真的很想在直接动手之前,先学习一下其他人的经验。
为了更清楚,当我给出一个网页的URL时,我想要获取:
- 标题:可能就是
<title>
标签,也可能是<h1>
,不太确定。 - 页面的一段摘要。
- 一堆可以用作缩略图的相关图片。(比较棘手的部分是要过滤掉一些不相关的图片,比如横幅广告或者圆角图片)
我可能需要自己实现这个功能,但至少我想了解一下其他人是怎么做这些事情的。
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种颜色。
至于页面摘要,这可能会稍微复杂一些,但我一直在做类似的事情:
- 我使用 BeautifulSoup 来移除
html
中的所有样式、脚本、表单和头部块,方法是使用.findAll
然后.extract
。 - 我用
.join(soup.findAll(text = True))
来获取剩下的文本。
在你的应用中,也许你可以把这个 "text"
内容作为页面摘要呢?
希望这对你有帮助。