首页 > 解决方案 > 为什么我从不同的位置收到不同的 http 响应?

问题描述

我正在从事一项需要网络抓取 boxofficemojo 网站的任务。

我编写了所有代码,它在我的本地机器上运行良好。

我需要抓取大约 19000 个网址。由于这显然是一个耗时的过程,我不想在我的本地机器上运行它。相反,我想在 aws ec2 实例上运行它。

ec2 实例是 Ubuntu 18.04。我已经验证了 python 版本和脚本中使用的库是否存在以及一切。

但是,如果我尝试

requests.get('http://www.boxofficemojo.com'),

它给了我 503 响应。如果我打印响应文本,则表示我们现在正在更新站点。 但同样的事情也在我的本地机器上工作。

为什么我在 ec2 实例中会出现这种奇怪的行为。

我尝试通过发出ping命令来测试 ec2 实例内的互联网连接。它工作正常。

标签: pythonamazon-web-servicesamazon-ec2web-scrapingpython-requests

解决方案


有公共站点和公共 api 专门阻止来自 ec2 实例(可能还有其他云提供商)的调用。

您尝试抓取的某些站点并非不可能,只需将 ec2 实例 IP 范围列入黑名单,以减少消耗资源的“机器人”……我已经多次遇到过这种情况,对于几个站点。

NBA stats api 是我熟悉的一个例子,但我也遇到过其他的——你正在抓取的网站也可能是其中的一些。


推荐阅读