跳转到主要内容

从任何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文件夹。

image

![news.html预览](https://dl.dropboxusercontent.com/u/134594/Svven/news.png)

这是当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

需求

基础必需的包是extractionrequests,但没有adblockparserPillow则作用不大

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实例是否具有正确的大小。

    根据定义的限制,可能引发以下异常:TinyImageExceptionHugeImageExceptionRatioImageException。如果发生任何这些情况,则返回None

  • MonoImageFilter

    检查图像是否为纯白色并返回None

    此过滤器检索整个图像文件,因此在进行正则表达式检查之前有一个额外的检查。例如:排除以下URL

  • FormatImageFilter

    暂时排除动画GIF图像。这可以根据文件内容扩展以排除其他图像格式。

目前就这么多。非常欢迎您贡献。

欢迎评论和建议。干杯,@ducu

项目详情


下载文件

下载适合您平台的文件。如果您不确定要选择哪个,请了解更多关于安装包的信息。

源分布

summary-extraction-0.2.tar.gz (16.4 kB 查看哈希)

由以下支持