发送表达到网站领域返回动态结果(图片)

时间:2014-12-19 20:37:41

标签: r rcurl httr

我最近问了一个类似的问题:Send expression to website return dynamic result (picture)并得到了一个非常响应,它不需要将表达式发送到网页的字段,而是使用URL来完成工作。

我发现了一个better regex visualizer(G. Grothendieck指出)因为它可以设置为基于Python(更接近R;例如它允许像(?<=foo)这样的后观点http://www.regexper.com/抛出错误)。

使用此正则表达式:"(?<=foo)\\s*foo[A-Z]\\d{2,3}"我想使用R发送(?<=foo)\s*foo[A-Z]\d{2,3},将下拉菜单设置为Python,然后打开或返回可视结果,如下所示:

enter image description here

同样的网址技巧在这里不起作用,因为在输入表达式时URL不会改变,而嵌入式JavaScript会返回结果。

MWE

## Expression
x <- "(?<=foo)\\s*foo[A-Z]\\d{2,3}"

1 个答案:

答案 0 :(得分:5)

您无法通过网址操纵页面的javascript状态,因此您需要在可以与RSelenium交互式页面交互的环境中工作,如果您想与表单互动。但那可以开辟另一种蠕虫病毒。鉴于他们希望您为他们的服务付费,他们可能不会太热衷于自动抓取。

据我所知,他们没有正式记录的API,但当您点击&#34;分享&#34;在该站点上的链接,它向其服务器提交一个JSON对象以获得可共享的URL。有效载荷看起来像

{"title":"Untitled Regex",
"description":"No description",
"regex":"(?<=foo)\\s*foo[A-Z]\\d{2,3}\n",
"flavor":"python",
"strFlags":"",
"testString":"My test data",
"unitTests":"[]",
 "share":true}

因此,如果您绕过UI并直接发布该JSON内容,则可以获取可用于浏览以查看结果的唯一代码。这看起来像

payload<-list(title="Untitled Regex",
    description="No description",
    regex="(?<=foo)\\s*foo[A-Z]\\d{2,3}\n",
    flavor="python",
    strFlags="",
    testString="My test data",
    unitTests="[]",
    share=TRUE)

library(httr)
library(jsonlite)

rr <- POST("https://www.debuggex.com/api/regex", 
    body=lapply(payload, unbox), encode="json")
url <- paste0("https://www.debuggex.com/r/", content(rr)$token)
browseURL(url)

这是一个非常脆弱的解决方案,因为他们可能会随时选择更改其实施。最好使用他们正式支持的功能。