Weglot

构建我们的网站爬虫:窥探Weglot的技术

构建我们的网站爬虫:窥探Weglot的技术
更新于
2023年6月19日
2025年5月26日

许多Weglot 用户都希望确保其网站的所有 URL 都能得到准确翻译(经过Weglot提供的第一层机器翻译后)。对于许多人来说,如果您拥有一个翻译成多种语言的大型网站,这可能会非常耗时。

我们还从用户反馈中注意到,有些用户在开始第一个网站翻译项目时有些困惑。他们经常会想,为什么在翻译列表中只能看到自己的主页 URL,而看不到其他所有页面,或者如何生成内容的翻译。

因此,我们知道这方面还有改进的余地。我们可以帮助用户更轻松地加入,更快、更高效地管理他们的项目,但唯一的问题是,我们还没有解决方案。

正如您可能已经猜到的那样......这导致了URL管理功能的发布,使用户能够扫描其网站的URL,并从Weglot 控制面板快速高效地生成翻译内容。

最近,这项功能从翻译列表转移到了新的按 URL 管理翻译的页面上,它变得更加灵活和强大,因此我们认为是时候告诉大家这项功能是如何实现的了。

拯救 Golang

2020 年初,大流行病造成的封锁终于让我有机会学习编程语言 Golang,由于时间不够,我不得不推迟学习。

Golang(简称 Go)是谷歌开发的一门语言,在过去几年里受到了广泛关注。

高朗

它是一种静态编译的编程语言,旨在帮助开发人员编写快速、健壮和并发的代码。它的简单性允许编写和维护大型复杂程序,而不会牺牲性能:Golang 可以说是 Python 和 C 语言的意外结晶:(相当)易于编写,运行速度快。

在我看来,学习一门新编程语言(或一个新框架或其他)的最好方法就是找到一个好项目,学以致用。这并不是最简单的任务:如果开发人员正在阅读这篇文章,他们就会知道这有多难。 

一个好的副业项目必须符合一些规范:

  • 范围必须足够大,这样开发人员才能在构建程序的同时学到足够多的技术:向控制台打印 "Hello world "很少能让开发人员掌握一门新语言。
  • 范围不能太大,以至于开发人员可能在完成项目之前就放弃了(我们都经历过这种情况)。
  • 最后但并非最不重要的一点是,它必须有趣!第 200 次编制待办事项清单并不是一件有趣的事,很可能你一想到如何让它发挥作用就放弃了。 
  • 加分点:副项目最好能解决现实世界中的问题,这有助于集中精力完成任务。

那么我为什么要提到这个呢?当我在思考有什么好的副项目可以让我开始学习 Golang 时,我突然想到网络爬虫完全符合上述描述,而且还能解决我们希望为Weglot 用户解决的一些问题。

让我们想一想,网络爬虫(通常被称为 "机器人")最简单的形式就是一个用来访问网站并提取信息的程序。

网络爬虫的一个典型用例是发现并访问网站的每个页面,然后生成网站地图。或者索引网站内容,例如谷歌机器人。

在我们的案例中,我们需要用户可以用来扫描他们的网站并导入网站的所有 URL。 

我们还在寻找一种生成翻译的新方法。对于那些不熟悉Weglot的人来说,"生成翻译 "意味着您的 URL(以及 URL 中的内容)会出现在您的Weglot 翻译列表中,您可以对翻译进行手动编辑。

在这一点上,用户必须访问其网站的翻译语言才能生成这些内容。如果您的网站只有几个页面,而且翻译的语言不多,这种方法就非常有效,但如果您的网站非常庞大,有成千上万个页面,这种方法很快就会成为一项令人难以承受的任务。

使用网络爬虫来自动完成这项任务的想法很快就变成了理想的解决方案,而且这也是 Golang 并发编程功能的完美用例!

于是,在 2020 年 1 月,我一边学习 Golang 的基础知识,一边开始制作网络爬虫的原型。 

它的功能并不多,只是一个简单的程序,将 URL 作为输入,然后开始抓取网站,访问它能找到的每一个相同的域链接,但速度很快,效率很高。

经过快速演示后,Rémy 对所提供的解决方案感到非常兴奋,并表示愿意花费研发所需的时间来完成 POC(概念验证),然后再考虑如何将该解决方案用于未来的生产。

POC
我向雷米演示的 POC 的后期和更复杂版本

作为一名软件工程师,当你独立完成某项工作,并获得充分开发产品的时间时,感觉真的很棒。这种被认可的感觉很棒,它会一直激励我,直到我们开发出可以投入生产的产品(这还有很长的路要走)。

托管问题

在完成机器人开发的同时,我开始考虑如何托管机器人并将其提供给用户,因为机器人还需要生成内容的功能,还需要考虑不同内容管理系统和集成之间的差异。

我首先想到的是使用经典且行之有效的解决方案:在 AWS 上运行一个计算实例,然后将机器人暴露在网络服务器后面。这似乎是个好主意,但我越想越担心几个问题。

首先,我不知道服务器需要支付多少费用,也不知道有多少用户会同时使用该功能。如果配置的容量足够大,但突然有很多用户同时抓取不同的超大型网站怎么办?

由于我之前没有托管围棋程序的经验,因此很难确定哪些资源(CPU、内存......)足以提供良好的用户体验。

此外,我觉得经典的 "始终运行 "网络服务器并不是最有效的解决方案。人们不会一直抓取他们的网站:一旦你导入了网址并生成了内容,即使你经常发布新的/更新的内容,你也不应该每天都使用机器人。

仔细想想,这似乎是无服务器托管的一个完美用例。

对于那些错过了几年前无服务器趋势的人,我将快速总结一下它的工作原理:

  • 尽管名为 "无服务器",但代码仍在服务器上运行
  • 与始终运行并监听连接的服务器不同,无服务器代码是按需运行的,当无服务器代码被触发时,云提供商将提供并分配一些资源供代码运行。

这种托管模式有两大优势:

  • 开发人员无需管理基础设施,所有工作都由提供商完成。这意味着你不必担心服务器安全或配置问题。
  • 最重要的是,它在设计上具有可扩展性! 

还记得我说过很难预测运行机器人需要多少服务器资源吗?现在你不必再为此烦恼了,每一个请求都会创建一个新的无状态隔离容器来运行你的代码,不会有超出服务器容量的风险,每一个请求都有自己的容器来运行。

那么,在最美好的世界里,一切都是最好的?差不多吧!

早在 2020 年,无服务器计算就被限制在 5 分钟内(至少对于 AWS 而言,我没有在谷歌云平台或微软 Azure 上使用无服务器托管的经验)。这非常合理,因为这种托管模式是为生成 pdf 或裁剪图片等短任务而设计的。 

在我们的案例中,5 分钟的持续时间是一个棘手的问题。虽然抓取一个响应速度快的小型网站绰绰有余,但对于动辄拥有数万个页面、有时响应速度稍慢的大型电子商务网站来说,在完成任务之前肯定会达到极限。

2020 年初,当 AWS 宣布将 5 分钟的限制增加到 15 分钟时,我正准备放弃无服务器! 

遗憾的是,AWS 通常在宣布新功能时不会提供太多信息,时间限制虽然延长了,但却没有说明如何获得它。

我将省去为找到如何将限制延长到 15 分钟所做的大量试验和研究,但我向你保证,这并不容易 🙂。

5 分钟的限制实际上是在基础架构层面执行的限制,AWS 不会在其不同服务之间维持超过 5 分钟的 HTTP 连接,解决方法是干脆不通过 HTTP 调用触发无服务器代码,还有很多其他方法,在我们的案例中,我们通过 SQS(AWS 消息队列服务)设置了触发。

通报结果

托管问题解决后,我们还需要完成一项任务才能收工。 

到目前为止,我们已经有了一个可以正常工作的机器人,并以一种可扩展和具有成本效益的方式托管,我们最不需要的就是将机器人生成的数据发送回用户。

由于我希望该功能的互动性越强越好,所以我选择了在机器人和Weglot 面板之间进行实时通信。

对于这种功能来说,实时性并不是必须的,你可以选择更简单的解决方案,比如长时间投票,但我想确保我们的用户能在爬虫开始工作后立即收到反馈,老实说,这也是让机器人大显身手、展示其潜力的一种方式 🙂。

由于我们当时没有任何东西可以处理实时通信(我们没有用到它),我们决定采用成熟的解决方案,我们用 nodejs 编写了一个简单的 websocket 服务器,并将其托管在 EC2 AWS 实例上。

我们在机器人上做了一些工作,以实现与 websocket 服务器的通信和自动化部署,最后我们终于准备好在发布到生产环境之前进行测试。

最初只是一个辅助项目,最终却成为了仪表盘的一部分。 

在编写爬虫程序和解决遇到的众多问题的过程中,我获得了很多乐趣。最后,我还学到了很多东西:一种新的编程语言和 AWS 生态系统中的新技能。

Go 绝对是一门我会再次使用的语言,它在网络任务和合作编程方面确实大放异彩。与 Js、PHP 或 Python 等语言相比,Go 语言占用内存少,因此也是一种非常适合与无服务器计算搭配使用的语言。

由于机器人为我们打开了新的视野,我们对未来有了一些计划。我们计划重写我们的字数统计工具,使其更高效、性能更好,我们还可以用它来预热缓存(向缓存中填充数据)。

希望您能像我写这篇文章一样,喜欢窥探Weglot的技术!

方向图标
探索 Weglot

 110,000 多个品牌都在用 Weglot 翻译自己的网站,赶紧加入吧!

用AI即时翻译你的网站,再通过人工编辑进行优化,几分钟内就能上线。

这篇文章里,我们会聊聊:
火箭图标

准备好开始了吗?

要了解Weglot 强大功能,最好的方式Weglot 亲自体验。免费试用,无需任何承诺。

要Weglot 强大功能Weglot 最好的方式Weglot 亲自体验。立即免费试用,无需任何承诺。

若您尚未准备好连接自己的网站,控制面板中已提供演示网站。

你可能也会喜欢这些文章

没有找到任何内容。
常见问题图标

常见问题

没有找到任何内容。

蓝色箭头

蓝色箭头

蓝色箭头