Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 初学者JS问题&x2013;Js,存储数据、链接JSON文件和For循环_Javascript_Node.js_Arrays_Web Scraping_Puppeteer - Fatal编程技术网

Javascript 初学者JS问题&x2013;Js,存储数据、链接JSON文件和For循环

Javascript 初学者JS问题&x2013;Js,存储数据、链接JSON文件和For循环,javascript,node.js,arrays,web-scraping,puppeteer,Javascript,Node.js,Arrays,Web Scraping,Puppeteer,我是前端开发人员的新手。现在正在学习FCC Javascript课程,几乎完成了!虽然FCC擅长教授理论,但实际上他们并不教授任何基本的实际编程设置(编码环境、json等) 场景: 我想练习使用Puppeter从IMDB收集数据(收集标题、评级等)。我观看的教程向我展示了如何一次收集一个URL。我熟悉循环和数组。这是我到目前为止所拥有的。它与单独的URL一起生成标题和评级信息 const puppeteer = require('puppeteer'); //const jsonFile = r

我是前端开发人员的新手。现在正在学习FCC Javascript课程,几乎完成了!虽然FCC擅长教授理论,但实际上他们并不教授任何基本的实际编程设置(编码环境、json等)

场景: 我想练习使用Puppeter从IMDB收集数据(收集标题、评级等)。我观看的教程向我展示了如何一次收集一个URL。我熟悉循环和数组。这是我到目前为止所拥有的。它与单独的URL一起生成标题和评级信息

const puppeteer = require('puppeteer');
//const jsonFile = require("./data.json") >> not sure if this is correct
//const numberOfUrls = jsonFile.url.length; >> not sure if this is correct
//const urlsArray = jsonFile.url; >> not sure if this is correct

(async () => {

let movieUrl = 'https://www.imdb.com/title/tt0944947/';
  
  const browser = await puppeteer.launch({ headless: false});
  const page = await browser.newPage();
  
  await page.goto((movieUrl), { waitUntil: 'networkidle0' });

  
  let data = await page.evaluate(() => {

    let title = document.querySelector('div[class="title_wrapper"] > h1').innerText;
    let rating = document.querySelector('span[itemprop="ratingValue"]').innerText;
    let ratingCount = document.querySelector('span[itemprop="ratingCount"]').innerText;
    
    return {
      title,
      rating,
      ratingCount
    }
  });
  
  console.log(data);

  await browser.close();
})();
[
{"url":  "https://www.imdb.com/title/tt5491994/"},
{"url": "https://www.imdb.com/title/tt0795176/"},
{"url": "https://www.imdb.com/title/tt0185906/"},
{"url":"https://www.imdb.com/title/tt0903747/"},
{"url": "https://www.imdb.com/title/tt7366338/"},
{"url": "https://www.imdb.com/title/tt0306414/"},
{"url": "https://www.imdb.com/title/tt6769208/"}
]
然后,我在同一个目录中手动(我还不知道如何创建json文件)创建了一个data.json文件,其中包含以下信息

const puppeteer = require('puppeteer');
//const jsonFile = require("./data.json") >> not sure if this is correct
//const numberOfUrls = jsonFile.url.length; >> not sure if this is correct
//const urlsArray = jsonFile.url; >> not sure if this is correct

(async () => {

let movieUrl = 'https://www.imdb.com/title/tt0944947/';
  
  const browser = await puppeteer.launch({ headless: false});
  const page = await browser.newPage();
  
  await page.goto((movieUrl), { waitUntil: 'networkidle0' });

  
  let data = await page.evaluate(() => {

    let title = document.querySelector('div[class="title_wrapper"] > h1').innerText;
    let rating = document.querySelector('span[itemprop="ratingValue"]').innerText;
    let ratingCount = document.querySelector('span[itemprop="ratingCount"]').innerText;
    
    return {
      title,
      rating,
      ratingCount
    }
  });
  
  console.log(data);

  await browser.close();
})();
[
{"url":  "https://www.imdb.com/title/tt5491994/"},
{"url": "https://www.imdb.com/title/tt0795176/"},
{"url": "https://www.imdb.com/title/tt0185906/"},
{"url":"https://www.imdb.com/title/tt0903747/"},
{"url": "https://www.imdb.com/title/tt7366338/"},
{"url": "https://www.imdb.com/title/tt0306414/"},
{"url": "https://www.imdb.com/title/tt6769208/"}
]
我有4个问题:

  • 如何将json文件“链接”到index.js文件
  • 创建包含数组的obj或包含多个对象的数组更好吗
  • 是否可以将console.log的结果保存到全新的json文件中
  • 有人能帮我写一个for循环,让我的脚本遍历json文件吗?这是我到目前为止所拥有的
  • for(设i=0;i
    这是我关于堆栈溢出的第一篇文章。我决定学习编程以拓宽就业前景。我很乐意收到任何关于改进我的答案搜索过程的反馈(例如,发布了太多的代码,没有足够的上下文,等等)


    提前感谢您的帮助。

    以后,请尝试对每个问题使用一个问题:)

  • 现在将JSON数据文件与
    require
    一起使用或多或少是一种攻击。更适合将模块与一起使用。因此,您将独立于CommonJS模块系统,并且能够使用相同的API保存JSON

  • 尽量使用最简单的数据结构。在您的例子中,对象中只有一个字段,所以只要一个字符串数组就足够了

  • [
    "https://www.imdb.com/title/tt5491994/",
    "https://www.imdb.com/title/tt0795176/",
    "https://www.imdb.com/title/tt0185906/",
    "https://www.imdb.com/title/tt0903747/",
    "https://www.imdb.com/title/tt7366338/",
    "https://www.imdb.com/title/tt0306414/",
    "https://www.imdb.com/title/tt6769208/"
    ]
    
  • 最好先收集所有数据,然后将其保存到JSON文件中

  • 例如:

  • const puppeter=require('puppeter');
    常数fs=要求('fs');
    const json=fs.readFileSync('./test.json','utf8');
    const urlsArray=JSON.parse(JSON);
    const numberOfUrls=urlsArray.length;
    (异步()=>{
    试一试{
    const browser=wait puppeter.launch({headless:false});
    const page=wait browser.newPage();
    常量结果=[];
    for(设i=0;i{
    让title=document.querySelector('div[class=“title\u wrapper”]>h1')。innerText;
    让rating=document.querySelector('span[itemprop=“ratingValue”]”)。innerText;
    让ratingCount=document.querySelector('span[itemprop=“ratingCount”]”)。innerText;
    返回{
    标题
    评级
    比率计数
    };
    });
    控制台日志(数据);
    结果:推送(数据);
    }
    控制台日志(结果);
    writeFileSync('./result.json',json.stringify(result,null,2),'utf8');
    等待浏览器关闭();
    }捕捉(错误){
    控制台错误(err);
    }
    })();
    
    请修改您的帖子和标题,提出一个简单、明确、具体的问题。不要让每个人都进来看看你在讲什么。:)看见你不需要在一篇帖子里问很多问题。