标签: rvest

使用rvest或httr登录网页上的非标准表单

我试图使用rvest来蜘蛛网页,该网页需要在表单上登录电子邮件/密码.

rm(list=ls())
library(rvest)

### Trying to sign into a form using email/password 

url       <-"http://www.perfectgame.org/"   ## page to spider
pgsession <-html_session(url)               ## create session
pgform    <-html_form(pgsession)[[1]]       ## pull form from session

set_values(pgform, `ctl00$Header2$HeaderTop1$tbUsername` = "myemail@gmail.com") 
set_values(pgform, `ctl00$Header2$HeaderTop1$tbPassword` = "mypassword")

submit_form(pgsession,pgform,submit=`ctl00$Header2$HeaderTop1$Button1`)
Run Code Online (Sandbox Code Playgroud)

这给我以下错误信息:

Error in submit_request(form, submit) : 
Run Code Online (Sandbox Code Playgroud)

找不到对象'ctl00 $ Header2 $ HeaderTop1 $ Button1'

如果我在没有指定submit参数的情况下提交表单,我会得到:

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

我也尝试将参数直接传递给httr,如本问题所述:如何在R中发布一个简单的HTML表单?,但"submit"参数不接受提交按钮,使用向后引号(``),引号或没有任何引号:

library(httr)

url <- "http://www.perfectgame.org/Rankings/Players/Default.aspx?gyear=2015&num=500"

fd <- list(
    submit = `ctl00$Header2$HeaderTop1$Button1`, …
Run Code Online (Sandbox Code Playgroud)

html forms r rvest

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

R:rvest:抓取动态电子商务页面

rvest在R中用来做一些刮擦.我知道一些HTML和CSS.

我想获得URI的每个产品的价格:

http://www.linio.com.co/tecnologia/celulares-telefonia-gps/

当您在页面上下载时,新项目会加载(当您进行一些滚动时).

到目前为止我做了什么:

Linio_Celulares <- html("http://www.linio.com.co/celulares-telefonia-gps/")

Linio_Celulares %>%
  html_nodes(".product-itm-price-new") %>%
  html_text()
Run Code Online (Sandbox Code Playgroud)

我得到了我需要的东西,但仅仅是25个第一个元素(默认加载).

 [1] "$ 1.999.900" "$ 1.999.900" "$ 1.999.900" "$ 2.299.900" "$ 2.279.900"
 [6] "$ 2.279.900" "$ 1.159.900" "$ 1.749.900" "$ 1.879.900" "$ 189.900"  
[11] "$ 2.299.900" "$ 2.499.900" "$ 2.499.900" "$ 2.799.000" "$ 529.900"  
[16] "$ 2.699.900" "$ 2.149.900" "$ 189.900"   "$ 2.549.900" "$ 1.395.900"
[21] "$ 249.900"   "$ 41.900"    "$ 319.900"   "$ 149.900" 
Run Code Online (Sandbox Code Playgroud)

问题:如何获取此动态部分的所有元素?

我想,我可以滚动页面,直到所有元素都被加载,然后使用html(URL).但这似乎很多工作(我计划在不同的部分这样做).应该有一个程序化的工作.

任何暗示都是受欢迎的!

r web-scraping infinite-scroll rvest

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

R - 如何使用rvest或rcurl点击网页

我想从这个网页下载数据

数据很容易被删除rvest.

代码可能是这样的:

library(rvest)
library(pipeR)
url <- "http://www.tradingeconomics.com/"
css <-     "#ctl00_ContentPlaceHolder1_defaultUC1_CurrencyMatrixAllCountries1_GridView1"

data <- url %>>%
  html() %>>%
  html_nodes(css) %>>%
  html_table() 
Run Code Online (Sandbox Code Playgroud)

但是像这样的网页存在问题.

有一个+按钮显示所有国家/地区的数据,但默认值只是50个国家/地区的数据.

因此,如果我使用代码,我可以抓取50个国家/地区的数据.

+按钮是在人的javascript,所以我想知道是否有在某种程度上R点击按钮,然后刮数据.

r web-scraping rcurl rvest

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

为什么'错误:长度(网址)== 1不是TRUE'与rvest网页抓取

我正在尝试废弃网络数据,但第一步需要登录.我已成功登录其他网站,但我在这个网站上发生了一个奇怪的错误.

library("rvest")
library("magrittr")    

research <- html_session("https://www.fitchratings.com/")

signin <- research %>%
  html_nodes("form") %>%
  extract2(1) %>%
  html_form() %>%
  set_values (
    'userName' = "abc",
    'password' = "1234"
     )

research <- research %>%
  submit_form(signin)
Run Code Online (Sandbox Code Playgroud)

当我运行'submit_form'行时,我收到以下错误:

> research <- research %>%
+ submit_form(signin)
Submitting with '<unnamed>'
Error: length(url) == 1 is not TRUE
Run Code Online (Sandbox Code Playgroud)

使用未命名提交是正确的b/c没有为登录按钮分配名称.任何帮助赞赏!

r web-scraping rvest

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

如何在Rvest包中提交没有按钮参数的登录表单

我正在尝试使用rvest包中的html_session()和html_form()来抓取需要身份验证的网页.我发现这个例如由Hadley Wickham提供,但我无法根据我的情况进行自定义.

united <- html_session("http://www.united.com/")
account <- united %>% follow_link("Account")
login <- account %>%
         html_nodes("form") %>%
         extract2(1) %>%
         html_form() %>%
         set_values(
                `ctl00$ContentInfo$SignIn$onepass$txtField` = "GY797363",
                `ctl00$ContentInfo$SignIn$password$txtPassword` = password)
account <- account %>% 
submit_form(login, "ctl00$ContentInfo$SignInSecure")
Run Code Online (Sandbox Code Playgroud)

在我的情况下,我找不到要在表单中设置的值,因此我试图给用户并直接传递:set_values("email","password")

我也不知道如何引用提交按钮,所以我尝试了:submit_form(帐号,登录)

我为submit_form函数得到的错误是:名称错误(提交)[[1]]:下标超出范围

如何理解这一点的任何想法表示赞赏.谢谢

forms r web-scraping rvest

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

如何在R中的read_html之后关闭未使用的连接

我是R的新手,我试图访问互联网上的一些信息,但我遇到了似乎没有关闭的连接问题.如果有人在这里给我一些建议,我将非常感激...

最初我想使用WebChem软件包,理论上可以提供我想要的所有内容,但是当网页中缺少某些输出数据时,WebChem不会从该页面返回任何数据.为了解决这个问题,我已经从包中获取了大部分代码,但稍微改了一下以满足我的需求.这工作得很好,关于第150个惯例,但现在,我虽然什么都没有改变,当我使用命令read_html,我得到的警告信息"关闭不使用的连接4(HTTP:......"虽然这只是一条警告消息,read_html在生成此警告后不返回任何内容.

我写了一个简化的代码,如下所示.这有同样的问题

完全关闭R(甚至重新启动我的电脑)似乎没有什么区别 - 第二次使用代码时会出现警告消息.我可以一次一个地运行查询,在循环之外没有问题,但是一旦我尝试使用循环,错误就会在第二次迭代时再次发生.我试图矢量化代码,并再次返回相同的错误消息.我尝试了showConnections(all = TRUE),但只有stdin,stdout,stderr的连接0-2.我试图找到关闭html连接的方法,但是我不能将url定义为con,而close(qurl)和close(ttt)也不起作用.(返回应用于类"字符"对象的'close'没有适用方法的错误,并且没有适用于类'c('xml_document','xml_node')的对象的'close'的适用方法",分别)

有没有人知道关闭这些连接的方法,这样他们就不会破坏我的日常工作?任何建议都会非常受欢迎.谢谢!

PS:我正在使用R版本3.3.0和RStudio版本0.99.902.

CasNrs <- c("630-08-0","463-49-0","194-59-2","86-74-8","148-79-8")
tit = character()
for (i in 1:length(CasNrs)){
  CurrCasNr <- as.character(CasNrs[i])
  baseurl <- 'http://chem.sis.nlm.nih.gov/chemidplus/rn/'
  qurl <- paste0(baseurl, CurrCasNr, '?DT_START_ROW=0&DT_ROWS_PER_PAGE=50')
  ttt <- try(read_html(qurl), silent = TRUE)
  tit[i] <- xml_text(xml_find_all(ttt, "//head/title"))
}
Run Code Online (Sandbox Code Playgroud)

r rvest webchem

12
推荐指数
2
解决办法
2698
查看次数

当rvest无法识别提交按钮时提交POST表单

我想提交以下表格(点击链接"Kliknite na ..."后出现的表格):http://www1.biznet.hr/HgkWeb/do/extlogon

我必须输入一个名为"OIB"的参数,然后单击"Trazi"提交表单.

这是我的代码:

library(httr)
library(rvest)

sess <- html_session("http://www1.biznet.hr/HgkWeb/do/extlogon")
search_page <- sess %>%
  follow_link(1)
form <- html_form(search_page)[[6]]
fill_form <- set_values(form, 'clanica.cla_oib' = '94989605030')
firma_i <- submit_form(search_page, fill_form, submit = 'submit')
Run Code Online (Sandbox Code Playgroud)

最后一行产生错误:

错误:未知提交名称"提交".可能的值:clanica.asTextDatumGasenjaTo,clanica.asTextUdr_id

我不明白为什么rvest在不包含提交名称或类型时将这两个参数识别为提交按钮.为什么rvest不认识提交按钮"Trazi"作为提交参数?简而言之,如何更改填充表单以执行表单?

r httr rvest

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

R:使用rvest包而不是XML包来从URL获取链接

我使用XML包来获取此URL的链接.

# Parse HTML URL
v1WebParse <- htmlParse(v1URL)
# Read links and and get the quotes of the companies from the href
t1Links <- data.frame(xpathSApply(v1WebParse, '//a', xmlGetAttr, 'href'))
Run Code Online (Sandbox Code Playgroud)

虽然这种方法非常有效,但我使用rvest并且在解析网络时看起来更快XML.我试过html_nodeshtml_attrs,但我不能得到它的工作.

xml r web-scraping rvest

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

使用'rvest'来提取链接

我试图从Yelp中删除数据.一步是从每个餐馆提取链接.例如,我搜索纽约的餐馆并获得一些结果.然后我想提取Yelp在第1页上推荐的所有10家餐厅的链接.这是我尝试过的:

library(rvest)     
page=read_html("http://www.yelp.com/search?find_loc=New+York,+NY,+USA")
page %>% html_nodes(".biz-name span") %>% html_attr('href')
Run Code Online (Sandbox Code Playgroud)

但代码总是返回'NA'.任何人都可以帮助我吗?谢谢!

r web-scraping yelp rvest

11
推荐指数
2
解决办法
1万
查看次数

使用R搜索搜索后面的asp javascript分页表

我试图拉内容https://www.askebsa.dol.gov/epds/default.asp用两种rvestRSelenium但当JavaScript页面开始搜索框没有找到指导?将所有这些内容整合到一个简单的CSV文件中会很棒.

之后,从https://www.askebsa.dol.gov/mewaview/View/Index/6219这样的个别文件中提取数据似乎是可能的..但我也很感激这样做的干净建议.谢谢

javascript r web-scraping rselenium rvest

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

标签 统计

r ×10

rvest ×10

web-scraping ×7

forms ×2

html ×1

httr ×1

infinite-scroll ×1

javascript ×1

rcurl ×1

rselenium ×1

webchem ×1

xml ×1

yelp ×1