And*_*rew 4 xml xpath r web-scraping
我是XPath的新手 - 请放轻松我.
无法在目标页面上为不具有大量结构的元素提取XPath.
我已经想出如何拉出带有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"]')
Run Code Online (Sandbox Code Playgroud)
但是在没有很多额外识别信息可以解决的情况下遇到麻烦.
例如,具有学校名称和分区的表格如下所示:
<table cellpadding="0" cellspacing="0">
<tr>
<td><strong>SCHOOL:</strong></td>
<td> New Jersey Ave</td>
</tr>
<tr>
<td><strong>COUNTY:</strong></td>
<td> Atlantic</td>
</tr>
<tr>
<td><strong>DISTRICT:</strong></td>
<td> Atlantic City</td>
</tr>
</table>
Run Code Online (Sandbox Code Playgroud)
我的策略是"找到表格并拥有文本的节点 COUNTY
尽可能多地阅读关于XPath的内容,我正在尝试这样做:
names = getNodeSet(doc,'//table and //*[contains(text(),"COUNTY")]')
Run Code Online (Sandbox Code Playgroud)
但它不是返回表节点,而是给我一个布尔TRUE
值.
所以,问题是:我如何使用XPath查找具有COUNTY和SCHOOL文本的表?
我已经尝试了很多其他策略,但收效甚微.其他人建议的一种方法就是使用以下方法提取每个表数据单元:
xpathApply( htmlTreeParse(url, useInt=T), "//td", function(x) xmlValue(x))
Run Code Online (Sandbox Code Playgroud)
但是模板对于缺失数据并不一致 - 不完整的报告具有完全不同的结构,并且元素在2,000多个页面中的位置不同.
任何帮助是极大的赞赏!
使用xpath,获取所有表
xpathSApply( doc, "//table[contains(.,'SCHOOL:')
and contains(.,'COUNTY') ]",xmlValue)
Run Code Online (Sandbox Code Playgroud)
得到这一行
xpathSApply( doc, "//tr/td[contains(.,'SCHOOL:')
and contains(.,'COUNTY') ]",xmlValue)
Run Code Online (Sandbox Code Playgroud)