python - Python 抓取只能通过 Google OAuth 登录访问的数据
问题描述
我想从使用 Google OAuth 进行身份验证的网站上抓取一些数据。某些数据只有在我执行登录时才能访问。
基本上,当您打开网站 (mamikos.com) 并单击登录时,没有正常登录表单的选项,它将为您提供使用 facebook 或 google 登录的选项。然后它会将您重定向到谷歌登录页面。使用谷歌帐户登录后,您将被重定向到网站的主页,只需单击一下即可轻松访问所有数据。
我基本上是一个菜鸟,只知道一些基本的编码和谷歌搜索。我到处都看过,但似乎我找错了地方。我尝试使用 selenium 编写代码来自动单击、传递用户名/密码并执行登录,但显然,selenium 不是正确的工具,因为它会打开浏览器并执行这些操作。
是否可以在后台执行此登录和身份验证过程?我得到了超过十万个需要数据的页面的 URL。使用 selenium 会使我的计算机崩溃,并且需要很长时间才能完成。
有人可以在这里展示或至少将我指向正确的工具/库/方法。或者 idk 甚至有可能吗?
谢谢
解决方案
请注意,这个答案目前正在进行中 - 我正在处理(几乎)完全相同的问题,(不同的站点,我将使用 go),但我可以提供一个粗略的解决方法来开始,并且当我的解决方案成熟时,我会更新它。
重申问题陈述
您要求的是一种让您的抓取工具(第三方客户端)通过 google oauth(授权服务器)对网站(资源服务器)进行身份验证的方法,以访问您的特定帐户(资源所有者)有权查看的资源。
这听起来像是三条腿的誓言。
“OAuth2 Simplified”是 Aaron Parecki 撰写的一篇写得很好的文章,对三足 oauth 过程中的客户端、资源所有者、资源服务器和授权服务器的角色进行了广泛的概述。
另一个要求(据我所知)是您正在实施/验证的客户端不受Authorization Server或Resource Server的信任。
这很重要,因为它确实使某些 oauth 流无法使用,并且可能意味着各种 oauth 客户端库/包不可行,因为它们可能无法为不受信任的客户端实现流。
解决方法(粗略通过)
您确定selenium
了实现身份验证的潜在解决方法。
您准确地确定这selenium
不是大规模抓取的好解决方案,因为它非常重量级,相对较慢,并且使用大量资源。
话虽如此,您只需要selenium
在此过程中使用一次 - 自动化 oauth 过程以获取访问令牌以使用该网站。
获得令牌后,您可以丢弃 selenium 实例并使用您最喜欢的高性能抓取库来执行其余任务。从那里,您可以将令牌附加到您的请求并获得访问权限。
这篇博客文章使用 JS selenium API 广泛描述了这种方法(在“使用自动化 UI 测试通过授权代码授予获取访问令牌”下)
一旦我实施它们,我将提供更多细节。
推荐阅读
- python - 在 super() 上使用 **kwargs 会给我属性错误
- angular - TypeError:无法读取未定义的属性“类型”
- kotlin - 如何将 Kotlin 范围内的所有整数值相乘?
- ios - 将数据从原生 iOS 应用程序传递到 Unity 应用程序
- node.js - 即使提供了正确的详细信息,用户登录也会失败
- python - 替换文件中的特定内容
- android - recyclerviewdemo.ContactsFragment.onCreateView 中的运行时错误
- logging - NestJS:如何为不同环境设置全局日志级别
- python - 如何通过Python对目录中的多个值进行排序
- entity-framework - tinymce 中的自动上传为 iformfile 返回 null?