首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

获取 GitHub 热榜数据并写入数据库,一文带你见识 JavaScript 强大之处

前言

以下是业务流程:

• 打开 github.com/trending 页面;

• 选择 JavaScript 语言,时间设置为最近一个月,查看排行榜。

• 在排行榜内,获取到仓库名称,仓库地址,仓库当前的 star 数量,以及仓库的作者名。

• 将提取的数据,汇总为一个 Array,保存到mysql数据库。

• 表名为 tbl_github_trending。字段有 id, repo_name, repo_url, repo_star, repo_author, created_at, updated_at。

为了实现这个功能,我们需要使用 Node.js 中的一些模块,包括  和 。

•  是一个 Node.js 库,它提供了一个高级 API,可以通过编程方式控制一个 Chromium 或 Chrome 浏览器的实例。

• 是一个 Node.js 库,用于连接和操作 MySQL 数据库。

以下是代码示例,其中包括了连接 MySQL 数据库、使用 puppeteer 抓取数据、写入数据到数据库等步骤。其中数据库信息部分,替换为你的MySQL数据库配置即可。

在以上示例中,浏览器示例要手动关闭,数据库示例则无需手动维护,在程序结束时,自动断开。

爬取页面常见bug

在爬取 Github Trending 页面时,可能会遇到以下一些bug:

1.Github 反爬虫机制:Github有反爬虫机制,例如请求频率限制、IP封禁、人机验证等,如果触发,可能导致拒绝访问或被封禁IP地址。

2.页面渲染:Github 使用 JavaScript 动态渲染页面,这可能导致无法正确解析页面,从而无法获取到需要的数据。

3.Github API 限制:如果使用 Github API 来获取数据,可能会受到 Github API 的访问限制,例如每小时访问次数限制、每分钟访问次数限制等。

4.认证问题:有些页面的数据,是需要登录验证才能访问到的。这就要求处理登录验证的流程。

优化数据库操作部分

上面写入数据库记录的代码,我们改进一下。如果仓库repo_name已存在,那么仅更新字段;如果不存在,再创建。

原生的MySQL语句不够优雅,换成orm的方式

这里演示使用 Sequelize ORM 库的代码:

在本示例中,我们首先定义了一个  模型,并使用  方法将其同步到数据库。

接下来,我们定义了一个  函数,使用  方法来检查仓库名称是否已经存在。如果数据已经存在,则更新记录,否则就创建新记录。

在更新记录时,只需更新需要修改的字段,然后调用  方法保存更改。

注意,在模型定义中,使用了  选项来启用自动管理  和  字段的功能。

小结

本文从github趋势页的爬取,以及数据库操作两部分,演示了nodejs是如何实现功能的。特别地,现代前端页面一般为重JS应用,页面在多个文件、多个数据源加载完成之后,可能才能获取到想要的数据。这一点是获取页面数据,绕不过的地方,也是最考验开发者功底之处。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20230305A07LND00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券