0

使用 R 和 XML 包,我使用 XML htmlParse 函数解析了一个 ("HTMLInternalDocument" "HTMLInternalDocument" "XMLInternalDocument" "XMLAbstractDocument") 对象。我感兴趣的 xml 对象中的行(见下文)包含我希望返回的两个值。

除了来自 class=gsc_1usr_name 的值(返回“Konrad Wrzecionkowski”)之外,我还需要提取“user=”下的值,在本例中为“QnVgFlYAAAAJ”。我用 xpathSApply 尝试了几种语法变体,它总是返回 NULL。诚然,我对 xml 很无知,有什么想法吗?有没有办法可以将它强制转换为不同的对象类,例如列表,然后在向量上使用拆分?标准强制转换(例如 as.list、as.character)似乎不适用于这个对象类。

search.page <- "http://scholar.google.com/citations?hl=en&view_op=search_authors&mauthors=GVN Powell World Wildlife Fund"
x <- XML::htmlParse(search.page, encoding="UTF-8")

它返回一个 xml 对象,下面是单个条目的子集,共 10 个。该h3 class="gsc_1usr_name行包含每个条目中我想要检索的值(对于所有 10 个)。

</div>
</div>
<div class="gsc_1usr gs_scl">
<div class="gsc_1usr_photo"><a href="/citations?user=QnVgFlYAAAAJ&amp;hl=en&amp;oe=ASCII"><img src="/citations?view_op=view_photo&amp;user=QnVgFlYAAAAJ&amp;citpid=3" sizes="(max-width:599px) 75px,(max-width:1251px) 100px, 120px" srcset="/citations?view_op=view_photo&amp;user=QnVgFlYAAAAJ&amp;citpid=3 128w,/citations?view_op=medium_photo&amp;user=QnVgFlYAAAAJ&amp;citpid=3 256w" alt="Konrad Wrzecionkowski"></a></div>
<div class="gsc_1usr_text">
<h3 class="gsc_1usr_name"><a href="/citations?user=QnVgFlYAAAAJ&amp;hl=en&amp;oe=ASCII">Konrad Wrzecionkowski</a></h3>
<div class="gsc_1usr_aff">Zachodniopomorski Uniwersytet Technologiczny w Szczecinie, Błękitny Patrol <span class="gs_hlt">WWF </span>Polska</div>
<div class="gsc_1usr_eml">Verified email at <span class="gs_hlt">wwf</span>.pl</div>
<div class="gsc_1usr_emlb">@wwf.pl</div>
<div class="gsc_1usr_int">
<a class="gsc_co_int" href="/citations?view_op=search_authors&amp;hl=en&amp;oe=ASCII&amp;mauthors=label:ichtiologia_ochrona_przyrody">ichtiologia / ochrona przyrody</a> </div>
</div>
</div>

对 xpathSApply 函数使用以下语法,我返回“GVN Powell”,但也想要来自 user= 的值。我已经尝试了 h3[@user=''] 的变体,包括类的子查询,但是不能让其他任何东西工作。

XML::xpathSApply(x, "//h3[@class='gsc_1usr_name']", xmlValue)

我一直使用的方法是使用 url 和 readLines。然后我使用 strsplit 来提取所需的值。

auth.names <- "Konrad Wrzecionkowski WWF"    
search.page <- paste("http://scholar.google.com/citations?hl=en&view_op=search_authors&mauthors=", auth.names, sep="")

x <- readLines(url(search.page))
x <- strsplit(x[[1]], split="user=")[[1]][2]
x <- strsplit(x, split="&amp;")[[1]][1]

这里的问题是 Google Scholar 似乎不喜欢网络抓取,并且代码会定期失败,并出现“无法打开连接,HTTP 状态为 '503 服务不可用”错误。但是,htmlParse 似乎并非如此。

4

1 回答 1

1
library(rvest)
library(magrittr)

url <- "http://scholar.google.com/citations?hl=en&view_op=search_authors&mauthors=GVN Powell World Wildlife Fund"
xpath = "//*[@id=\"gsc_ccl\"]/div[1]/div[2]/h3/a/span"

gvn.powell <- url %>%
  read_html %>%
  html_nodes(xpath = xpath) %>%
  html_text

gvn.powell
#[1] "GVN Powell"
于 2017-08-04T00:30:40.910 回答