2016-05-19 23 views
0

htmlTreeParseを使用して、巨大な解析HTMLファイルから情報を削り取ろうとしています。 xpathSApplyを使用して必要なフィールドから情報を抽出しています。フィールドは順番に並べられているため、次のフィールドの情報は常に前のフィールドの情報の下にあります。R - 特定の行からhtmlファイルを読み込みます。

xpathSApply関数は永遠に使用され、より効率的にする方法があるかどうかは疑問でした。 xpathSApply関数は、最初から解析されたhtmlファイルの読み込みを開始することを強く信じています。したがって、既に読み込まれている有用なデータを含んでいないhtmlコードが多く読み込まれます。私はxpathSApplyに前回の読書を終えた行からの読書を開始するように指示する方法があるかどうかを調べようとしていました。次のように

コードは次のとおりです。

nomcorpN <- xpathSApply(doc.html, "//*//input[@name='_ctl0:PlaceHolderContenido:nomcorpN']/@value") 

    codigoINE <- xpathSApply(doc.html, "//*//input[@name='_ctl0:PlaceHolderContenido:codigoINE']/@value") 

    codigo <- xpathSApply(doc.html, "//*//input[@name='_ctl0:PlaceHolderContenido:codigo']/@value") 

#... 

などなど異なる分野の多くのために。私はそれがnomcorpNの情報を見つけた行を保ちたいと思い、その行からcodigoINEを探し始めます。そこにはcodigoINEという行があり、その行にはcodigoがあります。

これを達成する方法はありますか? 皆様に感謝します!

+0

HTMLを見ずに何を示唆するのは難しいです。私はdropboxのようなサイトにあなたのファイルをアップロードし、ここにリンクを投稿することをお勧めします。または、すべてのデータを明らかにしたくない場合は、少なくとも同じ構造を持つダミーファイルを用意してください。 –

+0

問題はありません。ここにあります:https://www.dropbox.com/s/lwvfxpcoa0ipwih/FederacionEspanoladeMunicipiosyProvincias.html?dl=0 – OBT

答えて

0

はそれだけで'_ctl0:PlaceHolderContenido'を含む名前のinputノードに含まれる値のリストを与えるこの

library(rvest) 
read_html(file) %>% 
    html_nodes(xpath = "//input[contains(@name,'_ctl0:PlaceHolderContenido')]/@value")%>% 
    html_text() 

を試してみてください。

またはこれらのノードについてのより詳細な情報については:

library(rvest) 
library(plyr) 
read_html(file) %>% 
    html_nodes(xpath = "//input[contains(@name,'_ctl0:PlaceHolderContenido')]") %>% 
    html_attrs() %>% 
    sapply(function(x) as.list(x) %>% as.data.frame) %>% 
    do.call(rbind.fill, .) 
+0

うまく動作します!はるかに高速です。しかし、なぜ私に説明できますか?ありがとう! – OBT

+0

必要なすべてのノードを1つの呼び出しで検索するので、それぞれのノードを個別に検索する必要がなくなります。 'xpathSApply'や' html_nodes'のような関数は、マッチの検索で文書全体を通すことを意味します。したがって、関数の呼び出しが少ないほど、高速になります。 –

+0

本当に感謝しています – OBT

関連する問題