首页 > 解决方案 > 如何一个接一个地访问网址列表?

问题描述

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

标签: javascript

解决方案


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

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


推荐阅读