我编写了一个脚本,用于在发布新Nexus factory image时将更新推送到Pushbullet频道。该页面上前11个设备中的每个设备都有一个单独的通道,我使用相当复杂的脚本来监视更新。完整设置为here(具体为this script),但我将简要总结下面的脚本。 我的问题是:这显然是不正确的做法,因为它很容易受到多个故障点的影响。这样做的更好方法是什么?我更愿意坚持使用Python,但如果它们更简单/更好,我会对其他语言开放。
(这个问题是因为我今晚更新了我的apache 2.4配置,它显然触发了mvn -Drat.skip=true package
观看的本地文件输出的轻微变化,因此所有11个频道得到了一个错误的更新推送给他们。)
基本脚本功能(不包括一些不必要的部分):
urlwatch
urlwatch
以检查更新,将输出保存到临时文件 我在输入此问题时的想法:可能的解决方案是将每个当前版本字符串(例如:str(soup.select("h2#" + dev + " ~ table")[0])
)保存为pickle变量,然后{{strong> 1}}检测到它会将新版本字符串与腌制字符串进行比较的差异,只有在它们不同的情况下才会推送?我也会抛出正则表达式匹配,以确保新格式与旧格式匹配并且只是更新了数据,但这至少可以成为一个很好的临时措施,以防止将来出现误报吗?
答案 0 :(得分:0)
刮擦本质上是脆弱的,但如果它们不改变源格式,在这种情况下它应该非常简单。您应该将网页解析为数据结构。使用bs4就可以了。最终结果应该是python字典:
{
'mantaray': {
'4.2.2 (JDQ39)': {'link': 'https://...'},
'4.3 (JWR66Y)': {'link': 'https://...'},
},
...
}
使用json.dumps
保存此结构。现在,每次解析页面时,您都可以生成类似的数据结构,并将其与磁盘上的数据结构进行比较(每次完成后更新已保存的数据)。
然后剩下的唯一部分是比较数据结构。您可以迭代所有模型,并检查当前版本的页面中的每个版本是否都存在于先前版本中。如果没有,你有一个新版本。
您还可以使用https://www.kimonolabs.com/为此生成易于使用的API,而不是自己进行解析。