使用Power Automate Cloud抓取网页
作者:互联网
Web抓取一直是Power Automate Desktop功能,但您知道您也可以使用Power Automate Cloud吗?
让我举出几个重要的注意事项:
云方法并不适用于所有网站,它仅适用于静态或php生成的html文件。客户端上渲染的任何内容都不起作用,因此您需要无头浏览器或完整浏览器(这就是Power Automate Desktop发挥作用的地方)。此外,如果内容非常动态(即不断更改dom id's/names),也可能非常困难。
另一件需要注意的关于整个网络抓取的法律限制,例如不允许抓取个人信息。此外,由于网站不想被抓取,他们玩一些技巧网站来阻止它(一些甚至嵌入了隐藏的个人数据,使抓取成为非法)。
顺便说一句,让我告诉你怎么做。
作为一个示例网站,我将使用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 Scripts扩展其功能。我们不需要实际使用Excel文件,只需将其用作位符来发送和返回数据。有关Office Script的更多信息,请查看我之前的博客-如何掌握Power Automate脚本。
借助JavaScript/TypeScript的力量,有多种方法可以提取数据,但最有用的是一个简单的正则表达式。
假设在我们的示例中,我们希望所有链接(可能传递到另一个网络抓取阶段),我们可以将http正文传递给办公室脚本,然后该脚本使用正则表达式返回所有链接。
空的excel文件与以下脚本一起使用
3.GPT
在某些情况下,数据或网页结构太不规则,当我们有一个王牌,Create text with GPT
时,我已经做了一个完整的博客,关于它在这里可以做什么。
此连接器可以使用自然语言提示从上下文数据中提取数据。但有一个大问题,上下文数据有令牌/字符限制,因此我们无法发送完整的网页。
令牌大约是一个4个字符的单词,但飞行中计算并不特别容易,所以我选择安全的5000个字符限制。
为了解决这个问题,我们需要与前两种方法中的任何一种相结合,以缩短上下文数据。
在演示示例中,我将查找内容列表,我知道它总是在顶部附近,所以我想从标题开始我的上下文数据(我知道它将永远是相同的)。然后传递接下来的5000个字符。
表达
substring(
body('HTTP')
,
indexOf(
body('HTTP')
,
'Vehicle tax rates'
)
,
5000
)
我们得到:
下面显示了所有方法有多简单(从行动方面):
您还可以以不同的方式组合它们,例如gpt连接器转换表,或删除标记标签以减少令牌的脚本
标签:HTTP,JavaScript,脚本 来源: