用爬虫计算自己 IT 邦帮忙所有文章的浏览/Like/留言总数

我想应该有许多 IT 邦帮忙的作者都很关心自己文章的浏览数,像笔者就是一个喜欢三不五时去看看自己文章增加多少浏览量的人;刚好有其他创作者反映希望可以透过工具取得自己所有文章的浏览/Like/留言总数,而不是靠计算机土法炼钢来计算。

藉此机会笔者就研究了一下「puppeteer」这个套件的用法,再花一点时间把小工具写出来,完整的程序码如下:

  • main.js

    const puppeteer = require("puppeteer");
    require("dotenv").config();
    
    (async () => {
      const ithelp_url = process.env.ITHELP_URL || "https://google.com/";
      const browser = await puppeteer.launch({
        headless: process.env.HEADLESS == "false" ? false : true,
      });
    
      let total_likes = 0;
      let total_responses = 0;
      let total_views = 0;
      let p = 0;
      //end = false时while回圈会中断
      let end = true;
      const page = await browser.newPage();
      while (end) {
        p == 0 ? await page.goto(ithelp_url) : await page.goto(ithelp_url + `?page=` + p);
        await page.waitForSelector(".profile-main__title");
    
        let elements = await page.$$(".qa-condition__count");
        if (elements.length > 0) {
          for (var i = 0; i < elements.length; i++) {
            let tmp_text = await page.evaluate((el) => el.textContent, elements[i]);
            if (i % 3 == 0) {
              total_likes += parseInt(tmp_text);
            } else if (i % 3 == 1) {
              total_responses += parseInt(tmp_text);
            } else if (i % 3 == 2) {
              total_views += parseInt(tmp_text);
            }
          }
        } else {
          await browser.close();
          end = false;
        }
        p++;
      }
      console.log({ "toal likes": total_likes, "toal responses": total_responses, "toal views": total_views });
    })();
    
  • .env

    # 填上自己想要爬虫的页面,下面是笔者个人的文章页面喔
    ITHELP_URL=https://ithelp.ithome.com.tw/users/20103256/articles
    # 预设不开启浏览器,如果你想开启就改成false
    HEADLESS=false
    

大家也可以到笔者的 Gihub 直接把专案 Clone 下来执行,下面是用笔者在 IT 邦帮忙文章网址的 Demo:

专案使用提醒:

  • 去「.env」里面把「ITHELP_URL」改成自己的网址
  • 如果你想要看到浏览器弹出来,去「.env」里面把「HEADLESS」改成 false
  • 记得先在终端机输入yarn将套件安装
  • 在终端机输入yarn start即可执行

感谢大家的阅读,如果文章有帮助到你,按Like可以让我更有写文的动力。

我在 Medium 平台 也分享了许多技术文章
❝ 主题涵盖「MIS & DEVOPS资料库前端後端MICROSFT 365GOOGLE 云端应用自我修炼」希望可以帮助遇到相同问题、想自我成长的人。❞


<<:  30天Python自学:Day02

>>:  资料控制者(data controller)

IT铁人DAY 18-Adapter 适配器模式

  今天介绍的Adapter Pattern是属於结构型模式,以字面上来说不难猜到它是用来让物件与物...

[day-5] 我与我的第一个程序,HelloWorld和背後的历史!

Hello World 的起源 通常我们在测试一个程序或是一个环境是否正常 会习惯使用 Hello ...

第 26 集:Bootstrap 客制化 root 变数

此篇会解析 Bootstrap root 是如何自定义生成自己的 CSS 样式。 原始码 使用到两...

Day11:今天我们来聊一下Parrot Security上的Enum4linux

当我们环境有Windows及Samba主机时,可以使用Parrot Security上的Enum4l...

[Lesson26] Kotlin - Inheritance

如果类别要被继承,可以使用 open 修饰 open class Person(var name :...