ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

使用Power Automate Cloud抓取网页

2023-07-26 18:21:22  阅读:513  来源: 互联网

标签:HTTP JavaScript 脚本


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)

http 连接器

您应该在正文返回中看到html内容。

http 获取网页

如果您收到错误,或JavaScript加载返回,则此方法将不起作用,因为它需要浏览器运行脚本来呈现页面,以下示例是谷歌搜索:

http 谷歌返回


现在我们可以使用3种方法从页面中提取数据:

  1. 子字符串表达式(仅适用于非常简单的页面/提取)
  2. 脚本(更复杂,但必须具有重复的结构)
  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时,我已经做了一个完整的博客,关于它在这里可以做什么。

此连接器可以使用自然语言提示从上下文数据中提取数据。但有一个大问题,上下文数据有令牌/字符限制,因此我们无法发送完整的网页。

gpt令牌错误

令牌大约是一个4个字符的单词,但飞行中计算并不特别容易,所以我选择安全的5000个字符限制。

为了解决这个问题,我们需要与前两种方法中的任何一种相结合,以缩短上下文数据。

在演示示例中,我将查找内容列表,我知道它总是在顶部附近,所以我想从标题开始我的上下文数据(我知道它将永远是相同的)。然后传递接下来的5000个字符。

 

表达

substring(
    body('HTTP')
,
    indexOf(
        body('HTTP')
    ,
        'Vehicle tax rates'
    )
,
    5000
)

我们得到:

 

下面显示了所有方法有多简单(从行动方面):
 


您还可以以不同的方式组合它们,例如gpt连接器转换表,或删除标记标签以减少令牌的脚本

标签:HTTP,JavaScript,脚本
来源:

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有