javascript - 为.pdf链接抓取网页并将所有匹配的链接写入nodeJS中的文本文件
问题描述
我是一个有抱负的开发者。作为我的项目之一,我正在学习如何进行网络抓取。这里的目标是为任何 PDF 链接抓取给定的网页,并将这些链接保存到 NodeJS 中的文本文件中。使用给定的代码,我成功地在控制台记录了所有匹配的链接,但我只将一个文件写入我的文本文件。有人可以引导我走向正确的方向吗?
const puppeteer = require("puppeteer");
const fs = require("fs/promises");
let myNewURL =
"https://www.renault.co.il/cars/Zoe/index.html?fbclid=IwAR1RtxbC_U2fImp9_KXJuQ869h5Wv77fyZVj8uBOU86rU90wb2L_NfrNppc";
async function scrapeSite(url) {
console.log("firing");
const browser = await puppeteer.launch({ headless: true });
const page = await browser.newPage();
await page.goto(url);
//this gives back an actual array, not a node list
const linkCollection = await page.$$eval("a", (links) => {
return links.map((link) => {
return link.href;
});
});
for (const link of linkCollection) {
if (link.includes(".pdf")) {
console.log(link);
await fs.writeFile("pdfLinks.txt", link);
}
}
await browser.close();
}
scrapeSite(myNewURL);
解决方案
fs.writeFile
每次调用都会覆盖原始文件。试试fs.appendFile
吧。我还在\n
末尾添加了一个换行符 ( ),因此链接位于单独的行上:
for (const link of linkCollection) {
if (link.includes(".pdf")) {
console.log(link);
await fs.appendFile("pdfLinks.txt", link + '\n');
}
}
或者,您可以先将链接收集到一个数组中,然后将它们全部写在一起:
const pdfLinks = [];
for (const link of linkCollection) {
if (link.includes(".pdf")) {
console.log(link);
pdfLinks.push(link);
}
}
const output = pdfLinks.join('\n')
await fs.writeFile("pdfLinks.txt", output);
推荐阅读
- python - 如何将 pandas 函数从一列函数扩展到多列函数
- php - 排除 PHP 文件与图像一起显示
- javascript - js formdata文件上传
- java - 通过字段 'sbService' 表达的不满足的依赖关系;嵌套异常是 org.springframework.beans.factory.UnsatisfiedDependencyException:
- excel - 当单元格有空字符串 (="") 时,SUMPRODUCT 返回 #Value
- c++ - 使用非类型参数时的模板递归
- node.js - 猫鼬在 forEach() 中保存相同的文档
- c# - 如何在 Masstransit 中发布消息之前添加自定义标头
- javascript - JavaScript 将参数传递给回调
- tensorflow - 默认情况下为 iOS 启用 XNNPACK 的 Tensorflow Lite C++ 静态库