gpt4 book ai didi

html - 从 R : option values in specific select elements 中的 HTML 页面中提取数据

转载 作者:数据小太阳 更新时间:2023-10-29 02:53:27 27 4
gpt4 key购买 nike

我刚开始尝试使用 R 从网站提取数据。EIA 有一个网页提供对其数据的交互式访问,我想提取可用数据的年份范围。

我想提取选项的值,但只针对网页上的特定选择元素(名为“year1”)。我该怎么做?

<span id="sub3">
<label for="year">Start Year:</label>
<select name="year1" id="year" style="font-size:12px;padding:4px 2px;border:solid 1px #aacfe4;" onchange="activeB()">
<option value="2012">2012</option>
<option value="2011">2011</option>
<option value="2010">2010</option>
<option value="2009">2009</option>
<option value="2008" selected="selected">2008</option>
<option value="2007">2007</option>
<option value="2006">2006</option>
<option value="2005">2005</option>
<option value="2004">2004</option>
<option value="2003">2003</option>
<option value="2002">2002</option>
<option value="2001">2001</option>
<option value="2000">2000</option>
<option value="1999">1999</option>
<option value="1998">1998</option>
<option value="1997">1997</option>
<option value="1996">1996</option>
<option value="1995">1995</option>
<option value="1994">1994</option>
<option value="1993">1993</option>
<option value="1992">1992</option>
<option value="1991">1991</option>
<option value="1990">1990</option>
<option value="1989">1989</option>
<option value="1988">1988</option>
<option value="1987">1987</option>
<option value="1986">1986</option>
<option value="1985">1985</option>
<option value="1984">1984</option>
<option value="1983">1983</option>
<option value="1982">1982</option>
<option value="1981">1981</option>
<option value="1980">1980</option>
</select>
</span>

我已经下载了页面并提取了页面上的所有选项值,但我一直试图只提取“year1”选择元素中的那些选项。

library(XML)
webpage <- readLines("http://www.eia.gov/cfapps/ipdbproject/IEDIndex3.cfm?tid=2&pid=2&aid=12")
htmlpage <- htmlParse(webpage, asText = TRUE)
pageoptions <- xpathSApply(htmlpage, "//option", function(u) xmlAttrs(u)["value"])

给出:

head(pageoptions)

value value value value value value
"regions" "2012" "2011" "2010" "2009" "2008"

如您所见,包含了另一个select 列表。

那么,假设页面结构保持不变但可用的日期范围可能会随时间变化,我如何才能只获得 2008 - 2012 年的值?

谢谢。

编辑

接受的答案适用于以下代码:

year <- c(NA_integer_, NA_integer_)
startline <- grep(pattern = "XMLinclude.*syid=", x = webpage, value = FALSE)
year[1] <- sub(pattern = "^.*syid=(.*)&eyid.*", replacement = "\\1", x = webpage[startline])
year[2] <- sub(pattern = "^.*eyid=(.*)&form.*", replacement = "\\1", x = webpage[startline])

Profiling,在内存分配上有很大的不同,其中xml_func是jdharrison的解决方案,url_func是hvollmeier的解决方案,noxml_func是我在 sleep 时想到的第三个解决方案(使用grep找到的开始select 控件,然后使用 while 循环遍历选项值,直到找到 select 的末尾并使用 gsub 提取值):

   time  alloc release  dups                        ref                     src
1 0.001 0.392 0 0 .active-rstudio-document#7 wrapper_func/noxml_func
2 0.019 13.853 0 12332 .active-rstudio-document#8 wrapper_func/xml_func
3 0.001 0.000 0 129 .active-rstudio-document#9 wrapper_func/url_func

最佳答案

span[@id='sub3'] 上添加一个额外的过滤器以缩小搜索范围

library(XML)
webpage <- readLines("http://www.eia.gov/cfapps/ipdbproject/IEDIndex3.cfm?tid=2&pid=2&aid=12")
htmlpage <- htmlParse(webpage, asText = TRUE)
pageoptions <- xpathSApply(htmlpage, "//span[@id='sub3']/*/option", function(u) xmlAttrs(u)["value"])

> pageoptions
value value value value value value value value value value
"2012" "2011" "2010" "2009" "2008" "2007" "2006" "2005" "2004" "2003"
value value value value value value value value value value
"2002" "2001" "2000" "1999" "1998" "1997" "1996" "1995" "1994" "1993"
value value value value value value value value value value
"1992" "1991" "1990" "1989" "1988" "1987" "1986" "1985" "1984" "1983"
value value value
"1982" "1981" "1980"

"//select[@name='year1']/option" 因为你的 xpath 也可以工作

关于html - 从 R : option values in specific select elements 中的 HTML 页面中提取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24350001/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com