标签: rvest

在R中搜索javascript网站

我想从这个网址中删除匹配时间和日期:

http://www.scoreboard.com/game/rosol-l-goffin-d-2014/8drhX07d/#game-summary

通过使用chrome dev工具,我可以看到这似乎是使用以下代码生成的:

<td colspan="3" id="utime" class="mstat-date">01:20 AM, October 29, 2014</td>
Run Code Online (Sandbox Code Playgroud)

但这不是源html.

我认为这是因为它的java(纠正我,如果我错了).如何使用R抓取此信息?

javascript screen-scraping r rvest

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

在rvest中搜索位置数据

我正在尝试从我使用rvest的网址列表中搜索纬度/经度数据.每个网址都有一个包含特定位置的嵌入式谷歌地图,但网址本身并未显示API所采用的路径.

在查看页面源代码时,我看到我所关注的部分在这里:

<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false">
</script>
<script type="text/javascript">
function initialize() {
var myLatlng = new google.maps.LatLng(43.805170,-70.722084);
var myOptions = {
  zoom: 16,
  center: myLatlng,
  mapTypeId: google.maps.MapTypeId.SATELLITE
}
var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);

var marker = new google.maps.Marker({
    position: myLatlng, 
    map: map,
    title:"F.E. Wood & Sons - Natural Energy"
});   
Run Code Online (Sandbox Code Playgroud)

现在,如果我可以获得具有LatLng(....)输入的行,我可以使用一些字符串解析操作来导出所有URL的纬度和经度值.

我写了以下代码来获取我的数据:

require(rvest)
require(magrittr)
fetchLatLong<-function(url){
  url<-as.character(url)
  solNum<-html(url)%>%
    html_nodes("#map_canvas")%>%
    html_attr("script")
}
Run Code Online (Sandbox Code Playgroud)

(使用selectorGadget找到"map_canvas"选择器;您可以在此处查看整个源).

我有最糟糕的时间来阅读我所追求的内容.我尝试了很多节点和节点组合,但无济于事.我玩过phantom.js,但问题是它不是js渲染的html内容我正在追求:我正在寻找API查询输入,它被写入页面代码(或者,至少,我的业余眼睛似乎是).

有人有建议吗?

javascript r scraper web-scraping rvest

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

在网页抓取时只有小对象的高R内存使用率

我正在抓一个网站,并从for-loop调用我的抓取功能.在循环的4,000次迭代中,我的计算机警告我RStudio使用了太多的内存.但是在使用转义键断开循环之后,我在R环境中看不到任何大对象.

我尝试了这两个 帖子的提示,但他们没有透露原因.当我mem_used()pryr包裹打电话时,我得到:

2.3 GB

这与Windows任务管理员最初所说的一致.它表示2.3 GB,然后在循环结束后十分钟内降至1.7 GB,在循环后二十分钟内降至1.2 GB. mem_used()继续说2.3 GB.

但根据lsos()上面链接的第一篇文章中的函数,我的R对象很小:

> lsos()
                       Type     Size  Rows Columns
all_raw              tbl_df 17390736 89485      12
all_clean            tbl_df 14693336 89485      15
all_no_PAVs          tbl_df 14180576 86050      15
all_no_dupe_names    tbl_df 13346256 79646      15
sample_in            tbl_df  1917128  9240      15
testdat              tbl_df  1188152  5402      15
username_res         tbl_df   792936  4091      14
getUserName        function   151992    NA      NA
dupe_names           tbl_df   132040  2802       3
time_per_iteration  numeric    65408  4073      NA
Run Code Online (Sandbox Code Playgroud)

这说我最大的对象是17 MB,不接近2.3 GB.我怎样才能找到内存使用的罪魁祸首并修复它?循环中是否存在逐渐占用内存的东西? …

memory r rvest

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

R网络刮板与jsessionid

我正在测试R中的一些web scrape脚本.我已经阅读了很多教程,文档并尝试了不同的东西,但到目前为止还没有成功.

我试图抓取的URL就是这个.它有公共,政府数据,没有针对网络抓取工具的声明.它是葡萄牙语,但我相信这不会是一个大问题.

它显示了一个包含多个字段的搜索表单.我的测试是搜索来自特定州("RJ",在这种情况下,该字段是"UF")和城市("Rio de Janeiro",在"MUNICIPIO"字段中)的数据.通过单击"Pesquisar"(搜索),它显示以下输出:

在此输入图像描述

使用Firebug,我发现它调用的URL(使用上面的参数)是:

http://www.dataescolabrasil.inep.gov.br/dataEscolaBrasil/home.seam?buscaForm=buscaForm&codEntidadeDecorate%3AcodEntidadeInput=&noEntidadeDecorate%3AnoEntidadeInput=&descEnderecoDecorate%3AdescEnderecoInput=&estadoDecorate%3A**estadoSelect=33**&municipioDecorate%3A**municipioSelect=3304557**&bairroDecorate%3AbairroInput=&pesquisar.x=42&pesquisar.y=16&javax.faces.ViewState=j_id10
Run Code Online (Sandbox Code Playgroud)

该网站使用jsessionid,使用以下内容可以看到:

library(rvest)
library(httr)
url <- GET("http://www.dataescolabrasil.inep.gov.br/dataEscolaBrasil/")
cookies(url)
Run Code Online (Sandbox Code Playgroud)

知道它使用了jsessionid,我使用cookies(url)检查这些信息,并将其用于这样的新URL:

url <- read_html("http://www.dataescolabrasil.inep.gov.br/dataEscolaBrasil/home.seam;jsessionid=008142964577DBEC622E6D0C8AF2F034?buscaForm=buscaForm&codEntidadeDecorate%3AcodEntidadeInput=33108064&noEntidadeDecorate%3AnoEntidadeInput=&descEnderecoDecorate%3AdescEnderecoInput=&estadoDecorate%3AestadoSelect=org.jboss.seam.ui.NoSelectionConverter.noSelectionValue&bairroDecorate%3AbairroInput=&pesquisar.x=65&pesquisar.y=8&javax.faces.ViewState=j_id2")
html_text(url)
Run Code Online (Sandbox Code Playgroud)

好吧,输出没有数据.实际上,它有一条错误消息.翻译成英文,它基本上说会话已经过期.

我认为这是一个基本的错误,但我四处寻找并找不到克服这个问题的方法.

r web-scraping httr rvest

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

如何在Rvest中传递ssl_verifypeer?

我正试图用Rvest从$ JOB的内部网页上刮掉一张桌子.我已经使用这里列出的方法来获取xpath等.

我的代码非常简单:

library(httr)
library(rvest)
un = "username"; pw = "password"

thexpath <- "//*[@id="theFormOnThePage"]/fieldset/table"    

url1 <- "https://biglonghairyURL.do?blah=yadda"

stuff1 <- read_html(url1, authenticate(un, pw))
Run Code Online (Sandbox Code Playgroud)

这给我一个错误:"对等证书无法使用给定的CA证书进行身份验证."

撇开不向上到datedness证书的,我已经看到,它可能使用HTTR避免SSL验证使用set_config(config(ssl_verifypeer = 0L)).

如果我使用来自httr的GET(url1),这只会很好用,但重点是使用rvest自动抓取表格.

看看Rvesthttr的PDF ,似乎Rvest调用httr传递curl命令,而在httr中,你可以使用config().

那么,要完成三段论,我怎么能(或者甚至可能?)直接通过rvest :: read_html传递ssl_verifypeer = 0L?

我尝试了很多变化:

stuff1 <- read_html(url1, authenticate(un, pw), ssl_verifypeer = 0L)) 
stuff1 <- read_html(url1, authenticate(un, pw), config(ssl_verifypeer = 0L))) 
stuff1 <- with_config(config = config(ssl_verifypeer = 0L), read_html(url1, authenticate(un, pw)))
Run Code Online (Sandbox Code Playgroud)

并且所有这些都抛出相同的错误"对等证书无法使用给定的CA证书进行身份验证".

希望这是可能的,我只是没有把正确的语法放在一起?

有人建议使用RSelenium,但由于这是在受保护的VM中,安装java和/或新软件包需要采取国会行为(以及VP签收),这将是我的最后手段.

我非常感谢任何有关这方面的建议.

ssl curl r httr rvest

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

如何使用R网页抓取点击信息?

我正试图从这个网站上删除电话号码:http://olx.pl/oferta/pokoj-1-os-bielany-encyklopedyczna-CID3-IDdX6wf.html#c1c0e14c53.可以使用rvest带选择器的包来抓取电话号码.\'id_raw\'\::nth-child(1) span+ div strong(由selectorGadget建议).

问题是在点击掩码后可以获得信息.所以我不得不打开一个会话,提供一个点击,然后抓取信息.

编辑顺便说一下,它不是一个链接imho.看看来源.我有一个问题,因为我是一个普通的R用户,而不是一个javascript程序员.

在此输入图像描述

r web-scraping rvest

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

使用rvest刮擦跨度的html表

我正在使用rvest来提取下一页中的表格:

https://en.wikipedia.org/wiki/List_of_United_States_presidential_elections_by_popular_vote_margin

以下代码有效:

URL <- 'https://en.wikipedia.org/wiki/List_of_United_States_presidential_elections_by_popular_vote_margin'
table <- URL %>%  
  read_html %>% 
  html_nodes("table")  %>% 
  .[[2]] %>% 
  html_table(trim=TRUE)
Run Code Online (Sandbox Code Playgroud)

但是边缘和总统名称的列有一些奇怪的价值.原因是源代码具有以下内容:

<td><span style="display:none">00.001</span>?10.44%</td>
Run Code Online (Sandbox Code Playgroud)

所以不是得到-10.44%而是得到00.001'10.44%

我怎么能解决这个问题?

r html-table web-scraping rvest

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

如何在rvest中设置超时

一个简单的问题:此代码x <- read_html(url)挂起并读取页面无数秒。我不知道如何处理此问题,例如,通过设置一些最大响应时间。我可以使用try,catch和任何重试方法。但这只是挂起,没有任何反应。有人知道如何处理吗?

页面没有问题,有时会发生,而当我手动重试时,它会起作用。

timeout r rvest

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

使用RVest使用“加载更多”按钮发布抓取页面

我想获取此页面上列出的atm的链接:https : //coinatmradar.com/city/345/bitcoin-atm-birmingham-uk/

我需要对页面底部的“加载更多”按钮做些什么?

我一直在使用选择器工具,可以下载chrome来选择CSS路径。

我写了下面的代码块,它似乎只检索前十个链接。

library(rvest)

base <- "https://coinatmradar.com/city/345/bitcoin-atm-birmingham-uk/"
base_read <- read_html(base)
atm_urls <- html_nodes(base_read, ".place > a")
all_urls_final <- html_attr(atm_urls, "href" )
print(all_urls_final)
Run Code Online (Sandbox Code Playgroud)

我希望能够检索到该区域中列出的atm的所有链接,但是我的R代码尚未这样做。

任何帮助都会很棒。抱歉,这是一个非常简单的问题。

screen-scraping r web-scraping rvest

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

在 R 中,使用 rvest 和 xml2 从网站上的 &lt;script&gt; 元素中提取 JSON 对象

之前在此页面上发布了有关在 PGA 网站的排行榜页面上抓取表格的相关 stackoverflow 问题。总结那篇文章,由于该页面使用 javascript 呈现页面和表格的方式,排行榜显然难以抓取。

我可以检查并在标签中看到有一个global.leaderboardConfig包含有用信息的对象:

在此处输入图片说明

是否可以将此对象作为 R 中的列表获取?我能够使用 获取页面上的所有 76 个脚本元素xml2::read_html('https://www.pgatour.com/leaderboard.html') %>% html_nodes('script'),但是我不确定如何识别所需的特定脚本标记,也不知道如何从中获取对象。

编辑:在 devtools 的网络选项卡中,还有这个请求提供获取数据的 API 调用的链接。与从脚本标签中获取对象相比,获取所有网络请求并筛选这些请求是否更容易?

在此处输入图片说明

r web-scraping rvest xml2

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

标签 统计

r ×10

rvest ×10

web-scraping ×6

httr ×2

javascript ×2

screen-scraping ×2

curl ×1

html-table ×1

memory ×1

scraper ×1

ssl ×1

timeout ×1

xml2 ×1