[
](brentgaisford.medium.com/?source=pos…)
6月3日
-
7分钟阅读
[
拯救
如何创建一个Python脚本来自动监测在线价格
一份关于建立你自己的网络搜刮器、创建历史价格数据库和电子邮件通知系统的指南,并将其全部设置为持续自动运行。
照片:Engina KyurtonUnsplash
现代世界充满了定价算法,这些算法一直在改变事物的价格。通过建立一个监测这些价格的工具,你可以领先一步,并有信心对大宗采购做出明智的决定。此外,我们将在这里创建的作品也可以适用于所有种类的其他项目。让我们开始吧。
在我的案例中,我想留意Overcast(一个为其他播客销售横幅广告的播客应用程序,以帮助增加他们的听众)的播客广告的价格。下面是该页面顶部的样子。
Overcast的广告页面
重要的是,他们每天在格林尼治标准时间的午夜根据购买和未售出的广告数量来更新他们的定价。我不知道我是否会为我的播客购买广告,与科幻作家交谈并评论书籍(The Hugonauts),但如果我这样做,我肯定想低价购买
所以,让我们来看看好东西--代码。我们首先看一下你构建程序所需要的所有代码,然后再看如何将其全部自动化,在最后持续运行。
导入我们的库。
如果你没有这些库,确保在前进之前安装它们。
刮取网站。
一般来说,下面的代码块做三件事。
- 使用请求从我们的目标网站上抓取HTML
- 使用Beautiful Soup从表中拉出列头和数据行
- 将列头和数据行合并到一个Python字典中(并为我们刮取数据的时间添加一个时间戳)。
上面的代码将是这个程序中最不能通用的部分,因为每个网站的HTML都是不同的(除非你也想搜刮天气预报的数据)。然而,所有的工具和方法都可以在任何网站上使用--如果你感兴趣的网站上也有一个表格的话,不需要做太多的改动。
将我们的数据保存到本地SQL数据库中。
我使用的是我在我的机器上建立的微软SQL本地数据库,但你也可以使用任何其他的数据库、SQLite,或者甚至继续追加到本地csv中,并将其作为某种数据库使用(见这里的上一篇文章中使用的CSV方法)。
sqlalchemy的引擎参数需要更新以符合你的SQL服务器设置。在谷歌上搜索你的特定SQL服务器类型加上 "sqlalchemy引擎",可以找到适合你的特定服务器的好例子。
总结我们的数据,并将其组织到电子邮件的正文中,让我们看到当前的价格与历史价格的对比
拥有所有这些定价数据是很好的 - 但如果我们不使用它,它并不能真正帮助我们做出更好的决定。因此,我们也会每天自动向自己发送一封电子邮件,显示我们可能想要购买广告的三个潜在类别(艺术、小说和科学)的三样东西。
- 今天的价格,以及最近9天的价格
- 历史最低价格
- 平均价格
以下是实现这一目标的代码。因为我们要为三个不同的类别做同样的事情,所以我们先定义函数,然后在三个类别中分别使用它们来组装我们的电子邮件。我们使用email.MIME 库来构建我们的电子邮件正文。
下面是我们的邮件正文到达收件箱时的样子(只显示三天的数据,因为在写这篇文章时,脚本只运行了三天)。

我们所构建的自动化电子邮件的正文
使用SMTP连接到我们的电子邮件服务器并发送我们的信息
请注意,谷歌从5/30/2022 ,不允许用SMTP通过Gmail发送邮件。为了弥补这一点,我设置了一个Hotmail账户作为 "发件人 "的电子邮件,对于这些目的来说,它是完美的。
如果你使用的是Hotmail或outlook电子邮件地址,在添加了你的电子邮件用户名和密码后,下面的代码将为你开箱即用。如果你想使用不同的电子邮件提供商,请查阅你的电子邮件提供商的SMTP设置,找到你在下面第一行smtplib 的代码中需要的网址和端口。
注意 except 分支末尾的 input('Enter any key to quit') 行。这将使我们的程序窗口保持开放,并等待我们的回应,如果电子邮件发送失败,一旦你设置了你的自动化,你可以看到任何产生的错误信息。
我们已经有了工作代码!让我们把它打包,以便我们的电脑可以自己运行它。
我是在Windows上,所以下面的步骤是针对Windows的。Mac用户,你的流程将略有不同--在你得到你的.py文件之后,你将使用Crontab来设置你的任务调度。下面是我们在Windows上的三个步骤。
- 将你的代码保存在一个
.py文件中 - 创建一个.bat文件,指示你的计算机打开你的python环境并执行.py脚本
- 使用你的计算机的任务调度器,按照你选择的时间表运行.bat文件。
好的...
第1步 - 制作.py 文件。
要制作.py ,只需将你的工作代码(例如,上面的所有代码块)粘贴到一个文本编辑器文件中。然后将该文件保存为yourfilename.py 。
记下你保存文件的位置。你可以从终端测试你的.py文件,方法是导航到文件保存的目录并运行下面的代码。
如果它能工作并执行你的脚本,那么到目前为止就很好了
python your_file_name.py
第2步 - .bat文件
你会看到网上有很多文章告诉你跳过这一步,直接用任务调度器来处理.py 文件和python.exe 。不要这样做!
对于绝大多数 Python 用户来说,你的代码将无法运行,因为你的代码不是用基本的 Python 安装来写的--它是在 Conda (或 Anaconda) 的基础上写的,或者你已经 pip'd 了一堆新的库,或者你正在运行一个虚拟环境来处理你的库--这些你的计算机在没有指令的情况下都无法适当地处理。而这正是我们的.bat文件的作用。
如果Windows任务调度程序没有运行你的.py文件,这里是你需要做的。打开你的文本编辑器到一个干净的新文件,然后放入以下代码。
@echo offcall C:\Users\brent\miniconda3\condabin\activate.batcd “D:\Brents_Files\Documents\Python\Monitoring_Overcast_ad_pricing”python overcast_price_monitor.py
调用行告诉你的计算机使用什么环境来打开文件。在我的例子中,我使用Conda但不是虚拟环境(还没有)--所以我指向激活Conda的.bat文件。
cd 这一行应该指向你保存.py文件的目录,最后调用python的那一行也需要用你选择的文件名来更新。
保存这个以.bat结尾的文本文件,你就差不多完成了!要测试你的文件,请双击.bat 文件,它应该一直运行下去。
如果它失败了,你需要在进行任何进一步操作之前进行调试。注意,如果双击它在文本编辑器中打开它,这并不意味着你的文件不能工作--这只是意味着你已经告诉你的计算机在文本编辑器中打开.bat ,而不是运行它们。你可以从你的终端执行你的.bat 文件来代替它进行测试。
设置任务自动化,以便经常性地运行我们的脚本
我是在Windows上,所以我将使用任务调度器。对于Mac用户,你将使用Crontab来代替。
点击开始按钮并搜索 "任务调度器"。

如何打开Windows任务调度器
现在,在右手边的窗格中,点击 "创建任务...
Windows任务调度器创建任务
命名你的任务,为自己写一个描述--最重要的是选中 "以最高权限运行 "的选项当你完成这些步骤后,进入 "触发器 "选项卡。
Windows任务调度器的截图和说明
在触发器选项卡上,点击 "新建",设置你希望任务运行的时间和频率的参数。
没有触发器页面的截图,因为它是相当不言自明的。接下来,点击 "行动 "选项卡。
Windows任务调度器行动选项卡说明
在 "行动 "选项卡上,点击 "新建"。在出现的弹出窗口中,要么在 "程序/脚本 "栏中输入你创建的.bat文件的完整路径(包括文件名),要么点击浏览并导航到.bat文件并点击确定。
然后,在 "在(可选)领域启动 "中,输入.bat文件所在文件夹的路径。我知道这似乎是重复的,但Windows似乎都需要。
这就是了!再也不用为网上购物支付太多费用了。
祝你们编码愉快。