Skip to content

AI编程自学网

ai2opencode您的编程助手

Menu
  • 网站首页
  • WordPress专栏
  • 程序员内功
  • 副业和涨工资
  • Windows11
Menu

程序员赚钱教程之我如何免费构建精酿啤酒搜索引擎

Posted on 2022年1月4日 by ai2opencode

精酿啤酒很好吃。贵的好吃。当我第一次来到新加坡时,我被介绍到精酿啤酒的奇妙之处。来自马来西亚,我被这里可用的选择数量宠坏了。
很快,我和我的朋友们就陷入了精酿啤酒的热潮,但有一个问题——精酿啤酒相对昂贵。
在一个节俭的家庭中长大,我会花几个小时上网浏览,寻找最物有所值的东西。过程超级累,慢慢变成了挫败感。
于是我想,为什么不为精酿啤酒创建一个搜索引擎呢?

前言

我正在分享我关于如何创建 Burplist 的决定和思考过程,这是一个快速简单的精酿啤酒搜索引擎。
我没有在这篇文章中猛烈抨击代码示例,而是写了一篇关于如何以及为什么以这种方式完成工作的高级概述。因此,您可以在本文的不同部分找到有关如何实现某些步骤的专有技术(包括源代码)的文章链接。

目标

我脑子里只有4件事:

  • 搜索必须很快
  • 价格信息必须准确,每天更新
  • 运行网站的成本必须尽可能低(最好是免费的)
  • 不伤害任何网站

带着这 4 个目标,我开始构思和构建Burplist。

来源

那么,我在哪里可以从新加坡在线购买精酿啤酒?
在谷歌上快速搜索“新加坡精酿啤酒”这个词,可以找到几个购买精酿啤酒的网站。除了这些独立的精酿啤酒卖家(Thirsty),本地也有大型电商平台,比如Shopee或Redmart(Lazada)。
杂货店还出售精选的精酿啤酒,通常会提供折扣和促销活动。考虑到这些来源,我们有幸拥有 10 多个不同的站点可供选择。
让我们跳到技术堆栈上。

网络爬虫

作为目标的一部分,搜索功能必须很快。考虑到这一点,我们必须将信息存储在我们的服务器上,而不是按需查询价格信息。
在这里,我选择在非互联网高峰时段使用网络抓取来收集信息。然后将信息存储在托管数据库中,允许用户以相对快速的方式从中查询数据。

Python Scrapy

Burplist 有超过 10 个独特的爬虫(蜘蛛)。每个爬虫负责从特定站点提取信息。网络爬虫是使用Scrapy 构建的,这是一个非常快速和强大的 Python 网络爬虫框架。它在中大型项目中效果非常好,并且可以相对轻松地扩展。尽管如此,它确实有自己的一些学习曲线。
网页抓取会产生非常不一致和意想不到的结果,需要大量的后处理和清理。Scrapy 有一个内置的项目管道概念,它简化了我们找到的信息的后处理。这成为 Scrapy 被选为这个项目的一个重要原因。

在 Burplist,Scrapy 管道用于:

  • 清洁数据。跨多个源标准化数据可能很乏味
  • 验证数据。确保保存的项目(信息)包含某些字段
  • 检查重复项
  • 在我们的数据库中存储项目

Python 成为这个项目的主要编程语言,主要是因为我们使用了 Scrapy。

遵守速率限制

网络抓取的第一条规则是不对网站造成伤害。本着这种精神,爬虫计划每天在非高峰时段和非高峰时段运行一次。
除此之外,我确保爬虫始终遵守速率限制,以避免用不必要的请求攻击站点。
由于开发工作是一个迭代过程,我们会无意中增加我们正在抓取的站点的服务器负载。为了避免这种行为,可以使用 HttpCacheMiddleware 来缓存我们的爬虫发出的每个请求。

托管、数据库和调度程序

该项目必须尽可能便宜地运行,最好对所有人免费,包括我自己。
考虑到这一点,我立即将头转向Heroku。作为一名开发人员,Heroku 一直是我的救星,Heroku 的免费套餐非常慷慨。使用经过验证的信用卡,任何 Heroku 用户每月都可以获得总计 1,000 小时的免费 dyno 小时。

我已经证明对云部署Scrapy蜘蛛免费更全面的步骤

Heroku 调度器

Burplist 使用免费的Heroku Scheduler附加组件在非高峰时段每天运行爬虫程序,以保持价格信息的新鲜度。Heroku Schedule 的使用量计入我们每月使用的 dyno 小时数,如前所述,对于我们的用例来说,这在技术上是免费的。
Burplist 的爬虫基本上需要大约一个小时才能完成他们的工作,这意味着我们每个月只使用大约 30/1,000 个免费的测功小时。
尽管 Heroku 声称调度程序不保证作业会按时执行或根本不保证,但到目前为止,我从未遇到过任何问题。

Heroku PostgreSQL

PostgreSQL 一直是我使用关系数据库的首选,主要是因为我最熟悉它。由于信息的存储方式(结构化数据),我选择为此项目使用关系数据库。
在云托管数据库解决方案方面,Heroku Postgres的 Hobby Dev 层为我们提供了 10,000 行的限制。当我们存储我们报废的每个项目的定价历史时,毫无疑问,10,000 行的限制很快就会被超过。
为了控制行限制,垃圾收集器服务每周运行(使用 Heroku 调度程序)以移除零售商移除的陈旧产品。好吧,无论如何我们对那些陈旧的数据没有用。
迄今为止,我们还没有超过这个限制。考虑到可扩展性,在不久的将来扩展 Heroku PostgreSQL 不会成为大问题。在任何情况下,如果情况变得严重,我们都可以轻松切换到AWS RDS。

Web 应用程序,前端 UI

作为后端开发人员,前端 Web 开发并不是我的强项。对于这个项目,我想尽快向公众公开。

虽然之前版本的 Burplist 没有最好的 UI 或任何接近于被称为好看的东西,但它纯粹是用 Python 制作的。
该网络应用程序是使用PyWebIO 制作的,它是Steamlit和Anvil的替代品。我只用 Python 和 Markdown 构建了一个简单的交互式 Web 应用程序,没有使用任何 HTML 和 CSS。凉爽的。该 Web 应用程序也托管在 Heroku 上。由于 Burplist 每天运行 24 小时,因此我们只会消耗 744/1,000 的免费测功小时。
太好了,我们让每个人都免费运行该网站。请随意在此处查看前端存储库。

监控和记录

开发 Burplist 时面临的主要挑战之一是不断变化的网站结构。今天,网站总是要进行设计(HTML、CSS)更改以改善用户体验。
在这种情况下,我们的爬虫会遇到提取信息的方式突然改变的情况。在这个项目中,我们使用Sentry来监控我们的网络爬虫给出的任何错误。对于我们的使用,Sentry 实际上是免费的,并且非常容易与 Scrapy 或任何 Python 项目集成。
至于日志记录,我使用的是 Heroku 提供的Coralogix Logging插件。

冷启动和停机时间

使用 Heroku 的免费套餐及其免费 dyno 小时的主要缺点之一是,如果该站点在 30 分钟内没有收到任何流量,它将休眠。因此,当新用户访问 Burplist 时,他们会遇到冷启动。这是一种可怕的用户体验。

Kaffeine

为了解决这个问题,您可以使用Kaffeine,它每 30 分钟 ping 一次 Heroku 应用程序,这样它就永远不会进入睡眠状态。或者,您可以制作自己的网站 ping-er。

正常运行时间机器人

对于 Burplist,我使用的是UpTimeRobot,这是一种免费的网站监控服务,可以在网站出现故障时提醒网站所有者。
幕后发生的事情是 UpTimeRobot 每 5 分钟就会 ping Burplist。太好了,现在我们有一个监控服务和一个站点 ping-er!

代理人

在抓取大型电子商务网站时,我们经常会遇到反抓取对策。我没有构建我们自己的代理基础设施来解决这个问题,而是使用 Scraper API 来抽象管理我自己的代理的所有复杂性。
同样,成本在这里起着重要作用。Scraper API提供的免费层适合我这里的用例。

闭幕式

我喜欢构建副项目。我创建 Burplist 是因为我不得不浏览多个网站以获得我最喜欢的精酿啤酒的最优惠价格。我花了大约 6 周的时间来完成构建 MVP。
我很高兴我的网站启动并运行,除了域名之外几乎没有任何费用。作为生产力应用程序的忠实粉丝,我当然希望这有助于为人们节省大量时间。
如果您对数据科学感兴趣并且对处理一些图表感兴趣,请告诉我!我很乐意分享我所拥有的。

Related posts:

  1. 为什么 Python 是 Web 开发的好选择
  2. 现代 Web 应用程序正在取代您最喜欢的桌面应用程序
  3. 在学习 Python 的同时赚钱的 9 种简单方法
  4. 为什么 Python 成为移动应用开发的绝佳选择?

发表评论 取消回复

您的电子邮箱地址不会被公开。 必填项已用*标注

工具区

繁体中文

近期文章

  • Windows11教程大全之Windows 11到底是什么
  • Windows 11 的第一个大更新来了:2022年新增6大新功能
  • Chrome 控制台实用程序开发 之 09 monitor(function) 监视窗口对象上的所有调整大小事件
  • Chrome 控制台实用程序开发 之 08 keys(object) 监视窗口对象上的所有调整大小事件
  • Chrome 控制台实用程序开发 之 07 keys(object) 获取数组key值

近期评论

  1. J1o! - V2EX-Flutter 您应该选择哪个 IDE/编辑器?(Android Studio VS Code Intellij IDEA)发表在Flutter 您应该选择哪个IDE/编辑器?(Android Studio VS Code Intellij IDEA)
  2. 编程书籍推荐之《Think Like a Programmer: An Introduction to Creative Problem Solvin》 - AI编程自学网发表在如何解决任何编程问题

    推荐文章

    1. 为什么 Python 是 Web 开发的好选择
    2. 现代 Web 应用程序正在取代您最喜欢的桌面应用程序
    3. 在学习 Python 的同时赚钱的 9 种简单方法
    4. 为什么 Python 成为移动应用开发的绝佳选择?
    • 0经验开发
    • Access
    • adsense
    • Android
    • App开发赚钱
    • AWS云计算
    • Chrome
    • Chrome 控制台实用程序开发
    • CSS
    • CSS 基础教程
    • Flutter
    • Flutter基础
    • Flutter杂谈
    • HarmonyOS 鸿蒙
    • HarmonyOS基础
    • HTML
    • HTML基础
    • HTML技巧
    • JavaScript
    • JavaScript 基础
    • JavaScript 技巧
    • JavaScript 简介
    • JavaScript问答
    • oracle
    • oracle
    • pandas教程
    • PHP
    • PHP 杂谈
    • Python
    • Python实战
    • Python技巧
    • Python杂谈
    • SEO 技巧
    • Tiktok抖音小程序
    • UI设计
    • Web编程
    • Windows11
    • WordPress
    • WordPress 部署云主机VPS
    • WordPress 问答
    • WordPress 问答已解决
    • WordPress 问答未解决
    • WordPress使用技巧
    • WordPress插件
    • WordPress杂谈
    • WordPress盈利
    • Wordpress配置
    • WorPress建站技巧
    • 云服务推广
    • 云计算
    • 人工智能与机器学习
    • 低代码与无代码
    • 信息论基础
    • 元宇宙
    • 副业和涨工资
    • 副业技巧
    • 在线课程
    • 学习编程技巧
    • 小程序
    • 建站指南
    • 微服务架构
    • 微软
    • 思想类
    • 技术文章技巧
    • 技术潮流
    • 技能考试
    • 抖音小程序
    • 教育信息化
    • 数据库
    • 未分类
    • 程序员内功
    • 程序员装备
    • 经典书籍学习
    • 编程书籍推荐
    • 编程书籍推荐
    • 编程人生
    • 编程历史
    • 编程市场研究
    • 编程思想
    • 编程意义
    • 编程组件
    • 编程能力提高
    • 编程语言
    • 编程面试与工作
    • 腾讯云
    • 视频博主
    • 计算机科学中的数学
    • 读书笔记
    • 软件估价
    • 软考
    • 通识知识
    • 销售 API
    • 阿里云
    • 高级信息系统项目管理师
    • 高级系统架构设计师

    Discord JavaScript SpringBoot windows11 元宇宙 微服务 程序员内功 计算机视觉 问题未解决

    登录
    © 2022 AI编程自学网 | Powered by Minimalist Blog WordPress Theme