Python抓取只能通过Google OAuth登录访问的数据

时间:2019-01-01 14:11:25

标签: python web-scraping oauth-2.0 beautifulsoup python-requests

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

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

我基本上是菜鸟,只懂一些基本的编码和谷歌搜索。我到处都看过,但好像我看错地方了。我试图用selenium编写代码来自动完成点击,传递用户名/密码,然后执行登录,但是显然,selenium不是正确的工具,因为它会打开浏览器并执行操作。

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

这里有人可以显示一下,或者至少让我指出正确的工具/库/方法。或idk甚至有可能吗?

谢谢

2 个答案:

答案 0 :(得分:0)

我知道很难从登录页面后面的此类网站中抓取数据。您将需要学习通过Python的请求库发送到服务器的请求的基本复制。一开始可能会令人生畏,但您可以step by step here学到它。

答案 1 :(得分:0)

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

问题陈述的重申

您要求的是您的抓取工具(第三方客户端)通过google oauth(授权服务器),访问您的特定帐户(资源所有者)有权查看的资源。

这听起来像三足誓言。

"OAuth2 Simplified" is a nicely written article by Aaron Parecki 概括介绍了客户端资源所有者资源服务器授权的角色服务器在三足oauth过程中。

另一个要求(根据我的推断)是授权服务器资源不信任您实施/验证的客户端服务器

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

解决方法(粗略通过)

您认为 selenium 是实现身份验证的潜在解决方法。

您准确地发现 selenium 不是大规模抓取的理想解决方案,因为它非常重量级、速度相对较慢且占用大量资源。

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

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

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

我会在实施后提供更多细节。