标签: rvest

如何在R中发布简单的HTML表单?

我对R编程比较陌生,我试图将我在Johns Hopkins数据科学专业中学到的一些东西用于实际应用.具体来说,我想自动化从美国财政部网站下载历史债券价格的过程

使用Firefox和R,我能够确定美国财政部网站使用非常简单的HTML POST表单来指定感兴趣的报价的单个日期.然后返回所有未偿债券的二级市场信息表.

我没有尝试使用两个不同的R包来向美国财政部Web服务器提交请求.野兔是我尝试过的两种方法:

尝试#1(使用RCurl):

url <- "https://www.treasurydirect.gov/GA-FI/FedInvest/selectSecurityPriceDate.htm"
td.html <- postForm(url,
                    submit = "Show Prices",
                    priceDate.year  = 2014,
                    priceDate.month = 12,
                    priceDate.day   = 15,
                   .opts = curlOptions(ssl.verifypeer = FALSE))
Run Code Online (Sandbox Code Playgroud)

这导致返回并存储的网页,td.html但它包含的是来自treasurydirect服务器的错误消息.我知道服务器正在运行,因为当我通过浏览器提交相同的请求时,我得到了预期的结果.

尝试#2(使用rvest):

s <- html_session(url)
f0 <- html_form(s)
f1 <- set_values(f0[[2]], priceDate.year=2014, priceDate.month=12, priceDate.day=15)
test <- submit_form(s, f1)
Run Code Online (Sandbox Code Playgroud)

不幸的是,这种方法甚至不会留下R并导致来自R的以下错误消息:

Submitting with 'submit'
Error in function (type, msg, asError = TRUE)  : <url> malformed
Run Code Online (Sandbox Code Playgroud)

我似乎无法弄清楚如何查看正在发送给rvest的"格式错误"的文本,以便我可以尝试诊断问题.

任何建议或提示解决这个看似简单的任务将不胜感激!

html post r rcurl rvest

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

使用rvest跟随"相对路径"的"下一步"链接

我正在使用该rvest软件包从http://www.radiolab.org/series/podcasts页面中获取信息.抓第一页后,我想按照底部的"下一步"链接,抓第二页,移到第三页等.

以下行给出错误:

html_session("http://www.radiolab.org/series/podcasts") %>% follow_link("Next")
## Navigating to 
##     
##       ./2/  
## Error in parseURI(u) : cannot parse URI 
##     
##       ./2/  
Run Code Online (Sandbox Code Playgroud)

检查HTML显示"./ /"周围有一些额外的错误,rvest显然不喜欢:

html("http://www.radiolab.org/series/podcasts") %>% html_node(".pagefooter-next a")
## <a href="&#10;    &#10;      ./2/  ">Next</a> 

.Last.value %>% html_attrs()
##                   href 
## "\n    \n      ./2/  "
Run Code Online (Sandbox Code Playgroud)

问题1: 如何rvest::follow_link像浏览器一样正确处理此链接?(我可以手动抓取"下一步"链接并使用正则表达式进行清理,但更喜欢利用随附的自动化功能rvest.)


follow_link代码的最后,它调用jump_to.所以我尝试了以下方法:

html_session("http://www.radiolab.org/series/podcasts") %>% jump_to("./2/")
## <session> http://www.radiolab.org/series/2/
##   Status: 404
##   Type:   text/html; charset=utf-8
##   Size:   10744
## …
Run Code Online (Sandbox Code Playgroud)

html r web-scraping rvest

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

在rvest中提交没有提交按钮的表单

我正在尝试编写一个爬虫来下载一些信息,类似于这个Stack Overflow帖子. 答案对于创建填充表单非常有用,但是当提交按钮不是表单的一部分时,我很难找到提交表单的方法.这是一个例子:

session <- html_session("www.chase.com")
form <- html_form(session)[[3]]

filledform <- set_values(form, `user_name` = user_name, `usr_password` = usr_password)
session <- submit_form(session, filledform)
Run Code Online (Sandbox Code Playgroud)

此时,我收到此错误:

Error in names(submits)[[1]] : subscript out of bounds
Run Code Online (Sandbox Code Playgroud)

如何提交此表单?

r web-crawler rvest

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

用"代理"抓取https网站的网页"rvest"

我想废弃一个https网站,但我失败了.

这是我的代码:

require(rvest)
url <- "https://www.sunnyplayer.com/de/"
content <- read_html(url)
Run Code Online (Sandbox Code Playgroud)

但我在控制台中出错 - "open.connection(x,"rb")出错:达到超时"我如何解决这个问题?

r web-scraping rvest

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

R网页抓取多个页面

我正在开展网络抓取计划,以搜索特定的葡萄酒,并返回该品种的当地葡萄酒清单.我遇到的问题是多页结果.下面的代码是我正在使用的基本示例

url2 <- "http://www.winemag.com/?s=washington+merlot&search_type=reviews"
htmlpage2 <- read_html(url2)
names2 <- html_nodes(htmlpage2, ".review-listing .title")
Wines2 <- html_text(names2)
Run Code Online (Sandbox Code Playgroud)

对于此特定搜索,有39页的结果.我知道网址更改为http://www.winemag.com/?s=washington%20merlot&drink_type=wine&page=2,但是有一种简单的方法可以使代码循环遍历所有返回的页面并编译所有39个结果页面成一个列表?我知道我可以手动完成所有网址,但这看起来有点矫枉过正.

html r web-scraping rvest

7
推荐指数
2
解决办法
9341
查看次数

在html_table(rvest)中指定列类

我使用rvest的html_table从下面的网站上读取两列索引表.两列都包含我想要保留的前导零的实例.因此,我希望列是类字符.我使用以下代码:

library(rvest)
library(data.table)

df <- list() 
for (j in 1:25) {
     url <- paste('http://unstats.un.org/unsd/cr/registry/regso.asp?Ci=70&Lg=1&Co=&T=0&p=',
           j, '&prn=yes', sep='') 
     webpage <- read_html(url) 
     table <- html_nodes(webpage, 'table') 
     df[[j]] <- html_table(table, header=TRUE)[[1]] 
     df[[j]] <- df[[j]][,c(1:2) ] 
}
ISIC4.NACE2 <- rbindlist(df) 
Run Code Online (Sandbox Code Playgroud)

但是str(df [[1]])返回

'data.frame':   40 obs. of  2 variables:
$ ISIC Rev.4: chr  "01" "011" "0111" "0112" ...
$ NACE Rev.2: num  1 1.1 1.11 1.12 1.13 1.14 1.15 1.16 1.19 1.2 ...
Run Code Online (Sandbox Code Playgroud)

似乎html_table函数将第一列解释为字符,将第二列解释为数字,从而截断后者中的前导零.有没有办法使用html_table指定列类?

html r html-table rvest

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

用rvest将复杂的html文件读入R中

我是R和stackoverflow的新手,所以请保持温和,我会尽量保持这篇文章的正确性.我正在开展一个项目,将整个外显子组测序(WES)结果与蛋白质组数据进行比较.我们的WES工具仅将数据作为html文件提供,因此我需要将其读入R以继续我的工作.

我试图按照RBC的DataCamp教程进行操作,但我认为问题可能是html文件过于复杂,因为我得到的是一堆乱七八糟的\ t\t\t\tn \n\t,其间有一些文字.我想问题是一个不正确的html_node?

这是我的R代码,后面是缩写和变体修改的HTML.

我想得到的是一个与html中列相同的数据框.如在示例中,一些变体影响多个转录本,在这些情况下,单行/转录本将是完美的但不是必须的任何方式.

非常感谢您的帮助!

塞巴斯蒂安

library(tidyverse)  
library(rvest)    

htmlALL <- read_html("Example_html")

getDATA <- function(html){
html %>%
html_nodes(".table") %>%
html_text() %>%
str_trim() %>%
unlist()

}

df_html <- getDATA(htmlALL)
Run Code Online (Sandbox Code Playgroud)

<!DOCTYPE html
	PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
	 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US" xml:lang="en-US">
<head>
  <!-- add title in the brower tab bar -->
  <title>Homozygous variants of sample XXX </title>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>


<!-- change style to look nice -->
<style type="text/css">


html { 
  text-align: center;
  vertical-align: middle; …
Run Code Online (Sandbox Code Playgroud)

html r rvest

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

HTML表格未显示在源文件中

我正在尝试使用R(包rvest)在网页上刮取表格数据.要做到这一点,数据需要在html源文件中(rvest显然在那里寻找它),但在这种情况下它不是.

但是,数据元素显示在"检查"面板的"元素"视图中:

表格的元素显示在

源文件显示一个空表:

view-source文件显示一个空表

为什么数据显示在inspect元素上而不是源文件上?如何以html格式访问表数据?如果我无法通过HTML访问如何更改我的网络抓取策略?

*网页是 https://si3.bcentral.cl/siete/secure/cuadros/cuadro_dinamico.aspx?idMenu=IPC_VAR_MEN1_HIST&codCuadro=IPC_VAR_MEN1_HIST

源文件: view-source:https://si3.bcentral.cl/siete/secure/cuadros/cuadro_dinamico.aspx?idMenu = IPC_VAR_MEN1_HIST&codCuadro = IPC_VAR_MEN1_HIST


编辑:赞赏使用R的解决方案

html javascript r web-scraping rvest

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

如何将 read_html 的输出保存和读取为 RDS 文件?

可以像这样保存和读取对象

# Save as file
saveRDS(iris, "mydata.RDS")

# Read back in 
readRDS("mydata.RDS")
Run Code Online (Sandbox Code Playgroud)

但这似乎不适用于用 xml2::read_html()

例子

library(rvest)
someobject <- read_html("https://stackoverflow.com/")
saveRDS(someobject, "someobject.RDS")
Run Code Online (Sandbox Code Playgroud)

它创建了一个文件,但不像预期的那样

readRDS("someobject.RDS")
Error in doc_is_html(x$doc) : external pointer is not valid
Run Code Online (Sandbox Code Playgroud)

发生了什么以及保存 html 对象的最简单方法是什么,以便它可以用最少的代码/大惊小怪加载回来?

r rvest xml2

7
推荐指数
2
解决办法
623
查看次数

在 R 中使用 rvest 填充和提交搜索

我正在学习如何填写表格并rvest在 R 中提交,当我想在 stackoverflow 中搜索 ggplot 标签时,我陷入了困境。这是我的代码:

url<-"https://stackoverflow.com/questions"

(session<-html_session("https://stackoverflow.com/questions"))

(form<-html_form(session)[[2]])
(filled_form<-set_values(form, tagQuery = "ggplot"))
searched<-submit_form(session, filled_form)
Run Code Online (Sandbox Code Playgroud)

我有错误:

Submitting with '<unnamed>'
Error in parse_url(url) : length(url) == 1 is not TRUE
Run Code Online (Sandbox Code Playgroud)

按照这个问题(表单提交时出现 rvest 错误)我尝试了几种方法来解决这个问题,但我不能:

filled_form$fields[[13]]$name<-"submit"
filled_form$fields[[14]]$name<-"submit"
filled_form$fields[[13]]$type<-"button"
filled_form$fields[[14]]$type<-"button"
Run Code Online (Sandbox Code Playgroud)

任何帮助家伙

r rvest

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

标签 统计

r ×10

rvest ×10

html ×6

web-scraping ×4

html-table ×1

javascript ×1

post ×1

rcurl ×1

web-crawler ×1

xml2 ×1