一个访问可预测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}"
文档
安装
您可以使用 distribute 或 pip 在您的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.html,category2.html,… 的页面
在这些页面中,Allanon将寻找具有CSS类 image-repos 的 ul 标签内的所有链接,并递归抓取它们。
在这些页面中,Allanon将寻找具有类 image-containers 的 div 中的图像。
图像将被下载。
您可能可以继续这种方式,提供第三级的过滤器,依此类推。
命名和存储下载的资源
默认情况下,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的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | f533fa7b898e1672ce2625d2722fdab1603f115fcb2bfb628e2e78e9381396a1 |
|
MD5 | 14619dbf30151b42c1aa13e7eca550f5 |
|
BLAKE2b-256 | a9c1e0e038858fdbe4709461811dda106f8e6d8b3d633809ebe54046791e72ae |