我正在尝试(相当不成功)使用 R 从网站(www.majidata.co.ke)抓取一些数据。我已经设法抓取 HTML 并解析它,但现在有点不确定如何提取我实际上的位需要!
使用XML库,我使用以下代码抓取我的数据:
majidata_get <- GET("http://www.majidata.go.ke/town.php?MID=MTE=&SMID=MTM=")
majidata_html <- htmlTreeParse(content(majidata_get, as="text"))
Run Code Online (Sandbox Code Playgroud)
这给我留下了(大)XMLDocumentContent。网页上有一个下拉列表,我想从中抓取值(与不同城镇的名称和 ID 号相关)。我想提取的位是<option value ="XXX">大写字母后面的数字和名称。
<div class="regiondata">
<div id="town_data">
<select id="town" name="town" onchange="town_data(this.value);">
<option value="0" selected="selected">[SELECT TOWN]</option>
<option value="611">AHERO</option>
<option value="635">AKALA</option>
<option value="625">AWASI</option>
<option value="628">AWENDO</option>
<option value="749">BAHATI</option>
<option value="327">BANGALE</option>
Run Code Online (Sandbox Code Playgroud)
理想情况下,我希望将这些放在 data.frame 中,其中第一列是数字,第二列是名称,例如
ID Name
611 AHERO
635 AKALA
625 AWASI
Run Code Online (Sandbox Code Playgroud)
等等。
我真的不确定从这里去哪里。我曾想过使用正则表达式并匹配文本中的模式,尽管我从许多论坛上读到这是一个坏主意,因为使用 xpath 更好/更有效。除了认为我需要以xpathApply某种方式使用之外,我不太确定从哪里开始。
我正在尝试使用 R 和 SelectorGadget 中的 rvest 包来识别我的 CSS 选择器,从 Glassdoor(API 仅提供摘要评级)中提取单个评级。
问题是 Glassdoor 使用图像来传达评级,但数字评级包含在图像标题中。使用 SelectorGadget,我可以从下面的代码片段中抓取“Comp & Benefits”文本(使用“#EmployerReviews undecorated li”),但我无法进入 span...title= 部分中的“2.0”是我想要的。
<div id='EmployerReviews'> .... <ul class='undecorated'> <li> <div class='minor'>Comp & Benefits</div> <span class='notranslate notranslate_title gdBars gdRatings med ' title="2.0">
Run Code Online (Sandbox Code Playgroud)
过去有没有人成功抓取图片标题,或者知道获得这些个人评分的另一种方法?
我的目标是library(tm)在一个相当大的 word 文档上使用该工具包。word文档有合理的排版,所以我们有h1主要部分,一些h2和h3副标题。我想对每个部分进行比较和文本挖掘(每个部分下面的文本h1- 副标题并不重要 - 因此可以包含或排除它们。)
我的策略是将worddocument导出为html,然后使用pacakgervest提取段落。
library(rvest)
# the file has latin-1 chars
#Sys.setlocale(category="LC_ALL", locale="da_DK.UTF-8")
# small example html file
file <- rvest::html("https://83ae1009d5b31624828197160f04b932625a6af5.googledrive.com/host/0B9YtZi1ZH4VlaVVCTGlwV3ZqcWM/tidy.html", encoding = 'utf-8')
nodes <- file %>%
rvest::html_nodes("h1>p") %>%
rvest::html_text()
Run Code Online (Sandbox Code Playgroud)
我可以提取所有<p>用html_nodes("p"),但是那只是一个大的汤。我需要分别分析每个h1。
最好的可能是一个列表,p每个h1标题都有一个标签向量。也许是一个类似的循环for (i in 1:length(html_nodes(fil, "h1"))) (html_children(html_nodes(fil, "h1")[i]))(这是行不通的)。
如果有一种方法可以从内部整理单词 html,则奖励 rvest
这是我的可重现示例:
library(rvest)
page <- html("http://google.com")
class(page)
page
> as.character(page)
Error in as.vector(x, "character") :
cannot coerce type 'externalptr' to vector of type 'character'
Run Code Online (Sandbox Code Playgroud)
如何将页面从 html 类转换为字符向量,以便将其存储在某处?
html_text 或 html_attr 之类的 html 函数没有给我完整的源代码。我想存储它,以便以后可以使用 html() 重新加载它。
谢谢。
我已经构建了一个功能,它可以获取网址并在抓取网页后返回所需的结果.功能如下:
library(httr)
library(curl)
library(rvest)
library(dplyr)
sd_cat <- function(url){
cat <- curl(url, handle = new_handle("useragent" = "myua")) %>%
read_html() %>%
html_nodes("#breadCrumbWrapper") %>%
html_text()
x <- cat[1]
#y <- gsub(pattern = "\n", x=x, replacement = " ")
y <- gsub(pattern = "\t", x=x, replacement = " ")
y <- gsub("\\d|,|\t", x=y, replacement = "")
y <- gsub("^ *|(?<= ) | *$", "", y, perl=T)
z <- gsub("\n*{2,}","",y)
z <- gsub(" {2,}",">",z)
final <- substring(z,2)
final <- substring(final,1,nchar(final)-1)
final
#sample discontinued url: "http://www.snapdeal.com//product/givenchy-xeryus-rouge-g-edt/1978028261" …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用r包rvest中的read_html来获取数据表。
我试过下面的代码:
library(rvest)
raw <- read_html("https://demanda.ree.es/movil/peninsula/demanda/tablas/2016-01-02/2")
Run Code Online (Sandbox Code Playgroud)
我不认为上述内容是从表格中提取数据的,因为我看到“原始”是2的列表:
'node:<externalptr>' and 'doc:<externalptr>'
Run Code Online (Sandbox Code Playgroud)
我也尝试过使用xpath:
html_nodes(raw,xpath = '//*[(@id = "tabla_generacion")]//*[contains(concat( " ", @class, " " ), concat( " ", "ng-scope", " " ))]')
Run Code Online (Sandbox Code Playgroud)
关于下一步尝试的任何建议?
谢谢。
我正在使用"rvest"-package 抓取这个网站.当我迭代我的函数太多次时,我得到"open.connection(x,"rb")中的错误:达到了超时".我搜索过类似的问题,但答案似乎导致死路一条.我怀疑它是服务器端,并且网站对我可以访问该页面的次数有内置限制.怎么调查这个假设?
代码:我有到底层网页的链接,并希望构建一个数据框,其中包含从相关网页中提取的信息.我稍微简化了我的抓取功能,因为更简单的功能仍然会出现问题:
scrape_test = function(link) {
slit <- str_split(link, "/") %>%
unlist()
id <- slit[5]
sem <- slit[6]
name <- link %>%
read_html(encoding = "UTF-8") %>%
html_nodes("h2") %>%
html_text() %>%
str_replace_all("\r\n", "") %>%
str_trim()
return(data.frame(id, sem, name))
}
Run Code Online (Sandbox Code Playgroud)
我使用purrr-package map_df()来迭代函数:
test.data = links %>%
map_df(scrape_test)
Run Code Online (Sandbox Code Playgroud)
现在,如果我仅使用50个链接迭代该函数,则不会收到任何错误.但是当我增加链接的数量时,我遇到了前面提到的错误.此外,我收到以下警告:
编辑:以下代码创建链接对象可用于重现我的结果:
links <- c(rep("http://karakterstatistik.stads.ku.dk/Histogram/NMAK13032E/Winter-2013/B2", 100))
Run Code Online (Sandbox Code Playgroud) 该方法html_text()(来自 R Package rvest)连接节点及其所有子节点的文本。我只想提取父亲的文字。
对于下面的例子,html_text()给出HELLO GOODBYE。
我只想得到GOODBYE。我怎么才能得到它?
<div class="joke">
<div class="div_inside">
<div class="title_inside">
<a class="link" href="sompage.htm">HELLO</a>
</div>
</div>
GOODBYE
</div>Run Code Online (Sandbox Code Playgroud)
这是我的代码:
library(rvest)
#login
url <- "https://secure.usnews.com/member/login?ref=https%3A%2F%2Fpremium.usnews.com%2Fbest-graduate-schools%2Ftop-medical-schools%2Fresearch-rankings"
session <- html_session(url)
form <- html_form(read_html(url))[[1]]
filled_form <- set_values(form,
username = "notmyrealemail",
password = "notmyrealpassword")
submit_form(session, filled_form)
Run Code Online (Sandbox Code Playgroud)
这是我得到的输出后submit_form:
<session> https://premium.usnews.com/best-graduate-schools/top-medical-schools/research-rankings
Status: 200
Type: text/html; charset=utf-8
Size: 286846
Run Code Online (Sandbox Code Playgroud)
我认为这意味着它有效吗?如果是这样,我如何read_html在登录后出现的页面上?
我正在使用rvest和read_html尝试抓取网站。刮刮之前对我有用,但现在不起作用了。使用R版本3.4.2和rvest 0.3.2
这是我的代码:
library(rvest)
read_html("http://hamilton.edu/news/story/the-medias-effect-on-womens-body-image")
Run Code Online (Sandbox Code Playgroud)
我的错误是:
Error in read_connection_(x, n) :
Evaluation error: Failure when receiving data from the peer.
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?