2016-08-08 1 views
0

웹 페이지에서 데이터를 긁어 내기 위해 R에서 xml2 패키지를 사용하고 있습니다.서브 문자열을 포함하는 속성의 R에서 웹 스크래핑

<td> 
<a href="javascript:WebForm_DoPostBackWithOptions(new 
WebForm_PostBackOptions(&quot;ctl00$CenterContent$ctl01&quot;, 
&quot;&quot;, true, &quot;&quot;, &quot;&quot;, false, 
true))">Species A  
</a></td> 
<td> 
<a href="javascript:WebForm_DoPostBackWithOptions(new 
WebForm_PostBackOptions(&quot;ctl00$CenterContent$ctl02&quot;, 
&quot;&quot;, true, &quot;&quot;, &quot;&quot;, false, 
true))">Species B </a></td> 
<td><a href="javascript:WebForm_DoPostBackWithOptions(new 
WebForm_PostBackOptions(&quot;ctl00$CenterContent$ctl03&quot;, 
&quot;&quot;, true, &quot;&quot;, &quot;&quot;, false, 
true))">Sepcies C </a></td> 
<td> 
<a href="javascript:WebForm_DoPostBackWithOptions(new 
WebForm_PostBackOptions(&quot;ctl00$CenterContent$ctl04&quot;, 
&quot;&quot;, true, &quot;&quot;, &quot;&quot;, false, 
true))">Species D</a></td> 
<td> 
<a href="javascript:WebForm_DoPostBackWithOptions(new 
WebForm_PostBackOptions(&quot;ctl00$CenterContent$ctl05&quot;, 
&quot;&quot;, true, &quot;&quot;, &quot;&quot;, false, 
true))">Species E </a></td> 
내가 R에 다음 코드 줄을 사용하여 시도

: 위의 코드와

library(xml2) 
page = read_html(website) 
nodes = html_nodes(page, xpath='//td/a[@href*="javascript"]') 

가, 난 그냥 추출 할 내가 긁어 할 텍스트는 아래의 태그로 묶여 사람이 어떤 제안이있는 경우

xmlXPathEval: evaluation failed 
Warning message: 
In xpath_search(x$node, x$doc, xpath = xpath, nsMap = ns, num_results = Inf) : 
Invalid expression [1207] 

내가 감사하게 될 거라고 : 문자열 "자바 스크립트"를 포함하고 있는지를 href 속성을 가지고,하지만 난 오류 메시지가 아래 얻을 수있는 모든 노드.

모두에게 감사드립니다.

건배.

+0

를? 그렇지 않으면, 당신은 할 수있다 : rsc> : html_nodes ('t') %> rvest :: html_nodes ('a') %> % rvest :: html_attr ('href') %> % . [grepl ('javascript',.)]'. 파이프 운영자를 위해'magrittr' 패키지를 사용해야합니다. – Abdou

답변

2

당신은 href 당신이 관심있는 텍스트 포함 한 앵커 태그 찾기 위해 xpathcontains을 사용할 수 있습니다 : 당신이`xpath`를 사용하여 연결되어

library(xml2) 
library(rvest) 
website <- '<td> 
<a href="javascript:WebForm_DoPostBackWithOptions(new 
WebForm_PostBackOptions(&quot;ctl00$CenterContent$ctl01&quot;, 
&quot;&quot;, true, &quot;&quot;, &quot;&quot;, false, 
true))">Species A  
</a></td> 
<td> 
<a href="javascript:WebForm_DoPostBackWithOptions(new 
WebForm_PostBackOptions(&quot;ctl00$CenterContent$ctl02&quot;, 
&quot;&quot;, true, &quot;&quot;, &quot;&quot;, false, 
true))">Species B </a></td> 
<td><a href="javascript:WebForm_DoPostBackWithOptions(new 
WebForm_PostBackOptions(&quot;ctl00$CenterContent$ctl03&quot;, 
&quot;&quot;, true, &quot;&quot;, &quot;&quot;, false, 
true))">Sepcies C </a></td> 
<td> 
<a href="javascript:WebForm_DoPostBackWithOptions(new 
WebForm_PostBackOptions(&quot;ctl00$CenterContent$ctl04&quot;, 
&quot;&quot;, true, &quot;&quot;, &quot;&quot;, false, 
true))">Species D</a></td> 
<td> 
<a href="javascript:WebForm_DoPostBackWithOptions(new 
WebForm_PostBackOptions(&quot;ctl00$CenterContent$ctl05&quot;, 
&quot;&quot;, true, &quot;&quot;, &quot;&quot;, false, 
true))">Species E </a></td>' 
page <- read_html(website) 
nodes <- html_nodes(page, xpath='//td/a[contains(@href,"javascript")]') 

> nodes 
{xml_nodeset (5)} 
[1] <a href="javascript:WebForm_DoPostBackWithOptions(new &#10;WebForm_PostBackOptions(&quot;ctl00$CenterConte ... 
[2] <a href="javascript:WebForm_DoPostBackWithOptions(new&#10;WebForm_PostBackOptions(&quot;ctl00$CenterConten ... 
[3] <a href="javascript:WebForm_DoPostBackWithOptions(new&#10;WebForm_PostBackOptions(&quot;ctl00$CenterConten ... 
[4] <a href="javascript:WebForm_DoPostBackWithOptions(new&#10;WebForm_PostBackOptions(&quot;ctl00$CenterConten ... 
[5] <a href="javascript:WebForm_DoPostBackWithOptions(new&#10;WebForm_PostBackOptions(&quot;ctl00$CenterConten ... 
> 
+0

@jdharrison에게 감사드립니다. 그것은 완벽하게 작동했습니다. – ProfLonghair