从任何URL中提取标题、图片和描述。
项目描述
当前版本:v0.2 - 有关详细信息,请参阅CHANGES.txt。
简单用法
与summary包一起使用
>>> import summary >>> s = summary.Summary('https://github.com/svven/summary') >>> s.extract() >>> s.title u'svven/summary' >>> s.image https://avatars0.githubusercontent.com/u/7524085?s=400 >>> s.description u'summary - Summary is a complete solution to extract the title, image and description from any URL.'
HTML渲染的批量使用
如果您分叉或克隆了仓库,可以使用summarize.py如下所示
>>> import summary >>> summary.GET_ALL_DATA = True # default is False >>> urls = [ 'http://www.wired.com/', 'http://www.nytimes.com/', 'http://www.technologyreview.com/lists/technologies/2014/' ] >>> from summarize import summarize, render >>> summaries, result, speed = summarize(urls) -> http://www.wired.com/ [BadImage] RatioImageException(398, 82): http://www.wired.com/wp-content/vendor/condenast/pangea/themes/wired/assets/images/wired_logo.gif -> http://www.nytimes.com/ [BadImage] AdblockURLFilter: http://graphics8.nytimes.com/adx/images/ADS/37/33/ad.373366/bar1-3panel-nyt.png [BadImage] AdblockURLFilter: http://graphics8.nytimes.com/adx/images/ADS/37/33/ad.373366/bar1-3panel-nytcom.png [BadImage] AdblockURLFilter: http://graphics8.nytimes.com/adx/images/ADS/37/33/ad.373366/bar1-4panel-opinion.png [BadImage] AdblockURLFilter: http://graphics8.nytimes.com/adx/images/ADS/37/51/ad.375173/CRS-1572_nytpinion_EARS_L_184x90_CP2.gif [BadImage] AdblockURLFilter: http://graphics8.nytimes.com/adx/images/ADS/37/51/ad.375174/CRS-1572_nytpinion_EARS_R_184x90_ER1.gif [BadImage] RatioImageException(379, 64): http://i1.nyt.com/images/misc/nytlogo379x64.gif [BadImage] TinyImageException(16, 16): http://graphics8.nytimes.com/images/article/functions/facebook.gif [BadImage] TinyImageException(16, 16): http://graphics8.nytimes.com/images/article/functions/twitter.gif-> http://www.technologyreview.com/lists/technologies/2014/ Success: 3. >>> html = render(template="news.html", summaries=summaries, result=result, speed=speed) >>> with open('demo.html', 'w') as file: ... file.write(html) >>>
简而言之
Summary会从URL请求页面,然后使用extraction来解析HTML。
值得注意的是,它首先下载head标签,执行特定的提取技术,如果提取的数据不完整,则会进一步到body。除非summary.GET_ALL_DATA = True。
结果列表中的标题、图片和描述将实时过滤,以排除不需要的项目,如广告、小图片(跟踪图片或分享按钮)和平面白色图片。以下是完整的过滤器列表。
感谢Will Larson (@lethain) 将他的extraction库适配到0.2版本,以适应summary。
渲染
HTML渲染机制的目的是仅用于可视化提取的数据。包含的Jinja2模板(news.html)建立在bootstrap之上,并以响应式网格布局显示摘要。
您可以完全忽略渲染机制,仅导入summary模块进行数据提取和过滤。您可能有自己的渲染数据的方法,因此您只需要summary文件夹。

这是当summary.GET_ALL_DATA = True时的输出。
单击摘要标题、图片和描述会在多个提取值之间循环。
<https://dl.dropboxusercontent.com/u/134594/svven/news.html>
这一个是使用summary.GET_ALL_DATA = False生成的,速度更快(见页脚)。它仅包含每种类型的第一项有效项 - 标题、图片和描述。这是默认行为。
<https://dl.dropboxusercontent.com/u/134594/svven/fast.html>
安装
为简单使用请使用Pip
$ pip install summary-extraction
或者克隆仓库以进行渲染
$ virtualenv env $ source env/bin/activate $ git clone https://github.com/svven/summary.git $ pip install -r summary/requirements.txt $ cd summary $ python # see the usage instructions above
需求
基础必需的包是extraction和requests,但没有adblockparser和Pillow则作用不大
Jinja2==2.7.2 # only for rendering Pillow==2.4.0 adblockparser==0.2 extraction==0.2 lxml==3.3.5 re2==0.2.20 # good for adblockparser requests==2.2.1 w3lib==1.6
过滤器
过滤器是执行特定数据检查的可调用类。
目前只有图像过滤器。图像URL作为输入参数传递给第一个过滤器。如果URL有效,则进行检查并返回URL,然后传递给第二个过滤器,依此类推。如果检查失败,则返回None。
这种模式使得可以像这样编写过滤程序
def _filter_image(self, url): "The param is the image URL, which is returned if it passes *all* the filters." return reduce(lambda f, g: f and g(f), [ filters.AdblockURLFilter()(url), filters.NoImageFilter(), filters.SizeImageFilter(), filters.MonoImageFilter(), filters.FormatImageFilter(), ]) images = filter(None, map(self._filter_image, image_urls))
AdblockURLFilter
使用adblockparser,如果应该阻止URL,则返回None。
向Mikhail Korobov (@kmike) 致敬,他为这个优秀的项目做出了贡献。这对这个组合仓库有很大的价值。
NoImageFilter
检索实际图像文件,如果失败则返回None。
否则,它返回一个包含URL、实际图像的大小和格式的filters.Image类的实例。基本上,它填充了这个实例,该实例被传递给后续的过滤器。重写Image.__repr__仅返回URL,因此我们可以编写上面看到的漂亮的过滤程序。
再次强调,它只获取图像文件的前几个块,直到PIL解析器获取图像的大小和格式。
SizeImageFilter
检查filters.Image实例是否具有正确的大小。
根据定义的限制,可能引发以下异常:TinyImageException、HugeImageException或RatioImageException。如果发生任何这些情况,则返回None。
MonoImageFilter
检查图像是否为纯白色并返回None。
此过滤器检索整个图像文件,因此在进行正则表达式检查之前有一个额外的检查。例如:排除以下URL
FormatImageFilter
暂时排除动画GIF图像。这可以根据文件内容扩展以排除其他图像格式。
目前就这么多。非常欢迎您贡献。
欢迎评论和建议。干杯,@ducu
项目详情
summary-extraction-0.2.tar.gz的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 1fd0c6f74a24e4dbb59818688ef773ad6531ffd27230f136737e35ca618a621a |
|
MD5 | 4270de39cd97426ce942048d71966752 |
|
BLAKE2b-256 | 83412ae0801ed23f4c4c3376a02b4a4e900abb6d7604610588b9b2a49f851ac1 |