如何 - 使用 Power Automate Cloud 进行网页抓取
Web 抓取一直是 Power Automate Desktop 的功能,但您知道您也可以使用 Power Automate Cloud 吗?
让我指出几个重要的警告:
云端方法并非适用于所有网站,它仅适用于静态或 PHP 生成的 HTML 文件。任何在客户端渲染的内容都无法正常工作,因此您需要一个无头浏览器或一个完整的浏览器(这就是 Power Automate Desktop 的用武之地)。此外,如果内容非常动态(例如,DOM ID/名称不断变化),处理起来也会非常困难。
另外需要注意的是,网络爬虫总体上存在法律限制,例如,不允许爬取个人信息。此外,由于网站不想被爬取,他们会耍一些花招来阻止(有些网站甚至会嵌入隐藏的个人数据,使爬取行为违法)。
好了,让我来告诉你怎么做。
作为示例站点,我将使用https://www.gov.uk/vehicle-tax-rate-tables,我可能想要提取排放表来更新成本预测、导航到其他页面的链接、上次更新时间或任何其他信息。
为了获取网页,我们将使用HTTP
连接器,并进行最低限度的配置(仅方法和 URL)
您应该会看到主体返回的 html 内容。
如果出现错误,或者 JavaScript 加载返回,则此方法将不起作用,因为它需要浏览器运行脚本来呈现页面,下面的示例是谷歌搜索:
现在我们可以使用 3 种方法从页面中提取数据:
- 子字符串表达式(仅适用于非常简单的页面/摘录)
- 脚本(更复杂但必须具有重复的结构)
- GPT(功能最强大但也面临挑战)
1. 子串表达式
如果可以的话,这种方法是可行的,它工作一致,而且最容易创建。虽然它只需要一个关键的条件才能工作,但你抓取的数据必须具有一致的 DOM 元素(例如<div id="data">
)。
因此,在示例中,如果我们想要排放表,我们很幸运,因为页面上只有一个表,所以我们可以提取 dom 元素<table>
。
</table>
我们在末尾添加了另一个,因为我们用这个作为数据的结尾,所以被截断了
表达
substring(
body('HTTP')
,
indexOf(
body('HTTP')
,
'<table>'
)
,
sub(indexOf(
body('HTTP')
,
'</table>'
)
,
indexOf(
body('HTTP')
,
'<table>'
)
)
)
子字符串需要文本、起始字符号和字符数,因此我们传递 http 正文,使用 indexOf 查找 的字符数<table>
。然后,为了计算返回的长度,我们使用另一个 indexOf 查找</table>
。虽然这返回的是从文本开头开始的字符数,而不是 的开头,所以我们从中<table>
减去字符数。<table>
2.脚本
Power Automate 表达式的功能有限,因此我们可以使用 Office 脚本来扩展其功能。我们无需实际使用 Excel 文件,只需将其用作发送和返回数据的占位符即可。有关 Office 脚本的更多信息,请参阅我之前的博客——如何掌握 Power Automate 脚本。
借助 JavaScript/TypeScript 的强大功能,有多种方法可以提取数据,但最有用的是简单的正则表达式。
假设在我们的例子中我们想要所有的链接(可能传递到另一个网络抓取阶段),我们可以将 http 正文传递给办公室脚本,然后使用正则表达式返回所有链接。
3. GPT
有时候数据或网页结构会过于不规则,这时我们就有应对之策,我已经在这里Create text with GPT
写了一个完整的博客来介绍它能做什么。
此连接器可以使用自然语言提示从上下文数据中提取数据。但有一个大问题:上下文数据存在标记/字符限制,因此我们无法发送完整的网页。
一个标记大约是一个 4 个字符的单词,但它并不是特别容易即时计算,因此我选择安全的 5000 个字符限制。
为了解决这个问题,我们需要结合前两种方法来缩短上下文数据。
在演示示例中,我将查找内容列表,我知道它始终位于顶部附近,因此我希望从标题(我知道标题始终相同)开始我的上下文数据。然后传递接下来的 5000 个字符。
表达
substring(
body('HTTP')
,
indexOf(
body('HTTP')
,
'Vehicle tax rates'
)
,
5000
)
我们得到:
您还可以以不同的方式组合它们,例如使用 gpt 连接器转换表格,或者使用脚本删除标记标签以减少标记
如您所见,在某些情况下可以使用 Cloud Flow 进行网页抓取,但请记住:
- 检查网站是否合法抓取
- 确保场地合适
- 检查您的帐户是否具有足够的 Power Platform API 调用
- 如果使用 GPT,则您有足够的 AI Builder 积分(预览期间免费,但不会持续太久)
- 并且始终有 Power Automate Desktop(这里有很好的博客)