【问题标题】:Scrape headlines with Playwright, how to write output into Markdown file (Console.log is working)用 Playwright 刮头条,如何将输出写入 Markdown 文件(Console.log 正在工作)
【发布时间】:2021-05-27 06:40:18
【问题描述】:

所以我想抓取网站的一些标题并在我的网站上使用它们(使用降价文件管理)。 该脚本有效并且输出在控制台中看起来很好。但我无法将“For循环”的值写入降价文件。

已尝试使用整个对象并将变量名称( ${list} )放在降价中,还尝试将输出的单个节点写入降价( ${firstItem} )。 一直在搜索'write result javascript to markdown'、'print object to markdown'、'convert json to markdown',查看了字符串,并尝试了几个相关术语,但到目前为止没有结果。

如果您有提示或知道解决此问题的方法,非常感谢分享。

const { chromium } = require('playwright');
const fs = require('fs');

(async () => {
const browser = await chromium.launch({ headless: true, slowMo: 250 });
const context = await browser.newContext();
const page90 = await browser.newPage();

await page90.goto("https://books.toscrape.com/");
const listcontent = await page90.evaluate(() => {
const data = [];

const books = document.querySelectorAll(".product_pod");
books.forEach((book) => {
  let title = book.querySelector('.thumbnail').getAttribute("alt");
  let url = book.querySelector('a').getAttribute("href");
  data.push({
    title,
    url,
  });
});
return data;
});

// console.log(listcontent);
// listcontent.forEach(item => console.log(item))
// [listcontent].forEach(console.log, console);
// [listcontent].forEach(console.log.bind(console));
// let list = {};

for (const {title: n, url: f} of listcontent) {
console.log('[' + n + '](' + f + ')');
// return list;
}

//  let firstItem = listcontent[0]
// lists as json
console.log(listcontent)

// for (const property of listcontent) {
//   console.log(`${property}: ${url[property]}`);
// }


// ${firstItem} 
// ${list}

// Create Markdown with frontmatter part:
fs.promises.writeFile(`file` + '.md', `---

---

`);

console.log('MD created');
await browser.close()
})()

【问题讨论】:

    标签: javascript web-scraping markdown playwright


    【解决方案1】:

    首先,你的脚本缺少一些括号和大括号,所以这个是有效的:

    const { chromium } = require('playwright');
    const fs = require('fs');
    
    (async () => {
      const browser = await chromium.launch({ headless: true });
      const context = await browser.newContext();
      const page90 = await browser.newPage();
    
      await page90.goto("https://books.toscrape.com/");
      const listcontent = await page90.evaluate(() => {
        const data = [];
    
        const books = document.querySelectorAll(".product_pod");
          books.forEach((book) => {
            let title = book.querySelector('.thumbnail').getAttribute("alt");
            let url = book.querySelector('a').getAttribute("href");
            data.push({
              title,
              url,
            });
          });
          return data;
      });  
      
      browser.close();
    
    })();
    

    以 Markdown 样式将文本保存到文件中的简单方法是以特定格式构建字符串,然后将其转储到文件中:

    let string = '';
    for (const {title: n, url: f} of listcontent) {
      string += '[' + n + '](' + f + ')\n\n';
    }
    

    然后将其写入文件:

    fs.writeFileSync('books.md', string);
    

    如果你想要一个异步函数:

    fs.writeFile('books.md', string, function (err) {
      if (err) throw err;
    
      console.log("File was saved.");
      browser.close();
    });
    

    所以整个脚本:

    const { chromium } = require('playwright');
    const fs = require('fs');
    
    (async () => {
      const browser = await chromium.launch({ headless: true });
      const context = await browser.newContext();
      const page90 = await browser.newPage();
    
      await page90.goto("https://books.toscrape.com/");
      const listcontent = await page90.evaluate(() => {
        const data = [];
    
        const books = document.querySelectorAll(".product_pod");
          books.forEach((book) => {
            let title = book.querySelector('.thumbnail').getAttribute("alt");
            let url = book.querySelector('a').getAttribute("href");
            data.push({
              title,
              url,
            });
          });
          return data;
      });
    
      let string = '';
      for (const {title: n, url: f} of listcontent) {
        string += '[' + n + '](' + f + ')\n\n';
      }
    
      /*fs.writeFile('books.md', string, function(err) {
        if(err) throw err;
        console.log("File was saved.");
        browser.close();
      });*/
    
      fs.writeFileSync('books.md', string);
      browser.close();
    
    })();
    

    【讨论】:

    • 哇,谢谢帕维尔!这是有效的。在降价文件的顶部仍然需要一些 Frontmatter,但我想我可以解决这个问题。
    猜你喜欢
    • 2016-08-01
    • 1970-01-01
    • 2018-03-09
    • 2022-11-15
    • 1970-01-01
    • 1970-01-01
    • 2016-03-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多