【发布时间】:2020-08-06 12:14:00
【问题描述】:
我正在尝试编写一个脚本,当找到一个新的 url 时,它会将 url 转换为哈希。检查文件是否已经被写入,它会忽略它,如果之前不知道它应该被添加。
needle.get(mainUrl, function(err, res) {
if (err) throw err;
if (res.statusCode == 200 && !err ) {
var $ = cheerio.load(res.body)
var href = $('div div a').each(function(index, element) {
urlList.push($(element).attr("href"))
var url =($(element).attr("href"))
var hash = crypto.createHash('md5').update(url).digest('hex');
fs.writeFile('./directory/otherdirectory' + `${hash}`, url, (err) => {
if (err) throw err;
console.log('Hash created: ' + url + ' saved as ' + hash
});
}
)
}
})
这是我到目前为止所做的,但这只会写入新文件。它不会检查是否已添加文件,也不会删除不再找到的文件。
所以我想做什么:
- 我编写了一个脚本,用于获取网站的网址。
- 散列所有网址。
- 让 FS 检查文件是否已经被写入,如果它只是忽略它。
- 如果之前不知道,请将其添加为新文件。
- 如果在获取时找不到 url,请将其从列表中删除。
【问题讨论】:
-
最后一点“如果在获取时找不到url,则从列表中删除它”会很棘手。该目录是否仅包含相关文件到同一个网站?同样从事物的外观来看,可能有更好的方法来做到这一点,所以如果你能解释你在这里想要做什么以及为什么,那就太好了
-
@ibrahimmahrir 我想在获取同一个网站时使用它。因此,在网站上找到的每个 url 都将被添加到列表中,因此只有来自同一网站的 url,但是一旦在该网站上找不到该 url,就需要将其删除。所以我只会存储来自一个网站的网址。所以是的,只来自一个网站。
-
为什么不使用文本文件来存储 url 而不是将它们存储在单独的文件中?这样会干净很多。
-
@ibrahimmahrir 老实说我还没想过,它会更快吗?
-
是的,因为您将只处理一个文件并且您不需要哈希。也会更短。您是在保存有关 url 的额外数据,还是只保存 url?另外,您是否在其他地方使用这些网址?
标签: javascript web-scraping fs cheerio