小编iPr*_*ate的帖子

在R中使用rvest跟随页面重定向

我是R和rvest的新手.我正在尝试使用这些来从网站(www.medicinescomplete.com)获取信息,该网站允许使用雅典学术登录系统登录.在浏览器中,当您单击雅典登录按钮时,它会将您转移到雅典登录表单.提交用户凭据后,表单然后将浏览器重定向回原始站点,但登录后.

我使用submit_form()函数将凭据提交到athens表单,这将返回200代码.但是,R不像浏览器那样遵循重定向,如果我使用jump_to()命令返回到原始站点,则它不会登录.我怀疑登录页面返回的重定向链接可能包含登录我需要的凭据,但我不知道如何找到链接并使用rvest发送它

有没有人弄清楚如何使用rvest通过雅典登录或有任何想法如何使其遵循自动重定向?

我用来做到这一点的代码是(登录凭据已更改):

library(rvest)
library(magrittr)

url <- "https://www.medicinescomplete.com/about/"
mcsession <- html_session(url)
mcsession <- jump_to(mcsession, "/mc/athens.htm?   uri=https%3A%2F%2Fwww.medicinescomplete.com%2Fabout%2F")
athensform <- html_form(mcsession)[[1]]
athensform <-set_values(athensform, ath_uname = "xxx", ath_passwd = "yyy")
submit_form(mcsession, athensform)
jump_to(mcsession, "https://www.medicinescomplete.com/mc/bnf/current/")
Run Code Online (Sandbox Code Playgroud)

我为submit_form()步骤获得了200个代码,但是跳转到最后一行的403禁止代码.

然后我将submit_form步骤传送到html()并打印出来.从我可以看出它是一个成功的登录,但在主页的正文中有一行指的是重定向回原始网站.整个页面的html太长而无法发布,但相关的位似乎是:

<div style="padding: 8px;" id="logindiv">
                        <form method="POST" action="https://www.medicinescomplete.com/mc/athens">
                            Please wait while we transfer you. <br><noscript>JavaScript disabled, please<input type="submit" value="click here" style="border:none;background:none;text-decoration:underline;color:#E27B2F;">
Run Code Online (Sandbox Code Playgroud)

我想知道以下这个位是否引用了一些登录密钥:

<input type="hidden" name="TARGET" value="https://www.medicinescomplete.com/about/" style="display:none"><input type="hidden" name="RelayState" value="https://www.medicinescomplete.com/about/" style="display:none"><input type="hidden" name="SAMLResponse" value="PFJlc3BvbnNlIHhtbG5zPSJ1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6cHJvdG9jb2wiIHhtbG5zOnNhbWwyPSJ1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6YXNzZXJ0aW9uIiBEZXN...
Run Code Online (Sandbox Code Playgroud)

啊哈!在页面的下方是这样的:

<script>
window.onload = function() { document.forms[0].submit(); }
</script>
Run Code Online (Sandbox Code Playgroud)

我认为该窗口旨在自动提交另一个执行帖子到原始drugscomplete.com网站的表单,以使用隐藏字段作为登录凭据进行身份验证.但是,在尝试使用此页面上的submit_form()时,我似乎没有进一步了解!我添加了以下行来尝试找出正在发生的事情:

> submit_form(mcsession, athensform) …
Run Code Online (Sandbox Code Playgroud)

login r web-scraping rvest

8
推荐指数
1
解决办法
2437
查看次数

如何更改“ ” R 中的字符到普通空格

我使用 R 进行网页抓取,并且有一个脚本可以复制链接的文本,然后使用该字符串通过 RSelenium 跟踪链接。不幸的是,当我运行脚本时,这似乎不适用于某个特定字符串,但是当我用手动输入的字符串替换保存的字符串时,它工作正常。稍微深入研究一下页面的 html 就会发现其中一个空格字符实际上是一个字符,这就是字符串无法匹配的原因。如何在 R 中替换为普通空格?我尝试使用 stringr 库和 str_replace 命令,如下所示:

var1 <- str_replace(var1, pattern = "&nbsp;", " ")
Run Code Online (Sandbox Code Playgroud)

但这似乎不起作用。我明显做错了什么吗?有没有办法让 R 显示一个字符串,其中所有奇怪的格式字符都可见?

html string r stringr

1
推荐指数
1
解决办法
4992
查看次数

标签 统计

r ×2

html ×1

login ×1

rvest ×1

string ×1

stringr ×1

web-scraping ×1