amazon lambda 适合网页抓取吗?
Posted
技术标签:
【中文标题】amazon lambda 适合网页抓取吗?【英文标题】:Is amazon lambda suitable for web scraping? 【发布时间】:2015-05-03 17:32:56 【问题描述】:如果我创建一个函数来获取网页。它会在每次执行时在不同的 IP 上执行它,这样我的抓取请求就不会被阻止吗?
【问题讨论】:
从被抓取网站的角度来看,您所做的是恶意的。抓取可能会对 Web 服务器造成破坏性和代价高昂的负载,而您遇到的 IP 过滤就是一种防御措施。如果你成功地绕过了那个防御,你会给别人带来很多钱和恶化。 从用户的角度来看,有时抓取是必要的,因为网站未能提供一致的 API 或通知系统。并非所有爬虫都是恶意的 【参考方案1】:我会使用这个 AWS 管道:
在左侧的源代码中,您将拥有一个带有JAUNT 的 EC2 实例,然后它将 URLS 或 html 页面馈送到 Kinesis Stream。 Lambda 将解析您的 HTML,并通过 Firehose 将所有内容放入 S3 或 Redshift。 JAUNT 可以通过具有旋转 IP 的标准 WebProxy 服务运行。
【讨论】:
【参考方案2】:是的,lambda 默认使用随机 IP 执行。您可以使用事件桥之类的东西来触发它,这样您就可以安排每小时或类似的时间执行脚本。其他人可能会推荐使用 API Gateway,但是,公开可供任何人触发的 API 端点是非常不安全的。因此,您必须编写额外的逻辑来通过硬编码标头或说 oauth 来保护它。
【讨论】:
【参考方案3】:AWS Lambda 没有提到的固定 IP 源 here 但是,我想这会在它冷却下来时发生,而不是在同一次调用期间。
【讨论】:
【参考方案4】:当文件被放置在 S3 中,或者数据被添加到 Kinesis 或 DynamoDB 时,Lambda 会被触发。这通常与网络爬虫的需求相反,尽管像 S3 这样的东西肯定可以作为队列/作业运行器执行。
抓取不同的 IP?当然 lambda 部署在许多机器上,尽管这实际上对您没有帮助,因为您无法控制机器或它们的 IP。
【讨论】:
不控制 IP 确实有帮助,这正是您想要的——每次调用抓取作业时都有一个新 IP,对吗?此外,s3、kinesis 和 dynamoDb 并不是运行 lambda 函数的唯一选项。您可以使用 sdk 或 cli 按需调用 lambda 函数。您可能有一个程序从 SNS/SQS 读取“抓取作业”,然后调用 lambda 函数来执行抓取。 不控制 IP 地址意味着您最终可能会收到来自同一 IP 的所有查询,或者随机来自被阻止的 IP,并且您无法从池中删除这些查询。 @nackjicholson 啊,我明白了。绕过屏幕抓取禁令可能不是亚马逊试图用 Lambda 解决的问题:) API 网关可以触发 AWS Lambda。 您也可以定期自动触发(预定事件)docs.aws.amazon.com/lambda/latest/dg/with-scheduled-events.html 此外,为了获得简单的 lambda 体验,请查看 Serverless serverless.com以上是关于amazon lambda 适合网页抓取吗?的主要内容,如果未能解决你的问题,请参考以下文章