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,然后再保存累积的缓存。但是不,我尝试过的所有循环都只是冻结了我的浏览器。我很惊讶这么简单的任务竟然如此困难。
解决方案
您将需要使用fetch()
然后解析 HTML 响应,使用DOMParser
或使用XMLHttpRequest
来获取您正在抓取的页面的 DOM 对象。然后,您可以使用查询选择器查找要抓取的下一个 URL,并将当前 URL(或其中的任何外部引用)保存为文件 blob。
根据目标主机,您可能会遇到阻止您访问响应内容的 CORS 限制。由于这个和其他原因,使用 Node.js 编写爬虫更为常见,因为它们不受 CORS 策略的限制,并且您可以直接访问文件系统进行存储。
推荐阅读
- c# - 函数谓词到字符串
- python - 如何在 Python 中实现良好的移动平均线
- dictionary - 字符串内的presto lambda函数变量
- c# - 如何在 Xunit 中为集合编写 Assert 语句?
- csv - 将大 csv 文件部分导入 Neo4j
- sql - 在实体框架中使用事务的问题
- javascript - 通过单击图像在一个容器中显示/隐藏不同的信息:隐藏前显示信息
- regex - Sed:如何封闭匹配的行?
- php - 使用未定义的常量 STREAM_CRYPTO_METHOD_TLSv1_0_CLIENT
- algorithm - 用于子集和问题的多项式\伪多项式算法,具有浮点数和目标和或与目标和最接近的和