我一直在尝试创建一种自动方法来按顺序在url之后加载url,并将在每个url找到的资源保存到文件夹中。
Jdownloader似乎无法注意到URL上的资源,因此我尝试了各种JavaScript选项。
<script>
var i = 100;
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
async function demo() {
while (i < 330) {
window.location = "https://ia601708.us.archive.org/BookReader/BookReaderImages.php?zip=/10/items/sexualsuicide00gild/sexualsuicide00gild_jp2.zip&file=sexualsuicide00gild_jp2/sexualsuicide00gild_0"+i+".jp2&scale=1&rotate=0";
console.log('Taking a break...');
await sleep(5000);
console.log('Two seconds later');
i++;
}
}
demo();
</script>
和
<script>
var i = 100;
while (i < 330) {
window.location = "https://ia601708.us.archive.org/BookReader/BookReaderImages.php?zip=/10/items/sexualsuicide00gild/sexualsuicide00gild_jp2.zip&file=sexualsuicide00gild_jp2/sexualsuicide00gild_0"+i+".jp2&scale=1&rotate=0";
$(window).bind("load", function() {
i++;
});
}
</script>
我认为我可以循环url请求,将url名称循环一次,加载资源,然后自动加载序列中的下一个url,然后再保存累积的缓存。但是,不,我尝试过的所有循环都只是冻结了浏览器。我很惊讶如此简单的任务如此困难。
答案 0 :(得分:0)
您将需要使用fetch()
,然后使用DOMParser
解析HTML响应或使用XMLHttpRequest
来获取要抓取的页面的DOM对象。然后,您可以使用查询选择器找到要抓取的下一个网址,并将当前网址(或其中的任何外部引用)保存为文件Blob。
取决于目标主机,您可能会遇到CORS限制,这将阻止您访问响应内容。由于这个和其他原因,使用Node.js编写爬虫更为常见,因为它们不受CORS策略的限制,并且您可以直接访问文件系统进行存储。