如何依次访问网址列表?

时间:2019-01-21 02:01:08

标签: javascript

我一直在尝试创建一种自动方法来按顺序在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,然后再保存累积的缓存。但是,不,我尝试过的所有循环都只是冻结了浏览器。我很惊讶如此简单的任务如此困难。

1 个答案:

答案 0 :(得分:0)

您将需要使用fetch(),然后使用DOMParser解析HTML响应或使用XMLHttpRequest来获取要抓取的页面的DOM对象。然后,您可以使用查询选择器找到要抓取的下一个网址,并将当前网址(或其中的任何外部引用)保存为文件Blob。

取决于目标主机,您可能会遇到CORS限制,这将阻止您访问响应内容。由于这个和其他原因,使用Node.js编写爬虫更为常见,因为它们不受CORS策略的限制,并且您可以直接访问文件系统进行存储。