【问题标题】:Web scraping password protected website using R使用 R 抓取受密码保护的网站
【发布时间】:2015-07-01 07:47:05
【问题描述】:

我想使用 R 抓取 yammer 数据,但首先我必须登录到此页面(这是我创建的应用程序的身份验证)。

https://www.yammer.com/dialog/authenticate?client_id=iVGCK1tOhbZGS7zC8dPjg

一旦我登录到此页面,我就能够获取 yammer 数据,但所有这些都通过标准 yammer url 在浏览器中 (https://www.yammer.com/api/v1/messages/received.json)

我已经阅读了类似的问题并尝试了建议,但仍然无法解决这个问题。

我尝试过使用 httr、RSelenium、rvest+Selector 小工具。

这里的最终目标是在 R 中做所有事情(获取数据、清理、情感分析......清理和情感分析部分已经完成,但目前获取数据部分是手动的,我想通过处理来自动化它它来自 R)

1.使用httr试用:

usinghttr<- GET("https://www.yammer.com/dialog/authenticate?client_id=iVGCK1tOhbZGS7zC8dPjg",
     authenticate("Username", "Password"))

相应的结果:响应 [https://www.yammer.com/dialog/authenticate?client_id=iVGCK1tOhbZGS7zC8dPjg] 日期:2015-04-27 12:25 状态:200 内容类型:文本/html;字符集=utf-8 大小:15.7 KB 该页面内容显示已打开登录页面但未验证。

2.Trial using selector gadget + rvest

我尝试使用此方法抓取维基百科,但无法将其应用于 yammer,因为在调用 selctor 小工具提供的 html 标记之前需要进行身份验证。

3.使用RSelenium试用

使用标准浏览器和 phantomjs 进行了尝试,但出现了一些错误

> startServer()

remDr

remDr$open() [1]“连接到远程服务器” RCurl 调用中的未定义错误。 queryRD(paste0(serverURL, "/session"), "POST", qdata = toJSON(serverOpts)) 出错:

> pJS <- phantom()

phantom() 中的错误:找不到 PhantomJS 二进制文件。

【问题讨论】:

  • R 在这方面真的不是很好,你最终会跳过一些痛苦的箍。对于 Python 或 C# 或其他更常见的自动化语言,所有这些可能都已解决。您应该考虑使用 Python 创建数据文件,并让 R 读取它们。
  • thx Mike,我看到 python 中有一个名为 yampy 的包专门用于 yammer,但现在我想知道我是否可以使用 R 获得一个快速而肮脏的解决方案,完全同意你认为 python 会提供更强大的解决方案(python 在我的“下一步要学习”列表中)
  • Python 并不难。语法有点奇怪(如果你在同一个文件中混合制表符和空格,上帝会帮助你),但 Python 可能是最容易学习和最通用的语言之一。值得学习。
  • 介意我把这个建议写成答案:)
  • 您说您尝试了“httr,RSelenium,rvest+Selector gadget”,但您没有显示您尝试过的内容。

标签: r yammer httr rvest rselenium


【解决方案1】:

我还花了很长时间设法从 R 内部访问受密码保护的网站。 最后,我设法通过将凭据作为 html 表单提交来做到这一点。 我快速浏览了 Yammer 上的登录页面,这似乎与我设法访问的情况相似。

这是我使用的代码。您需要根据您的上下文对其进行调整:首先在登录页面上启动一个会话,然后访问收集 ID 和密码的表单,最后提交表单。 我认为在你的情况下,下面的代码会起作用:

session <- html_session("https://www.yammer.com/dialog/authenticate?client_id=iVGCK1tOhbZGS7zC8dPjg")
    login_form <- session %>% html_nodes("form") %>%
    .... %>%  #Instructions that lead you to the login form, e.g. extract2(1)
                    html_form() %>%
                    set_values(`login` = YourId,`password` = YourPasswd)  
     Logged_in=session %>%  submit_form(login_form))

logged_in 应该包含登录后的会话信息。

BR

【讨论】:

    【解决方案2】:

    你想用这个来达到什么目的?如果您只是想收集数据,那么您可以随时使用数据导出 API 来下载网络数据以进行分析。这需要企业网络。

    【讨论】:

    • 这是我没有该特定页面的管理员帐户/管理员的限制,使用管理员帐户可以很容易地使用数据导出 API 下载网络数据(我只是网络的一员,所以有最基本的访问权限)
    • 难道你不能用 Bearer Token 访问普通的 api 来获取你可以访问的尽可能多的数据吗?
    • 所以这会像这样流动。 1. 创建一个应用程序 (yammer.com/client_applications 2. 按照此处的说明developer.yammer.com/v1.0/docs/test-token 获取令牌以开始对此处developer.yammer.com/v1.0/docs/rest-api-rate-limits 的公开记录的 api 进行 API 调用
    • 嘿,布赖恩,我已经完成了上述操作,即创建 yammer 应用程序并获取访问令牌,我可以通过使用令牌进行 api 调用来获取浏览器中的所有网络提要,但我想要什么要做的是,我想通过 R 完成所有这些操作,即使用 R 进行这些 api 调用,以便我将数据直接输入 R,而不是将其输入我的浏览器 - 将其存储在文本文件中 - 然后将这些文件读入 R . 总而言之,我想使用 R link 进行以下调用 我可以在我的浏览器中执行此操作并获取数据
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多