我需要递归镜像一些具有特定标记的网站壁纸图像,例如:
<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或其他工具的解决方案?
谢谢。
答案 0 :(得分:1)
您可以尝试使用普通wget
并在其上使用正则表达式(例如sed
或perl
)
然后下载您获得的链接(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)
如果网站有图片分页,您可以添加回调以使用下一页的链接进行解析。
我没有测试代码。