跳转到主要内容

使用Django和CasperJS捕获网页

项目描述

django-screamshot

Build Status Latest PyPI version Number of PyPI downloads Number of Git Hub downloads Format License

django-screamshot 是一个使用 CasperJS (aaAAaah!, phantomjs:))) 的网页抓取的 非常简单 实现。

(有关待完成工作的更多详细信息,请参阅问题页面。)

检查 screamshotter,一个由 django-screamshot 驱动的最简单的 Django 项目。

安装

首先确保您已经在您的 PATH 中安装了 casperjsphantomjs 命令,使用相关的安装说明

然后安装 egg

pip install django-screamshot

用法

  • screamshot 添加到您的 INSTALLED_APPS

作为截图 Web API

将其添加到您的项目 URL 中

urlpatterns = patterns('',
    ...
    url(r'^capture/$',  include('screamshot.urls', namespace='screamshot', app_name='screamshot')),
)

您可以使用以下 GET 参数获取截图

url

要捕获的网站 URL。这可以是完全限定的 URL,也可以是您 Django 项目中要反转的 URL 名称。注意:不要忘记对 url 进行编码。

selector

CSS3 选择器。它将截图限制在所选元素内。

method

要使用的 HTTP 方法(默认:GET

width

视口宽度(默认:1400

height

视口高度(默认:900

data

要发布的 HTTP 数据(默认:{}

waitfor

CSS3 选择器。只有当此选择器满足条件时,才会进行截图。典型用法:如果您的页面包含大量的 JavaScript 处理,您可以在处理完成后在元素上添加一个 CSS 类,以确保截图正确渲染页面。

render

如果 render=html,则返回包含图像和自动打开打印对话框的 HTML 页面。

size

调整图像大小(宽度 x 高度,例如:500x500),需要安装 PILPillow

crop

如果 true,则结果图像将被裁剪以匹配指定的大小。

例如: http://server/capture/?url=http://django-fr.org&selector=body&width=1024&height=768&size=500x500

作为模板标记

您可以使用模板标记将截图包含在您的页面中。它将执行捕获并返回结果图像的 base64 版本。

如果您不想公开捕获 API,这将非常有用。

{% base64capture URL SELECTOR %}

例如,在一个 SVG 模板中

{% load screamshot %}
...

<image
   y="200"
   x="300"
   id="imagemap"
   xlink:href="data:{% base64capture "company:map" "#map" %}"
   width="640" />

如果您在另一个实例上运行捕获服务器,您可以指定反转的根 URL(默认为本地)

SCREAMSHOT_CONFIG = {
    'CAPTURE_ROOT_URL': 'http://127.0.0.1:8001',
}

作为库 - 渲染本地 Django 模板

有时,您无法访问请求对象。一个典型的例子是为客户创建 PDF 收据并将其发送电子邮件。这两个任务都可能需要一段时间,因此将它们推入某个队列(如 RabbitMQ)是自然的。但是,如果您的 PDF 渲染任务执行,您就无法访问请求对象。不用担心 - 您仍然可以使用 screamshot 作为库。以下是方法。

from screamshot.utils import render_template

# you can either render the template to a TemporaryFile:

with render_template('my-template.html', {'context': 'variables'}) as output:
    # do anything you want with the output
    # like attach it to email message, etc.
    print(output.name)

# or you can specify a path instead:
render_template('my-template.html',
    {'context': 'variables'},
    output='/home/you/rendering.png',
    format='png')

请注意,为了加载您的静态文件,screamshot 将尝试用您静态文件的本地路径替换所有 STATIC_URL 出现(当然,如果它们不是通过 https 提供的)

自定义页面渲染

casperjs脚本将 CSS类附加到元素上。您可以使用这个CSS标记轻松地在CSS样式表中自定义打印时的渲染

.screamshot #navigation {
  display: none;
}
.screamshot #main {
  margin: 2em;
}

捕获带认证的视图

您可以在Django项目中使用基本HTTP认证,为截图创建一个专用用户,并带上凭据捕获完整的URL(例如:http://user:password@host/page/)。

或者,您可以使用特定的视图装饰器。

在您的设置中定义授权IP以捕获您的页面

SCREAMSHOT_CONFIG = {
    'CAPTURE_ALLOWED_IPS': ('127.0.0.1',),
}

并使用提供的装饰器

from screamshot.decorators import login_required_capturable


@login_required_capturable
def your_view(request):
    ...

渲染命令和CLI参数

您可以通过设置CAPTURE_METHOD设置来指定要使用的渲染器。默认值是‘casperjs’。可能的值是‘casperjs’和‘phantomjs’。

SCREAMSHOT_CONFIG = {
    'CAPTURE_METHOD': 'phantomjs',
}

默认情况下,我们在PATH环境变量(如which)中查找CasperJS/PhantomJS二进制文件,但您可以绕过此操作

SCREAMSHOT_CONFIG = {
    'CASPERJS_CMD': '/home/you/Downloads/apps/casperjs',
    'PHANTOMJS_CMD': '/home/you/Downloads/apps/phantomjs'
}

请注意,CAPTURE_METHOD设置指定了将被评估的位置,即如果您将CAPTURE_METHOD设置为‘phantomjs’,则PHANTOMJS_CMD将被评估。

您还可以指定PhantomJS/CasperJS的额外参数,例如

通过CLI_ARGS设置使用--disk-cache=true

SCREAMSHOT_CONFIG = {
    'CLI_ARGS': ['--disk-cache=true', '--max-disk-cache-size=30000']
}

请参阅PhantomJS和CasperJS主页上的相关文档。

您还可以覆盖捕获脚本。默认实现使用为CasperJS编写的捕获脚本。还提供了一个PhantomJS的默认捕获脚本。

如果您有自己的脚本希望使用,请在CAPTURE_SCRIPT选项中指定它。

SCREAMSHOT_CONFIG = {
    'CAPTURE_SCRIPT': '/home/you/scripts/capture.js',
}

您还可以添加与CSS3选择器的最大等待时间对应的超时时间(请参阅waitfor选项)

SCREAMSHOT_CONFIG = {
    'TIMEOUT': 7000 #ms 5000 by default,
}

关于runserver的说明

如果您想使用manage.py runserver进行测试,您将无法捕获来自同一实例的页面。

运行两次(在两个端口上),并配置CAPTURE_ROOT_URL

作者

makinacom

许可证

  • Lesser GNU公共许可证

更改日志

0.8.5 (2020-04-09)

  • 修复支持Django 2,2.1,2.2

0.8.4 (2020-04-08)

  • 添加支持Django 2,2.1,2.2

  • 添加waittimeout设置

0.8.2 (2018-07-04)

  • 将响应错误的状态代码从400更改为500

0.8.1 (2017-06-14)

  • 修复PATH中的phantom路径

0.8.1 (2017-05-05)

  • 修复python 3支持

  • 添加对Django 1.11的支持

  • 停止支持Django <1.8

0.7.0 (2017-01-08)

  • 支持渲染PDF

  • Python 3支持

  • Django 1.8支持

  • 添加TEST_CAPTURE_SCRIPT设置

0.6.0 (2014-11-27)

  • 添加了对纯PhantomJS捕获的支持,即没有CasperJS,没有选择器(由Mateusz Mikolajczyk提供)

  • 支持捕获本地渲染的模板,无需外部请求(由Mateusz Mikolajczyk提供)

0.5.0 (2014-11-11)

  • 添加了截图模型和管理站支持(由Luc Milland提供)

  • 允许在截图前等待给定时间(毫秒)(由Florent Lebreton提供)

  • 在django1.7兼容性中将mimetype替换为content_type(由Florent Lebreton提供)

0.4.0 (2014-03-19)

  • 如果没有提供URL,则使用请求的主机(由Mozillag提供)

  • 允许提供自定义的PhantomJS命令(由mo-mughrabi提供)

  • 改进日志记录

  • 添加了一些基本的单元测试

0.3.1 (2014-01-31)

  • 修复要求拼写

0.3.0 (2013-09-05)

  • 在参数错误(400)时返回适当的HTTP响应

  • 更好地处理捕获错误,但尚不支持远程JS。(参考#1)

  • 对于casperjs_capture是文件路径的情况,指定了保存临时文件步骤的输出

  • 添加了一个screamshotter孤儿分支,作为一个演示Django项目

  • 控制图像格式的能力(除 png 或 html 之外)

0.2.0 (2013-08-18)

  • CASPERJS_CMD 设置以绕过 PATH 查找

  • 查询 crop 参数以控制缩放

  • 查询 size 参数以控制图像大小

  • 查询 render 参数以控制输出格式

  • 移除 remote.message 记录

  • 查询 waitFor 参数以控制捕获时机

  • body 上注入 screamshot 类以允许捕获样式

  • 如果没有提供选择器,则使用 capture 而不是 captureSelector

  • 查询参数以控制视口大小

  • 添加额外命令行参数的能力

  • 更新 CasperJS CLI 状态代码

  • 在登录装饰器中检测转发 IP 地址

0.1.1 (2012-04-17)

  • 包含包数据

0.1.0 (2012-04-17)

  • 初始工作版本

项目详细信息


下载文件

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

源分布

django-screamshot-0.8.5.tar.gz (22.6 kB 查看哈希值)

上传时间

由以下支持