【发布时间】:2014-04-27 21:13:23
【问题描述】:
我正在抓取以下网站:http://en.wikipedia.org/wiki/List_of_Presidents_of_the_United_States
假设我有兴趣刮掉第四任总统 - 我可以从表格中看到它是“詹姆斯麦迪逊”。使用 Chrome 浏览器,我可以快速识别 Xpath(检查元素,复制 XPath)。这给了我:“//*[@id='mw-content-text']/table[1]/tbody/tr[7]/td[2]/b/a”。但是,这不适用于 R:
library(XML)
url <- "http://en.wikipedia.org/wiki/List_of_Presidents_of_the_United_States"
html <- htmlTreeParse(url,useInternalNodes=T)
xpath <- paste("//*[@id='mw-content-text']/table[1]/tbody/tr[7]/td[2]/b/a",sep="")
xpathSApply(html, xpath, xmlValue)
返回 NULL。此处使用的正确 XPath 是“//*[@id='mw-content-text']/table[1]/tr[7]/td[2]/b/a” .所以我的问题是:
- 如何更改 R 中的设置,以便 R 看到与我的 Chrome 浏览器相同的 XPath?我相信这与http用户代理有关吗? This post 提出了类似的问题,但答案没有提供足够的细节。
- 如果这不可能,我如何使用 XML 包快速识别导致“James Madison”的正确 XPath?即“//*[@id='mw-content-text']/table[1]/tr[7]/td[2]/b/a”
谢谢!
【问题讨论】:
-
如果 Chrome 自动生成
tbody,为什么不在查询中直接生成sub:xpathSApply(html, sub('tbody', '', xpath), xmlValue)?
标签: r xpath web-scraping