首页 > 解决方案 > Python 抓取只能通过 Google OAuth 登录访问的数据

问题描述

我想从使用 Google OAuth 进行身份验证的网站上抓取一些数据。某些数据只有在我执行登录时才能访问。

基本上,当您打开网站 (mamikos.com) 并单击登录时,没有正常登录表单的选项,它将为您提供使用 facebook 或 google 登录的选项。然后它会将您重定向到谷歌登录页面。使用谷歌帐户登录后,您将被重定向到网站的主页,只需单击一下即可轻松访问所有数据。

我基本上是一个菜鸟,只知道一些基本的编码和谷歌搜索。我到处都看过,但似乎我找错了地方。我尝试使用 selenium 编写代码来自动单击、传递用户名/密码并执行登录,但显然,selenium 不是正确的工具,因为它会打开浏览器并执行这些操作。

是否可以在后台执行此登录和身份验证过程?我得到了超过十万个需要数据的页面的 URL。使用 selenium 会使我的计算机崩溃,并且需要很长时间才能完成。

有人可以在这里展示或至少将我指向正确的工具/库/方法。或者 idk 甚至有可能吗?

谢谢

标签: pythonweb-scrapingoauth-2.0beautifulsouppython-requests

解决方案


请注意,这个答案目前正在进行中 - 我正在处理(几乎)完全相同的问题,(不同的站点,我将使用 go),但我可以提供一个粗略的解决方法来开始,并且当我的解决方案成熟时,我会更新它。

重申问题陈述

您要求的是一种让您的抓取工具(第三方客户端)通过 google oauth(授权服务器)对网站(资源服务器)进行身份验证的方法,以访问您的特定帐户(资源所有者)有权查看的资源。

这听起来像是三条腿的誓言。

“OAuth2 Simplified”是 Aaron Parecki 撰写的一篇写得很好的文章,对三足 oauth 过程中的客户端资源所有者资源服务器授权服务器的角色进行了广泛的概述。

另一个要求(据我所知)是您正在实施/验证的客户端不受Authorization ServerResource Server的信任。

这很重要,因为它确实使某些 oauth 流无法使用,并且可能意味着各种 oauth 客户端库/包不可行,因为它们可能无法为不受信任的客户端实现流。

解决方法(粗略通过)

您确定selenium了实现身份验证的潜在解决方法。

您准确地确定这selenium不是大规模抓取的好解决方案,因为它非常重量级,相对较慢,并且使用大量资源。

话虽如此,您只需要selenium在此过程中使用一次 - 自动化 oauth 过程以获取访问令牌以使用该网站。

获得令牌后,您可以丢弃 selenium 实例并使用您最喜欢的高性能抓取库来执行其余任务。从那里,您可以将令牌附加到您的请求并获得访问权限。

这篇博客文章使用 JS selenium API 广泛描述了这种方法(在“使用自动化 UI 测试通过授权代码授予获取访问令牌”下)

一旦我实施它们,我将提供更多细节。


推荐阅读