xml - R XML + XPath - 具有多个条件的getNodeSet

标签 xml r xpath web-scraping

我是 XPath 的新手 - 请放轻松。

在我的目标页面上为没有很多结构的元素提取 XPath 时遇到问题。

数据集是NJ学校report cards .个人成绩单看起来像this

我已经想出如何提取具有 summary 标签的表格:

url <- paste("http://education.state.nj.us/rc/rc11/rcreport.php?c=",
  all_sch[i,1],";d=",all_sch[i,2],";s=",all_sch[i,3],sep = '')
doc = htmlParse(url)
admin_salaries = getNodeSet(doc, '//table[@summary="Administrative Salaries and Benefits"]')

但是我遇到了麻烦,因为没有很多额外的识别信息可以处理。

例如,包含学校名称和地区的表如下所示:

        <table cellpadding="0" cellspacing="0">
          <tr>
            <td><strong>SCHOOL:</strong></td>
            <td>&nbsp;New Jersey Ave</td>
          </tr>
          <tr>
            <td><strong>COUNTY:</strong></td>
            <td>&nbsp;Atlantic</td>
          </tr>
          <tr>
            <td><strong>DISTRICT:</strong></td>
            <td>&nbsp;Atlantic City</td>
          </tr>
        </table>

我的策略是“找到作为表的节点并具有文本COUNTY

Reading尽可能多地了解 XPath,我正在尝试这样做:

names = getNodeSet(doc,'//table and //*[contains(text(),"COUNTY")]')

但是它没有返回表节点,而是给了我一个 bool 值 TRUE

因此,问题是:如何使用 XPath 查找包含文本 COUNTY 和 SCHOOL 的表?

我尝试了很多其他策略,但收效甚微。其他人建议的一种方法是使用如下方式简单地提取每个表格数据单元格:

xpathApply( htmlTreeParse(url, useInt=T), "//td", function(x) xmlValue(x))

但模板对于缺失数据并不一致 - 不完整的报告具有截然不同的结构,并且元素在 2,000 多页中的位置也不相同。

非常感谢任何帮助!

最佳答案

使用xpath,获取所有表

xpathSApply( doc, "//table[contains(.,'SCHOOL:') 
                  and contains(.,'COUNTY') ]",xmlValue)

只获取行

xpathSApply( doc, "//tr/td[contains(.,'SCHOOL:') 
                   and contains(.,'COUNTY') ]",xmlValue)

关于xml - R XML + XPath - 具有多个条件的getNodeSet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13637420/

相关文章:

python - 如何在python中修改和枚举XML标签

java - 如何将 pojo 设置为 moxy?

R - 将每个向量元素递归地添加到数据帧的变量中

xpath - 我如何制定此 XPath 表达式来选择 sibling ?

c# - 从 XML 获取值?

php - 我如何使用 php 创建基于模式的 xml 文档?

从 Stargazer .tex 输出中删除\begin{tabular}

javascript - 日期 x 轴上的 Highcharter 注释不起作用 - R

java - 如何使用 Selenium 和 Java 在网页上查找文本并获取其 XPath 或 CSS

xslt - XSL 子串和 indexOf