跳转到主要内容

一个访问可预测URL集合的Web爬虫,并自动从这些URL下载您想要的资源

项目描述

简介

比如说,你想要访问一个缓慢的流媒体网站来查看一些内容(显然:不受版权保护的内容)。

流媒体网站使用以下格式的URL

http://legal-streaming-site.org/program-name/season5/episode4/

每个页面都包含一些HTML代码,如下所示

....
    <div id="video-container">
       ...
       <embed src="http://someotherurl.org/qwerty.flv" ...
       ...
    <div>
...

比如说,这是你节目第五季第四集的URL。你知道这个节目有6季,每季有22集。

如前所述:这个网站非常慢,所以你更喜欢在后台下载剧集,稍后再观看。

要下载它们,你需要查看页面内的HTML并获取一些资源(通常是FLV文件)。最好是下载所有剧集,而不是手动下载。

全安龙 将帮助你完成这类任务。你只需提供以下内容

  • 一个简单的URL或一个 动态URL模式

  • 页面内资源的 查询选择器

快速示例(可以保持单行)

$ allanon --search="#movie-container embed" \
> "http://legal-streaming-site.org/program-name/season{1:6}/episode{1:22}"

文档

安装

您可以使用 distributepip 在您的Python环境中安装实用程序。

$ easy_install Allanon

或者等价地

$ pip install Allanon

调用

安装后,您将能够从命令行运行 allanon 脚本。例如:运行以下命令以访问实用程序的帮助

$ allanon --help

基本用法(你可能根本不需要全安龙来完成这个任务)

allanon 脚本接受要下载的URL(或URL列表)

$ allanon http://myhost/folder/image1.jpg http://myhost/folder/image2.jpg ...

提供给Allanon的每个命令行URL都可以是一个简单的URL,或者如以下示例所示的 URL模型

$ allanon "http://myhost/folder/image{1:50}.jpg"

这将自动抓取50个不同的URL。

主要用法(现在事情变得有趣了)

allanon 脚本接受一个额外的 --search 参数(见上面的第一个示例)。当您提供它时,您意味着

我不想直接下载这些URL,但它们包含指向我真正想要的文件的链接”。

搜索参数的格式必须与CSS 3兼容,类似于著名 jQuery库 支持的格式,并且它基于 pyquery 库。请参阅其文档以获取更多关于您可以查找的信息。

极端用法

可以多次提供 --search 参数

$ allanon --search="ul.image-repos a" \
> --search="div.image-containers img" \
> "http://image-repository-sites.org/category{1:30}.html"

当您提供(例如)两个不同的搜索参数时,您意味着

我不想下载给定URL的资源。这些URL包含指向二级页面的链接,在这些页面内部有指向我想要下载的资源的链接

过滤器将按给定顺序应用,因此

  • Allanon将搜索30个名为 category1.htmlcategory2.html,… 的页面

  • 在这些页面中,Allanon将寻找具有CSS类 image-reposul 标签内的所有链接,并递归抓取它们。

  • 在这些页面中,Allanon将寻找具有类 image-containersdiv 中的图像。

  • 图像将被下载。

您可能可以继续这种方式,提供第三级的过滤器,依此类推。

命名和存储下载的资源

默认情况下,Allanon下载当前目录中的所有文件,因此可能发生文件名冲突。您可以通过更改动态文件名来控制如何/在哪里下载,使用 --filename 选项,并且/或者使用 --directory 选项更改存储文件的目录。

示例

$ allanon --filename="%HOST-%INDEX-section%1-version%3-%FULLNAME" \
> "http://foo.org/pdf-repo-{1:10}/file{1:50}.pdf?version={0:3}"

如您所见,--filename 接受一些 标记,这些标记可用于更好地组织资源

%HOST

将替换为URL中使用的域名。

%INDEX

是从1开始的递增数字,直到下载的资源数量。

%X

当使用动态URL模型时,您可以引用URL段当前的编号。

在这种情况下,“%1”是当前“pdf-repo-x”编号,而“%3”是“version”参数值。

%FULLNAME

原始文件名(如果不提供 --filename,则使用的文件名)。

您还可以使用 %NAME%EXTENSION 来获取文件名(不包含扩展名)或仅扩展名。

--directory 选项可以是简单的目录名或目录路径(例如,Unix-like格式,“foo/bar/baz”)。

示例

$ allanon --directory="/home/keul/%HOST/%1" \
> "http://foo.org/pdf-repo-{1:10}/file{1:50}.pdf" \
> "http://baz.net/pdf-repo-{1:10}/file{1:50}.pdf"

--directory 选项也支持一些标记:您可以使用与上面相同的含义使用 %HOST%INDEX%X

待办事项

此实用程序处于alpha阶段,下载时可能会发生许多错误,并且缺少许多功能

  • 详细程度控制

  • 带宽控制

  • 多线程(让我们看看grequests

  • Python 3

如果您发现其他错误或想要请求缺失的功能,请使用产品的错误跟踪器

变更日志

0.2 (2014-01-02)

  • 在错误页面时不要爬取或下载

  • 处理下载资源时的重复文件名:添加了--check-duplicate选项

  • 特定应用程序的用户代理头部(可通过--user-agent选项配置)

  • --directory选项可以是一个路径,因此可以创建中间目录,并接受标记

  • 更有效的内存使用

  • 获取资源时显示进度条(现在需要progress

  • 修复了从响应头部获取引号文件名时的问题

  • 添加了--timeout选项

  • 添加了--sleep选项

0.1 (2013-01-05)

  • 第一个版本

项目详情


下载文件

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

源代码分发

Allanon-0.2.zip (34.9 kB 查看哈希值)

上传时间 源代码

由以下组织支持