所以我不是100%确定这是可能的,但我在Ruby和python中找到了一个很好的解决方案,所以我想知道类似的东西是否可以在R中起作用
基本上,给定一个URL,我想呈现该URL,将呈现的屏幕截图作为.png,并将屏幕截图保存到指定的文件夹.我想在无头的linux服务器上做所有这些.
我最好的解决方案是在运行CutyCaptsystem这样的工具,还是存在一个基于R的工具集来帮我解决这个问题?
我使用了以下代码:
library(XML)
library(RCurl)
getGoogleURL <- function(search.term, domain = '.co.uk', quotes=TRUE)
{
search.term <- gsub(' ', '%20', search.term)
if(quotes) search.term <- paste('%22', search.term, '%22', sep='')
getGoogleURL <- paste('http://www.google', domain, '/search?q=',
search.term, sep='')
}
getGoogleLinks <- function(google.url)
{
doc <- getURL(google.url, httpheader = c("User-Agent" = "R(2.10.0)"))
html <- htmlTreeParse(doc, useInternalNodes = TRUE, error=function(...){})
nodes <- getNodeSet(html, "//a[@href][@class='l']")
return(sapply(nodes, function(x) x <- xmlAttrs(x)[[1]]))
}
search.term <- "cran"
quotes <- "FALSE"
search.url <- getGoogleURL(search.term=search.term, quotes=quotes)
links <- getGoogleLinks(search.url)
Run Code Online (Sandbox Code Playgroud)
我想找到我的搜索产生的所有链接,我得到以下结果:
> links
list()
Run Code Online (Sandbox Code Playgroud)
我怎样才能获得链接?另外我想获得谷歌搜索结果的头条新闻和总结如何才能获得它?最后是否有办法获取ChillingEffects.org结果中的链接?
我想用R来刮掉这个页面:( http://www.fifa.com/worldcup/archive/germany2006/results/matches/match=97410001/report.html)和其他人,以获得目标得分手和时间.
到目前为止,这就是我所拥有的:
require(RCurl)
require(XML)
theURL <-"http://www.fifa.com/worldcup/archive/germany2006/results/matches/match=97410001/report.html"
webpage <- getURL(theURL, header=FALSE, verbose=TRUE)
webpagecont <- readLines(tc <- textConnection(webpage)); close(tc)
pagetree <- htmlTreeParse(webpagecont, error=function(...){}, useInternalNodes = TRUE)
Run Code Online (Sandbox Code Playgroud)
pagetree对象现在包含指向我解析的html的指针(我认为).我想要的部分是:
<div class="cont")<ul>
<div class="bold medium">Goals scored</div>
<li>Philipp LAHM (GER) 6', </li>
<li>Paulo WANCHOPE (CRC) 12', </li>
<li>Miroslav KLOSE (GER) 17', </li>
<li>Miroslav KLOSE (GER) 61', </li>
<li>Paulo WANCHOPE (CRC) 73', </li>
<li>Torsten FRINGS (GER) 87'</li>
</ul></div>
Run Code Online (Sandbox Code Playgroud)
但我现在已经失去了对于如何隔离它们,并坦言xpathSApply和xpathApply迷惑beejeebies我了!
那么,有没有人知道如何制定一个命令来吸出<div class="cont">标签中包含的元素?
目标
我想使用R下载Google搜索网页的HTML,如网络浏览器所示.
问题
当我在R中下载Google搜索网页HTML时,使用网络浏览器中完全相同的网址,我注意到R下载的HTML与网络浏览器HTML不同,例如对于高级Google搜索网址,日期参数会被忽略.由R读入的HTML,而在Web浏览器中则保留.
例
我在网络浏览器中为"West End Theatre"进行Google搜索,并指定日期范围为2012年1月1日至1月31日.然后我复制生成的URL并将其粘贴到R.
# Google Search URL from Firefox web browser
url <- "http://www.google.co.uk/search?q=west+end+theatre&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:en-GB:official&client=firefox-a#q=west+end+theatre&hl=en&client=firefox-a&hs=z7I&rls=org.mozilla:en-GB%3Aofficial&prmd=imvns&sa=X&ei=rJE7T8fwM82WhQe_6eD2CQ&ved=0CGoQpwUoBw&source=lnt&tbs=cdr:1%2Ccd_min%3A1%2F1%2F2012%2Ccd_max%3A31%2F1%2F2012&tbm=&bav=on.2,or.r_gc.r_pw.r_qf.,cf.osb&fp=6f92152f78004c6d&biw=1600&bih=810"
u <- URLdecode(url)
# Webpage as seen in browser
browseURL(u)
# Webpage as seen from R
HTML <- paste(readLines(u), collapse = "\n")
cat(HTML, file = "output01.html")
shell.exec("output01.html")
# Webpage as seen from R through RCurl
library(RCurl)
cookie = 'cookiefile.txt'
curl = getCurlHandle(cookiefile = cookie,
useragent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; en - US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6",
header = FALSE, …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用此处的说明从命令行创建OAuth令牌.我可以curl从命令行使用,并获得正确的响应
curl -u 'username:pwd' -d '{"scopes":["user", "gist"]}' \
https://api.github.com/authorizations
Run Code Online (Sandbox Code Playgroud)
现在,我想在R中使用RCurl或复制相同的内容httr.这是我尝试过的,但两个命令都返回错误.谁能指出我在这里做错了什么?
httr::POST(
'https://api.github.com/authorizations',
authenticate('username', 'pwd'),
body = list(scopes = list("user", "gist"))
)
RCurl::postForm(
uri = 'https://api.github.com/authorizations',
.opts = list(
postFields = '{"scopes": ["user", "gist"]}',
userpwd = 'username:pwd'
)
)
Run Code Online (Sandbox Code Playgroud) 我正在尝试自动登录英国的数据存档服务.该网站显然值得信赖.不幸的是,RCurl与httr在SSL验证休息.我的网络浏览器不会发出任何警告.我可以通过使用来解决这个问题ssl.verifypeer = FALSE,RCurl但我想了解发生了什么?
# breaks
library(httr)
GET( "https://www.esds.ac.uk/secure/UKDSRegister_start.asp" )
# breaks
library(RCurl)
cert <- system.file("CurlSSL/cacert.pem", package = "RCurl")
getURL("https://www.esds.ac.uk/secure/UKDSRegister_start.asp",cainfo = cert)
# works
library(RCurl)
getURL(
"https://www.esds.ac.uk/secure/UKDSRegister_start.asp" ,
.opts = list(ssl.verifypeer = FALSE)
) # note: use list(ssl.verifypeer = FALSE,followlocation=TRUE) to see content
Run Code Online (Sandbox Code Playgroud) 我在Windows上的R中尝试了以下代码:
library(RCurl)
postForm("https://www.google.com/accounts/ClientLogin/",
"email" = "me@gmail.com",
"Passwd" = "abcd",
"service" = "finance",
"source" = "Test-1"
)
Run Code Online (Sandbox Code Playgroud)
但是出现以下错误:
Error in postForm()
SL certificate problem, verify that the CA cert is OK. Details:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
Run Code Online (Sandbox Code Playgroud)
如何设置RCurl以允许使用HTTP?
我最初问这个关于使用httr包执行此任务的问题,但我认为不可能使用httr.所以我重新编写了我的代码来RCurl代替使用- 但我仍然踩着可能与...相关的东西writefunction但我真的不明白为什么.
您应该能够使用32位版本的R来重现我的工作,因此如果您在RAM中读取任何内容,则会达到内存限制.我需要一个直接下载到硬盘的解决方案.
首先,这段代码可以正常工作 - 压缩文件被妥善保存到磁盘上.
library(RCurl)
filename <- tempfile()
f <- CFILE(filename, "wb")
url <- "http://www2.census.gov/acs2011_5yr/pums/csv_pus.zip"
curlPerform(url = url, writedata = f@ref)
close(f)
# 2.1 GB file successfully written to disk
Run Code Online (Sandbox Code Playgroud)
现在这里有一些RCurl不起作用的代码.如前一个问题所述,复制这一点将需要在ipums上创建一个提取.
your.email <- "email@address.com"
your.password <- "password"
extract.path <- "https://usa.ipums.org/usa-action/downloads/extract_files/some_file.csv.gz"
library(RCurl)
values <-
list(
"login[email]" = your.email ,
"login[password]" = your.password ,
"login[is_for_login]" = 1
)
curl = getCurlHandle() …Run Code Online (Sandbox Code Playgroud) 我在我的脚本中登录时遇到问题.尽管我在stackoverflow上找到了所有其他好的答案,但没有一个解决方案适合我.
我正在为我的博士研究抓一个网络论坛,其网址是http://forum.axishistory.com.
我想要抓取的网页是成员列表 - 列出所有成员个人资料的链接的页面.如果登录,则只能访问成员列表.如果您尝试在不登录的情况下访问成员列表,则会显示登录表单.
成员列表的URL是:http://forum.axishistory.com/memberlist.php.
我试过httr-package:
library(httr)
members <- GET("http://forum.axishistory.com/memberlist.php", authenticate("username", "password"))
members_html <- html(members)
Run Code Online (Sandbox Code Playgroud)
输出是登录表单.
然后我尝试了RCurl:
library(RCurl)
members_html <- htmlParse(getURL("http://forum.axishistory.com/memberlist.php", userpwd = "username:password"))
members_html
Run Code Online (Sandbox Code Playgroud)
输出是登录表单 - 再次.
然后我尝试了这个主题的list()函数 - 在R中刮掉受密码保护的网站:
handle <- handle("http://forum.axishistory.com/")
path <- "ucp.php?mode=login"
login <- list(
amember_login = "username"
,amember_pass = "password"
,amember_redirect_url =
"http://forum.axishistory.com/memberlist.php"
)
response <- POST(handle = handle, path = path, body = login)
Run Code Online (Sandbox Code Playgroud)
然后再次!输出是登录表单.
我正在研究的下一件事是RSelenium,但经过所有这些尝试,我试图弄清楚我是否可能遗漏了某些东西(可能是完全明显的东西).
我在这里查看了其他相关帖子,但无法弄清楚如何将代码应用于我的案例:
我一直在使用 httr 和 rcurl,但无法设法将以下curl GET 请求转换为 R:
curl -X GET --header 'Accept: application/json' --header 'Authorization: Bearer 31232187asdsadh23187' 'https://this.url.api.com:334/api/endpoint'
Run Code Online (Sandbox Code Playgroud)
特别是,我在传递授权选项时遇到了一些麻烦,因为我无法在两个库中找到等效的参数。这可能是一个自定义标头?