我如何从网站提取所有 .zip 链接?

我如何从网站提取所有 .zip 链接?

有没有一个工具可以提取.zip网站的所有链接并将它们保存到.txt文件中。我正在使用 Linux mint。我想要.zip这个网站的所有链接:

http://all-free-download.com/free-photos/

答案1

我有一个解决方案,虽然它并不完美,并且需要您拥有curlperl安装,但 Linux Mint 应该已经具备这两个功能,尽管我的解决方案确实包含我编写的 Perl 模块,该模块可在 CPAN 上使用。同样,Linux Mintcpan应该已经具备并安装了它,如果您还没有配置它,您可能只需要配置它。

对于模块应用程序::提取链接,你可以像这样安装:

$ cpan App::ExtractLinks

只要您的 Perl 设置正确并且任何 CPAN 模块在您的路径中可见,您现在就可以extract-links在终端中运行。如果您在不输入任何内容的情况下执行此操作,您将看不到任何内容,因为它只期望 HTML 流,并且它会将出现在href=""src=""属性中的任何 URL 输出到标准输出(打印到您的终端),所以它真的很简单,但通过将其与终端中的某些内容相结合,我们几乎可以实现您的要求。

如果将以下 bash 脚本保存到文件中,并授予其可执行权限chmod 755或像这样运行它bash filename

#!/usr/bin/env bash

while read url
do
    while read id
    do
        curl -s -I "http://files.all-free-download.com/free_download_graphic_$id.html" | perl -n -e '/^Location: (.*)$/ && print "$1\n"'
    done < <(curl -s "$url" | extract-links | grep "_download" | grep -Eo '[0-9]*')
done < <(curl -s http://all-free-download.com/free-photos/ | extract-links | grep "\/download\/")

现在让我尝试逐行解释一下。

首先,我们将以下命令的输出传送到while read循环。

curl -s http://all-free-download.com/free-photos/ | extract-links | grep "\/download\/")

这将从您提供的 URL 获取 HTML,将输出流传输到extract-links,(-s参数为curljust 表示curl默默执行此操作),然后显示页面中找到的所有链接。然后我们获取此链接列表并仅查找其中包含的链接/download/,这就是grep命令正在执行的操作。当然,这不是一个通用的解决方案,我必须查看您提供的站点的 HTML 源代码并找出它们的 URL 逻辑。

在我们获得其中仅有的链接之后/download/,我们将它们仅传递给循环while read,循环一次获取每个链接并将链接分配给变量$url。接下来我们再次执行类似的操作:

curl -s "$url" | extract-links | grep "_download" | grep -Eo '[0-9]*'

这与我们之前做过的相同,但针对的是这个特定的链接,这次会过滤其中包含的任何链接_download,然后只从链接中获取数字。这又是我弄清楚他们必须使用什么方案来安排链接和下载。

.zip现在我只想说,这之所以相当复杂,是因为网站上没有任何文件的直接链接,.zip当你导航到某些页面时,HTTP 重定向后才会开始下载。这让我想到了最后一部分:

curl -s -I "http://files.all-free-download.com/free_download_graphic_$id.html" | perl -n -e '/^Location: (.*)$/ && print "$1\n"'

这只从我们在上一步中检索到的链接中获取数字,再次将它们导入循环while read,将每个数字分配为变量$id,并且我们curl这次再次使用选项,它只检索标头(而不是下载文件),此时每个页面都会进行重定向,然后指向 zip 文件本身。我们通过内联脚本-I运行输出,该脚本只是一个正则表达式,用于获取HTTP 标头,该标头指定要重定向到哪个文件。curlperlLocation

所以最后你要做的就是:

bash my_script.sh > links.txt

编辑

需要注意的是,根据我对您提到的这个网站的测试,可能会出现重复的链接,所以请记住这一点。

显然,这不是一个非常有效的操作,但它是自动化的,如果没有网站管理员权限,就没有其他方法可以获取您想要的数据。

相关内容