Через некоторое время go я ответил на мой вопрос: Как мне найти все узлы без дочерних элементов (начиная с не root узла!) В xpath / R? после некоторой попытки.
Но иногда я нахожу исключения:
library(magrittr)
library(xml2)
url <- "https://kcsouthern.silkroad.com/epostings/index.cfm?fuseaction=app.jobsearch"
node <- url %>%
read_html %>%
html_nodes(xpath = "/html/body/div[1]/div/div[2]/div[3]/table/tr[2]")
Я не нахожу все узлы без дочерних элементов, как это:
> node %>% html_nodes(xpath = "*//*[not(descendant::*)]")
{xml_nodeset (1)}
[1] <a id="jobTitle_220359" href="index.cfm?fuseaction=app.jobinfo&jobid=…
Но после преобразования в строку и "re -читать "как XML я делаю:
> node %>%
toString %>%
read_html %>%
html_nodes(xpath = "*//*[not(descendant::*)]")
{xml_nodeset (3)}
[1] <td align="center" class="cssSearchResultsBody">220359-021</td>
[2] <a id="jobTitle_220359" href="index.cfm?fuseaction=app.jobinfo&jobid...
[3] <td align="left" class="cssSearchResultsBody">Kansas City, Missouri, United States</td>
Редактировать: Дальнейший анализ, касающийся ответа Э. Уайста:
Использование пакета XML :
> url %>%
+ GET %>%
+ content(as = "text") %>%
+ XML::htmlParse() %>%
+ XML::xpathSApply(path = "(//tr[@class='cssSearchResultsHighlight'])[1]//*[not(.//*)]")
[[1]]
<td align="center" class="cssSearchResultsBody">220359-021</td>
[[2]]
<a id="jobTitle_220359" href="....">SAP HR/Payroll Specialist</a>
[[3]]
<td align="left" class="cssSearchResultsBody">Kansas City, Missouri, United States</td>
Теперь эквивилиант с xml2 / rvest: (тоже, кажется, работает)
> url %>%
+ read_html %>%
+ html_nodes(xpath = "//tr[@class='cssSearchResultsHighlight'][1]//*[not(.//*)]")
{xml_nodeset (3)}
[1] <td align="center" class="cssSearchResultsBody">220359-021</td>
[2] <a id="jobTitle_220359" href="index.cfm?fuseaction=app.jobinfo&jobid=220359&...
[3] <td align="left" class="cssSearchResultsBody">Kansas City, Missouri, United States</td>
Скорее, проблема в том, что человек начинает поиск с не root узел?
> url %>%
+ read_html %>%
+ html_nodes(xpath = "//tr[@class='cssSearchResultsHighlight'][1]") %>%
+ html_nodes(xpath = "*[not(.//*)]")
{xml_nodeset (2)}
[1] <td align="center" class="cssSearchResultsBody">220359-021</td>
[2] <td align="left" class="cssSearchResultsBody">Kansas City, Missouri, United States</td>