问题描述
因此,我设法从URL获得了我想要的一切。现在,我想将该对象写入“ verified.json”文件中。问题在于,只有我对象中的最后一项被写入那里,而另一项却被写入,表明它显然在某个地方坏了。
我是这个菜鸟,所以对解决方案的解释将不胜感激。
const axios = require("axios");
const cheerio = require("cheerio");
const fs = require('fs');
const colors = require("colors");
prodArray = {};
axios.get("https://arstechnica.com/gadgets/").then(urlResponse => {
const $ = cheerio.load(urlResponse.data);
$('li.article').each((i,elem) => {
const link = $(elem).find("a.overlay").attr("href");
//console.log(link.cyan);
const header = $(elem).find("h2").text();
//console.log(header);
const author = $(elem).find("p.byline").find("a").text();
//console.log(author);
console.log("---------------\n".red);
data = {
"Link: ": link,"Title: ": header,"Author: ": author
}
let dataStringfy = JSON.stringify(data);
let test = fs.writeFile("verified.json",dataStringfy,function (err) {
if (err) {
console.log(err)
} else {
console.log("Success")
}
})
console.log(test);
})
})
解决方法
您可以在写入文件之前先插入数组
var datas = [];
$('li.article').each((i,elem) => {
const link = $(elem).find("a.overlay").attr("href");
//console.log(link.cyan);
const header = $(elem).find("h2").text();
//console.log(header);
const author = $(elem).find("p.byline").find("a").text();
//console.log(author);
console.log("---------------\n".red);
data = {
"Link: ": link,"Title: ": header,"Author: ": author
}
datas.push(data);
});
let dataStringfy = JSON.stringify(datas);
let test = fs.writeFile("verified.json",dataStringfy,function (err) {
if (err) {
console.log(err)
} else {
console.log("Success")
}
})
,
我认为这样效果更好
const arr = []
$('li.article').each((i,elem) => {
const link = $(elem).find("a.overlay").attr("href");
const header = $(elem).find("h2").text();
const author = $(elem).find("p.byline").find("a").text();
arr.push({
"Link": link,"Title": header,"Author": author
})
})
let dataStringfy = JSON.stringify(arr);
console.log(dataStringfy)
const $doc = $($("xmp").text());
const arr = []
$('li.article',$doc).each((i,"Author": author
})
})
let dataStringfy = JSON.stringify(arr);
console.log(dataStringfy)
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<xmp><!DOCTYPE html>
<html lang="en-us">
<head>
<title>Tech | Ars Technica</title>
</head>
<body class="archive category category-gadgets category-22 grid-view light blog-us">
<main id="main" class="content-wrapper">
<h1 id="archive-head" class="archive-title">
<span class="archive-name">Tech</span>
<span class="divider"> / </span>
<span class="archive-desc">Product News & Reviews</span>
</h1>
<section class="with-xrail">
<!-- Horizontal listing -->
<div class="listing listing-latest ">
<ol>
<li class="tease article " data-post-id="1710163">
<a class="overlay" href="https://arstechnica.com/gadgets/2020/09/roku-starts-taking-orders-for-an-updated-ultra-player-and-a-new-soundbar/" tabindex="-1" role="presentation" aria-hidden="true"></a>
<figure>
<div class="listing listing-small" style="background-image:url('https://cdn.arstechnica.net/wp-content/uploads/2020/09/http-image.roku_.com-w-rapid-images-pdp-carousel-items-993bcf95-553f-4000-b795-981bed77c3cc-1-150x150.png');"></div>
<a class="overlay" href="https://arstechnica.com/gadgets/2020/09/roku-starts-taking-orders-for-an-updated-ultra-player-and-a-new-soundbar/" tabindex="-1" role="presentation" aria-hidden="true"></a>
</figure>
<header>
<h2><a href="https://arstechnica.com/gadgets/2020/09/roku-starts-taking-orders-for-an-updated-ultra-player-and-a-new-soundbar/">Roku’s big announcements today: A new Ultra player,soundbar,and AirPlay 2 support</a></h2>
<p class="excerpt">Roku finally supports Dolby Vision in the new Ultra player.</p>
<p class="byline" itemprop="author creator" itemscope itemtype="http://schema.org/Person">
<a itemprop="url" href="https://arstechnica.com/author/samuelaxon/"><span itemprop="name">Samuel Axon</span></a>
– <time class="date" data-time="1601331587" datetime="2020-09-28T22:19:47+00:00">Sep 28,2020 10:19 pm UTC</time>
</p>
</header>
<footer>
<div class="comments-hotness ">
<a title="40 posters participating" class="comment-count icon-comment-bubble-up" href="https://arstechnica.com/gadgets/2020/09/roku-starts-taking-orders-for-an-updated-ultra-player-and-a-new-soundbar/?comments=1">
<span class="comment-count-number">53</span>
<span class="visually-hidden"> comments with 40 posters participating</span>
</a>
</div>
</footer>
</li>
<li class="tease article " data-post-id="1710267">
<a class="overlay" href="https://arstechnica.com/gaming/2020/09/apple-vs-epic-hearing-previews-a-long-hard-fought-trial-to-come/" tabindex="-1" role="presentation" aria-hidden="true"></a>
<figure>
<div class="listing listing-small" style="background-image:url('https://cdn.arstechnica.net/wp-content/uploads/2018/07/fortnite-150x150.jpeg');"></div>
<a class="overlay" href="https://arstechnica.com/gaming/2020/09/apple-vs-epic-hearing-previews-a-long-hard-fought-trial-to-come/" tabindex="-1" role="presentation" aria-hidden="true"></a>
</figure>
<header>
<h2><a href="https://arstechnica.com/gaming/2020/09/apple-vs-epic-hearing-previews-a-long-hard-fought-trial-to-come/">Apple vs. Epic hearing previews a long,hard-fought trial to come</a></h2>
<p class="excerpt">Judge Rogers has strong words for both sides in the iOS <em>Fortnite</em> battle.</p>
<p class="byline" itemprop="author creator" itemscope itemtype="http://schema.org/Person">
<a itemprop="url" href="https://arstechnica.com/author/kyle-orland/"><span itemprop="name">Kyle Orland</span></a>
– <time class="date" data-time="1601330128" datetime="2020-09-28T21:55:28+00:00">Sep 28,2020 9:55 pm UTC</time>
</p>
</header>
<footer>
<div class="comments-hotness ">
<a title="94 posters participating,including story author" class="comment-count icon-comment-bubble-up" href="https://arstechnica.com/gaming/2020/09/apple-vs-epic-hearing-previews-a-long-hard-fought-trial-to-come/?comments=1">
<span class="comment-count-number">190</span>
<span class="visually-hidden"> comments with 94 posters participating,including story author</span>
</a>
</div>
</footer>
</li>
<li class="tease article " data-post-id="1710247">
<a class="overlay" href="https://arstechnica.com/information-technology/2020/09/joker-the-malware-that-signs-you-up-for-pricey-services-floods-android-markets/" tabindex="-1" role="presentation" aria-hidden="true"></a>
<figure>
<div class="listing listing-small" style="background-image:url('https://cdn.arstechnica.net/wp-content/uploads/2018/01/android-malware-150x150.jpg');"></div>
<a class="overlay" href="https://arstechnica.com/information-technology/2020/09/joker-the-malware-that-signs-you-up-for-pricey-services-floods-android-markets/" tabindex="-1" role="presentation" aria-hidden="true"></a>
</figure>
<header>
<h2><a href="https://arstechnica.com/information-technology/2020/09/joker-the-malware-that-signs-you-up-for-pricey-services-floods-android-markets/">“Joker”—the malware that signs you up for pricey services—floods Android markets</a></h2>
<p class="excerpt">Dozens of malicious apps,some available in Play,found in the past couple months.</p>
<p class="byline" itemprop="author creator" itemscope itemtype="http://schema.org/Person">
<a itemprop="url" href="https://arstechnica.com/author/dan-goodin/"><span itemprop="name">Dan Goodin</span></a>
– <time class="date" data-time="1601328069" datetime="2020-09-28T21:21:09+00:00">Sep 28,2020 9:21 pm UTC</time>
</p>
</header>
<footer>
<div class="comments-hotness ">
<a title="37 posters participating" class="comment-count icon-comment-bubble-up" href="https://arstechnica.com/information-technology/2020/09/joker-the-malware-that-signs-you-up-for-pricey-services-floods-android-markets/?comments=1">
<span class="comment-count-number">68</span>
<span class="visually-hidden"> comments with 37 posters participating</span>
</a>
</div>
</footer>
</li>
<li class="tease article " data-post-id="1710179">
<a class="overlay" href="https://arstechnica.com/gadgets/2020/09/amazon-prime-day-was-just-announced-and-some-deals-have-already-started/" tabindex="-1" role="presentation" aria-hidden="true"></a>
<figure>
<div class="listing listing-small" style="background-image:url('https://cdn.arstechnica.net/wp-content/uploads/2020/09/PR_Hero_Gift_US_en-150x150.jpg');"></div>
<a class="overlay" href="https://arstechnica.com/gadgets/2020/09/amazon-prime-day-was-just-announced-and-some-deals-have-already-started/" tabindex="-1" role="presentation" aria-hidden="true"></a>
</figure>
<header>
<h2><a href="https://arstechnica.com/gadgets/2020/09/amazon-prime-day-was-just-announced-and-some-deals-have-already-started/">Amazon Prime Day was just announced,and some deals have already started</a></h2>
<p class="excerpt">Did you really think Amazon was going to let 2020 slip by without a Prime Day?</p>
<p class="byline" itemprop="author creator" itemscope itemtype="http://schema.org/Person">
<a itemprop="url" href="https://arstechnica.com/author/coreygaskin/"><span itemprop="name">Corey Gaskin</span></a>
– <time class="date" data-time="1601318425" datetime="2020-09-28T18:40:25+00:00">Sep 28,2020 6:40 pm UTC</time>
</p>
</header>
<footer>
<div class="comments-hotness ">
<a title="45 posters participating" class="comment-count icon-comment-bubble-up" href="https://arstechnica.com/gadgets/2020/09/amazon-prime-day-was-just-announced-and-some-deals-have-already-started/?comments=1">
<span class="comment-count-number">58</span>
<span class="visually-hidden"> comments with 45 posters participating</span>
</a>
</div>
</footer>
</li>
<li class="tease article " data-post-id="1707888">
<a class="overlay" href="https://arstechnica.com/gadgets/2020/09/youtube-celebrates-deaf-awareness-week-by-killing-crowd-sourced-captions/" tabindex="-1" role="presentation" aria-hidden="true"></a>
<figure>
<div class="listing listing-small" style="background-image:url('https://cdn.arstechnica.net/wp-content/uploads/2015/05/youtube-150x150.jpg');"></div>
<a class="overlay" href="https://arstechnica.com/gadgets/2020/09/youtube-celebrates-deaf-awareness-week-by-killing-crowd-sourced-captions/" tabindex="-1" role="presentation" aria-hidden="true"></a>
</figure>
<header>
<h2><a href="https://arstechnica.com/gadgets/2020/09/youtube-celebrates-deaf-awareness-week-by-killing-crowd-sourced-captions/">YouTube celebrates Deaf Awareness Week by killing crowd-sourced captions</a></h2>
<p class="excerpt">500,000 signatures aren't stopping YouTube from shutting down accessibility feature.</p>
<p class="byline" itemprop="author creator" itemscope itemtype="http://schema.org/Person">
<a itemprop="url" href="https://arstechnica.com/author/ronamadeo/"><span itemprop="name">Ron Amadeo</span></a>
– <time class="date" data-time="1601316664" datetime="2020-09-28T18:11:04+00:00">Sep 28,2020 6:11 pm UTC</time>
</p>
</header>
<footer>
<div class="comments-hotness ">
<a title="85 posters participating" class="comment-count icon-comment-bubble-up" href="https://arstechnica.com/gadgets/2020/09/youtube-celebrates-deaf-awareness-week-by-killing-crowd-sourced-captions/?comments=1">
<span class="comment-count-number">106</span>
<span class="visually-hidden"> comments with 85 posters participating</span>
</a>
</div>
</footer>
</li>
</ul>
</body>
</html></xmp>