从XML节点解析特定值

时间:2017-08-03 23:55:54

标签: r xml htmlparse xpathsapply

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

除了来自class = gsc_1usr_name的值(返回" Konrad Wrzecionkowski")之外,我需要提取" user ="下的值。在这种情况下,这是" QnVgFlYAAAAJ"。我用xpathSApply尝试了几种语法变体,它总是返回NULL。不可否认,当谈到xml,我有点无能为力?有没有办法可以将其强制转换为不同的对象类,例如list,然后在向量上使用split?标准强制(例如,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函数使用以下语法,我返回&#34; GVN Powell&#34;但是也想要来自user =的值。我尝试了h3 [@user =&#39;&#39;]的变体,包括类的子查询,但是,无法获得其他任何工作。

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学术搜索似乎不喜欢网页抓取,而且代码会定期失败,并且#34;无法打开连接,HTTP状态为“服务不可用”#34;错误。但是,htmlParse似乎并非如此。

1 个答案:

答案 0 :(得分:1)

if( all objects.email match ) {
     // they are all the same
} else {
    // They are not the same
}