标签: rvest

R:使用rvest下载图像

我正试图png通过R从安全站点下载图像.

访问我使用的安全网站Rvest运作良好.

到目前为止,我已经提取了png图像的URL .

如何使用rvest下载此链接的图像?

rvest由于没有权限,函数外部的函数返回错误.

目前的尝试

library(rvest)
uastring <- "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36"
session <- html_session("https://url.png", user_agent(uastring))
form <- html_form(session)[[1]]
form <- set_values(form, username = "***", password="***", cookie_checkbox= TRUE)
session<-submit_form(session, form)
session2<-jump_to(session, "https://url.png")

## Status 200 using rvest, sucessfully accsessed page.    
session 
<session> https://url.png
  Status: 200
  Type:   image/png
  Size:   438935

## Using download.file returns status 403, page unable to open.
download.file("https://url.png", destfile = "t.png")
    cannot open: …
Run Code Online (Sandbox Code Playgroud)

r download rcurl httr rvest

6
推荐指数
2
解决办法
6719
查看次数

使用Rvest登录网站进行刮擦时出现403错误

我试图在需要登录的网站上抓一页,并且一直在收到403错误.

我已经为我的网站修改了这2个帖子的代码,使用rvest或httr登录网页上的非标准表单以及如何重用会话以避免在使用rvest进行重复登录时重复登录?

library(rvest)
pgsession <- html_session("https://www.optionslam.com/earnings/stocks/MSFT?page=-1")
pgform <- html_form(pgsession)[[1]]
filled_form <- set_values(pgform, 'username'='user', 'password'='pass')
s <- submit_form(pgsession, filled_form) # s is your logged in session
Run Code Online (Sandbox Code Playgroud)

代码运行时,我收到以下消息:

Submitting with 'NULL'
Warning message:
In request_POST(session, url = url, body = request$values, encode = request$encode,  :
  Forbidden (HTTP 403).
Run Code Online (Sandbox Code Playgroud)

我也通过这种方式运行代码,通过在注释中将user_agent更新为RS建议,但是,我收到与上面相同的错误.

library(rvest)
library(httr)
uastring <- "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36"
pgsession <- html_session("https://www.optionslam.com/earnings/stocks/MSFT?page=-1", user_agent(uastring))
pgform <- html_form(pgsession)[[1]]
filled_form <- set_values(pgform, 'username'='user', 'password'='pass')
s …
Run Code Online (Sandbox Code Playgroud)

session r web-scraping http-status-code-403 rvest

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

R rvest:找不到函数"xpath_element"

我试图简单地复制示例rvest::html_nodes(),但遇到错误:

library(rvest)
ateam <- read_html("http://www.boxofficemojo.com/movies/?id=ateam.htm")
html_nodes(ateam, "center")
Run Code Online (Sandbox Code Playgroud)

do.call中的错误(方法,列表(parsed_selector)):找不到函数"xpath_element"

同样的情况,如果我打开包,例如httr,xml2,selectr.我似乎也有这些软件包的最新版本......

在该包的功能,例如xpath_element,xpath_combinedselector在什么位置?我如何让它工作?请注意,我在Ubuntu 16.04上运行,因此该代码可能适用于其他平台...

r httr rvest xml2 ubuntu-16.04

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

如何使用httr或rvest提交似乎由JavaScript处理的表单?

我正在尝试以编程方式搜索网站,但提交按钮功能似乎主要由JavaScript提供支持.我并不过分熟悉它是如何工作的,所以我可能错了.

这是我正在使用的代码:

library(rvest)

BASE_URL = 'https://mdocweb.state.mi.us/otis2/otis2.aspx'
PARAMS = list(txtboxLName='Smith', 
              drpdwnGender='Either', 
              drpdwnRace='All', 
              drpdwnStatus='All',
              submit='btnSearch')

# rvest approach
s = html_session(BASE_URL)
form = html_form(s)[[1]]
form = set_values(form, PARAMS)
resp = submit_form(s, form, submit='btnSearch') # This gives an error

# httr approach
resp = httr::POST(BASE_URL, body=PARAMS, encode='form')
html = httr::content(resp) # This just returns that same page I was on
Run Code Online (Sandbox Code Playgroud)

该按钮的HTML如下所示:

<input type="submit" name="btnSearch" value="Search" onclick="javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(&quot;btnSearch&quot;, &quot;&quot;, true, &quot;&quot;, &quot;&quot;, false, false))" language="javascript" id="btnSearch" style="width:100px;">
Run Code Online (Sandbox Code Playgroud)

鉴于该onclick属性,我没有受过教育的假设是JavaScript的使用干扰了我的方法.但同样,我并不完全理解这一切是如何运作的,所以我可能错了.

无论哪种方式,我如何实现我的目标,如果有的话,使用rvesthttr …

post r web-scraping httr rvest

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

rvest 中的 html_form 无法识别表单

我正在尝试抓取该网站的内容(不是rvest链接论文/摘要,只是数量、标题、作者等)。

默认情况下,该页面仅显示 2016 年论文,抓取 2016 年数据“没问题”。我希望 URL 在将“2016”更改为“所有年份”后会发生变化,但它保持不变。于是我就求助于html_form. 在检查网页的“资源”后,我发现相关的输入名称是filteryear

R代码

library(rvest)
rdc <- html_session("https://sfb649.wiwi.hu-berlin.de/fedc/discussionPapers_formular_content.php")
form <- html_form(rdc)
form <- set_values(form, filteryear = "all years")
#Error: Unknown field names: filteryear
Run Code Online (Sandbox Code Playgroud)

显然,filteryear这不是表格的一部分。由于我的 HTML 知识有限,我很确定下面的内容告诉我,该表单由三个输入组成:filterTypeNamefilterNamefilteryear

来自资源的 HTML:

<form action='discussionPapers_formular_content.php' method='post'>
  <select name='filterTypeName'>
    <option value='AUTHORS'>Author</option>
    <option value='PROJECT'>Project Code</option>
    ...
    <option value='JEL'>JEL</option
  </select> </td>                            # Is this </td> the problem?!
  <td valign='baseline'> 
    <input type='text' size='35' name='filterName' > …
Run Code Online (Sandbox Code Playgroud)

html r web-scraping rvest

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

R 以编程方式更改 IP 地址

当前通过将不同的字符串传递给html_session()方法来更改 user_agent 。

有没有办法在抓取网站时更改计时器上的 IP 地址?

r rcurl httr rselenium rvest

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

通过导航 doPostBack 使用 R 抓取网站

我想从网站下面定期提取一个表格。

单击积木名称(BLOK 16 A, BLOK 16 B, BLOK 16 C, ...)时,价格表会发生变化。URL 不改变,页面通过触发改变

javascript:__doPostBack('ctl00$ContentPlaceHolder1$DataList2$ctl04$lnk_blok','')
Run Code Online (Sandbox Code Playgroud)

在搜索 google 和 starckoverflow 后,我尝试了 3 种方法。

我尝试过的没有 1:这不会触发 doPostBack 事件。

postForm( "http://www.kentkonut.com.tr/tr/modul/projeler/daire_fiyatlari.aspx?id=44", ctl00_ContentPlaceHolder1_DataList2_ctl03_lnk_blok="ctl00$ContentPlaceHolder1$DataList2$ctl03$lnk_blok")
Run Code Online (Sandbox Code Playgroud)

我尝试过的没有 2: selenium remote 似乎可以在 ( http://localhost:4444/ ) 上工作,但 remotedriver 无法导航。返回此错误。(checkError(res) 中的错误:httr 调用中的未定义错误。httr 输出:length(url) == 1 不是 TRUE)

library(RSelenium)
startServer()
remDr <- remoteDriver()
remDr <- remoteDriver(remoteServerAddr = "localhost" 
                  , port = 4444L, browserName = "firefox")
remDr$open()
remDr$getStatus()
remDr$navigate("http://www.kentkonut.com.tr/tr/modul/projeler/daire_fiyatlari.aspx?id=44")
Run Code Online (Sandbox Code Playgroud)

我尝试过的没有 3:这是触发 dopostback 事件的另一种方式。它不导航。

base.url <- "http://www.kentkonut.com.tr/tr/modul/projeler/",
event.target <- 'ctl00$ContentPlaceHolder1$DataList2$ctl03$lnk_blok',
action <- "daire_fiyatlari.aspx?id=44" …
Run Code Online (Sandbox Code Playgroud)

r web-scraping rcurl rselenium rvest

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

抓取需要点击按钮的网站

我正在尝试抓取这个网站。不幸的是,我想使用 rvest 抓取的数据隐藏在按钮(加号)后面。

我试着用 rvest 包来做,我使用以下代码:

library(rvest)
url <- 'https://transparency.entsoe.eu/generation/r2/actualGenerationPerGenerationUnit/show?name=&defaultValue=true&viewType=TABLE&areaType=BZN&atch=false&dateTime.dateTime=17.03.2017+00:00|UTC|DAYTIMERANGE&dateTime.endDateTime=17.03.2017+00:00|UTC|DAYTIMERANGE&area.values=CTY|10YBE----------2!BZN|10YBE----------2&productionType.values=B02&productionType.values=B03&productionType.values=B04&productionType.values=B05&productionType.values=B06&productionType.values=B07&productionType.values=B08&productionType.values=B09&productionType.values=B10&productionType.values=B11&productionType.values=B12&productionType.values=B13&productionType.values=B14&productionType.values=B15&productionType.values=B16&productionType.values=B17&productionType.values=B18&productionType.values=B19&productionType.values=B20&dateTime.timezone=UTC&dateTime.timezone_input=UTC&dv-datatable_length=100'

htmlpage <- html_session(url) %>%
  read_html() %>% 
  html_nodes(".dv-value-cell") %>>%
  html_table()
Run Code Online (Sandbox Code Playgroud)

“.dv-value-cell”是使用 SelectorGadget 从网站中提取的(在rvest 的一个小插曲中)。

但是,在我可以使用此代码之前,我仍然需要打开加号菜单。单击按钮之前,此子表中的数据不存在。因此,上面的代码将返回一个空值。

我使用了这个问题中描述的 Chrome 网络开发工具来监控当我点击按钮时会发生什么。根据该信息,我看到有对以下网址的请求(缩短为仅突出显示与原始网址的区别):

https://transparency.entsoe.eu/...&dateTime.timezone_input=UTC&dv-datatable-detail_22WAMERCO000010Y_22WAMERCO000008L_length=10&dv-datatable_length=50&detailId=22WAMERCO000010Y_22WAMERCO000008L
Run Code Online (Sandbox Code Playgroud)

如您所见,这是原始 url,但还有一个小的额外请求。但是,当我在浏览器中尝试此 url 时,它没有显示所需的结果。我一定错过了网站另外通过的东西。

根据 Chrome,此请求的结果正是我要查找的数据(右键单击 > 复制 > 复制结果)。所以应该有一种方法可以下载这个特定的数据。

我也发现了这个关于类似问题的问题,但不幸的是,该解决方案非常适合这种情况,并且没有给出一般性解释。

如何重现此浏览器请求,以便我收到相同的表?

r web-scraping rvest

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

R:POST 后抓取附加数据仅适用于第一页

我想从以下位置抓取瑞士政府为大学研究项目提供的药物信息:

http://www.spezialitaetenliste.ch/ShowPreparations.aspx?searchType=Substance&searchValue=

该页面确实提供了一个robotx.txt 文件,但是,它的内容对公众免费提供,我认为抓取这些数据是不受禁止的。

这是这个问题的更新,因为我取得了一些进展。

到目前为止我取得的成就

# opens the first results page 
# opens the first link as a table at the end of the page

library("rvest")
library("dplyr")


url <- "http://www.spezialitaetenliste.ch/ShowPreparations.aspx?searchType=Substance&searchValue="
pgsession<-html_session(url)
pgform<-html_form(pgsession)[[1]]

page<-rvest:::request_POST(pgsession,url,
                           body=list(
                             `ctl00$cphContent$gvwPreparations$ctl13$gvwpPreparations$txtPageNumber`=1,
                             `__VIEWSTATE`=pgform$fields$`__VIEWSTATE`$value,
                             `__VIEWSTATEGENERATOR`=pgform$fields$`__VIEWSTATEGENERATOR`$value,
                             `__VIEWSTATEENCRYPTED`=pgform$fields$`__VIEWSTATEENCRYPTED`$value,
                             `__EVENTVALIDATION`=pgform$fields$`__EVENTVALIDATION`$value,
                             `ctl00$cphContent$gvwPreparations$ctl13$gvwpPreparations$ddlPageSize`="10",
                             `__EVENTTARGET`="ctl00$cphContent$gvwPreparations$ctl02$ctl00",
                             `__EVENTARGUMENT`=""

                             ),
                           encode="form")
Run Code Online (Sandbox Code Playgroud)

下一篇:获取基础数据

# makes a table of all results of the first page

read_html(page) %>%
  html_nodes(xpath = '//*[@id="ctl00_cphContent_gvwPreparations"]') %>%
  html_table(fill=TRUE) %>% 
  bind_rows %>%
  tibble()
Run Code Online (Sandbox Code Playgroud)

下一步:获取附加数据

# gives the desired informations (=additional data) of the …
Run Code Online (Sandbox Code Playgroud)

r web-scraping rvest

5
推荐指数
0
解决办法
277
查看次数

使用 rvest(或其他 R 包)检测 HTML 段落的开头何时是不同的格式(例如 emboldened)

我正在使用 R 包 edgarWebR 来解析 SEC 文件,例如https://www.sec.gov/Archives/edgar/data/1060224/000090480206000008/sa10k306.htm。它返回一个数据框,其中一列(称为“原始”)是 HTML。它将 HTML 页面分解为段落,每段一行:

其他栏目 生的 文本
第一排 <p id="PARA339" style="TEXT-ALIGN: left; MARGIN: 0pt; LINE-HEIGHT: 1.25"><font style="FONT-SIZE: 10pt; FONT-FAMILY: Times New Roman, Times, serif"><i>We had a net loss of $1.</i><i><b>55</b></i><i> million for the year ended December 31, 201</i><i>6</i><i> and have an accumulated deficit of $</i><i>61.5</i><i> million as of December 31, 201</i><i>6</i><i>. To achieve sustainable profitability, we must generate increased revenue.</i></font></p> 截至 2016 年 12 月 31 日止年度,我们的净亏损为 155 万美元,截至 2016 年 12 …

html r dataframe web-scraping rvest

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