下载具有特定元素的网站链接

时间:2017-07-30 16:24:54

标签: wget httrack

我需要递归镜像一些具有特定标记的网站壁纸图像,例如:

<div class="wb_more">
Original Resolution: <a href="//site.com/download/space_planet_sky_94434/4800x2700">4800x2700</a><br>
Views: <a href="/download/last">96661</a>
</div>

但不是其他人,例如:

<div class="wd_resolution">
<span class="wd_res_cat">Fullscreen</span>
<span class="wd_res_cat_raz"><a class="wb_res_select" href="//site.com/download/space_planet_sky_94434/1600x1200">1600x1200</a>
...
</span>
...
</span>
</div>

请注意,除了分辨率之外,URL都是相同的,但原件的分辨率可能会有所不同,因此只有标记会产生差异,例如在链接之前使用Original Resolution:等文本。

是否有使用wget或httrack或其他工具的解决方案?

谢谢。

2 个答案:

答案 0 :(得分:1)

您可以尝试使用普通wget并在其上使用正则表达式(例如sedperl) 然后下载您获得的链接(wget可以做到)

基本脚本看起来像那样

wget [URL] -o MyPage.html
./GetTheFlag.pl -html MyPage.html > WallPaperList.txt
wget -i WallPaperList.txt #here you can put your image where you want

GetFlag.pl看起来像

use warnings; 
use strict; 
use Getopt::Long;
my $Url;
my $MyPage;
GetOptions("html=s" => \$MyPage);
open(FILE,$MyPage);
my $content=FILE;
my @urls=($content =~ //gi) #insert here a regex depending on the flags around
foreach my $i (@urls) {
    print "$i\n";
}

例如,如果您的网址为<a href="url">New Wallpaper</a>,则正则表达式将为

 =~ /<a href="(\w+)">New Wallpaper</a>

关心\w它错过了一些不能在var名称中使用的字符-

希望这很清楚。

答案 1 :(得分:1)

您可以使用scrapy之类的报废工具执行此操作。 您可以使用css,xpath,regex或其他方法解析html响应,以获取与您的规则匹配的链接。

我认为最好每个网站制作一个刮刀。 例如,对于第一个:

import scrapy

class imageLink(scrapy.Spider):
    name = 'imageLink'

    # Here the list of url to start scrapping
    start_urls = ['https://images.com']

    def parse(self, response):
        # Get the link
        link = response.css('div.wb_more > a ').xpath('@href')
        # Make a callback to save the image
        yield scrapy.Request(url=url, callback=self.save_image)

    def save_image(self, response):
        link = response.url
        # Guess the filename from the link
        # space_planet_sky_94434
        filename = link.split('/')[5]
        # Save the image
        with open(filename, 'wb') as f:
            f.write(response.body)

如果网站有图片分页,您可以添加回调以使用下一页的链接进行解析。

我没有测试代码。