proxy - 如何在 AWS Lambda 函数中附加代理以避免“403 禁止错误”?
问题描述
我正在制作一个抓取网站数据并通过 AWS Lambda 函数将其插入到 dynamoDB 的爬虫
有时它工作正常 - 返回我想要的所有数据,状态为 200。有时它不会因为 403(禁止)状态而爬行。
我检查了在 AWS Cloud9 上出现 403 Forbidden 错误的可能性会比在 AWS Lambda 上少:AWS Cloud9 上运行了 100 个函数,并且只有 3 个 Forbidden,AWS Lambda 上运行了 100 个函数和 78 Forbidden。所以我认为我应该尝试使用 AWS Lambda 网络设置做一些事情,比如附加代理或其他东西,但是,我该怎么做呢?
我已经尝试过爬虫的设置,例如:
process = CrawlerProcess({
'USER_AGENT':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/534.55.3 (KHTML, like Gecko) Version/5.1.3 Safari/534.53.10',
'ROBOTSTXT_OBEY':False,
'DOWNLOAD_DELAY': random.randint(1,10),
'DOWNLOAD_TIMEOUT': random.randint(80,150),
'REDIRECT_ENABLED':False,
'SPIDER_MIDDLEWARES' : {
'scrapy.spidermiddlewares.httperror.HttpErrorMiddleware':True
}
})
以前的设置是:
process = CrawlerProcess({
'USER_AGENT': 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)'
})
但这没有区别:在 cloud9 上仍然可以正常工作,有时(很少)在 AWS Lambda 上很好
UPD:我发现我在白天(从大约 8:00 到 22:00)获得 403 禁止状态,而在夜间我大多获得 200 ok 状态,所以我认为这是因为允许和禁止机器人进入的站点权限一天中的不同时段,但为什么通过 AWS cloud9 运行相同的脚本即使在白天也能正常运行,而 AWS lambda 大多不是?
预先为语法道歉
解决方案
推荐阅读
- python - 是否可以通过 Python 直接与 Windows 命令行交互?
- ios - 如何保护我的音乐应用下载的音乐文件?
- javascript - 如何使用“注入令牌”(或其他方式)覆盖 Angular Material 默认选项
- arrays - 空手道 - 如何使用从响应数组接收到的值循环 Soap 请求
- automapper - Automapper,从两个不相关的来源映射
- node.js - 如何在 Handlebars/Mustache 的 #each 块中使用来自另一个对象的数据
- python - 在 Django 中使用过滤器计算字段
- typescript - TypeScript 按任意类型过滤元组类型
- javascript - ReactJS window.print 在取消打印时重新加载
- structure - 将条件嵌套在 Main 中,或者不嵌套条件