python - 为什么我从不同的位置收到不同的 http 响应?
问题描述
我正在从事一项需要网络抓取 boxofficemojo 网站的任务。
我编写了所有代码,它在我的本地机器上运行良好。
我需要抓取大约 19000 个网址。由于这显然是一个耗时的过程,我不想在我的本地机器上运行它。相反,我想在 aws ec2 实例上运行它。
ec2 实例是 Ubuntu 18.04。我已经验证了 python 版本和脚本中使用的库是否存在以及一切。
但是,如果我尝试
requests.get('http://www.boxofficemojo.com')
,
它给了我 503 响应。如果我打印响应文本,则表示我们现在正在更新站点。 但同样的事情也在我的本地机器上工作。
为什么我在 ec2 实例中会出现这种奇怪的行为。
我尝试通过发出ping命令来测试 ec2 实例内的互联网连接。它工作正常。
解决方案
有公共站点和公共 api 专门阻止来自 ec2 实例(可能还有其他云提供商)的调用。
您尝试抓取的某些站点并非不可能,只需将 ec2 实例 IP 范围列入黑名单,以减少消耗资源的“机器人”……我已经多次遇到过这种情况,对于几个站点。
NBA stats api 是我熟悉的一个例子,但我也遇到过其他的——你正在抓取的网站也可能是其中的一些。
推荐阅读
- javascript - 将带有样式的 React 自定义组件转换为 PDF 并下载文件
- html - 在导航中成为第一张图片
- r - 如何将两种列分组为两列
- javascript - Firebase 身份验证 - 重置密码不显示任何操作 - Javascript
- ruby-on-rails - 如何在 Rails 中向现有用户表单添加多个角色
- stl - sysmac studio 中的 Stl 语言 4bytes 浮动(真实)
- microsoft-teams - 如何将 Power App 添加到 Teams 会议中,读取会议信息?
- vb.net - 在 .CSV 中导出带有多行行的 datagridview
- sql - SQL 选择确切的行
- c++ - 类没有成员函数