我是 html 抓取世界的新手,并且在使用 R 中的 rvest 时难以在特定标题下拉出段落。我想从具有相对相似设置的多个站点中获取信息。它们都有相同的标题,但标题下的段落数可能会发生变化。我能够使用以下代码在标题下抓取特定段落:unitCode <- data.frame(unit = c('SLE010', 'SLE115', 'MAA103'))html <- sapply(unitCode, function(x) paste("http://www.deakin.edu.au/current-students/courses/unit.php?unit=", x, "&return_to=%2Fcurrent-students%2Fcourses%2Fcourse.php%3Fcourse%3DS323%26version%3D3", sep = ''))assessment <- html[3] %>% html() %>% html_nodes(xpath='//*[@id="main"]/div/div/p[3]') %>% html_text()'xpath' 元素在评估标题下拉入第一段。某些页面在评估标题下有多个段落,如果我更改“xpath”变量以具体指定它们,我可以获得这些段落,例如p[4] 或 p[5]。不幸的是,我想在数百页上迭代此过程,因此每次更改 xpath 都不合适,而且我什至不知道每个页面中会有多少段落。考虑到页面设置的不确定性,我认为在我感兴趣的标题之后拉所有 是最好的选择。我想知道是否有办法使用 rvest 或其他一些 R 抓取包在 Assessment 之后抓取所有 ? 最佳答案 我仅出于演示目的将其扩展。您应该能够将其应用于您的原始代码。覆盖您最终使用的命名空间中的名称确实不是一个好主意。另请注意,我使用的是最新的(github/devtools 版本) rvest ,它使用 xml2 和不推荐使用的 html 。关键是 xpath="//h3[contains(., 'Assessment')]/following-sibling::p" ,因此:library(rvest)unitCode <- data.frame(unit = c('SLE010', 'SLE115', 'MAA103'))sites <- sapply(unitCode, function(x) paste("http://www.deakin.edu.au/current-students/courses/unit.php?unit=", x, "&return_to=%2Fcurrent-students%2Fcourses%2Fcourse.php%3Fcourse%3DS323%26version%3D3", sep = ''))pg <- read_html(sites[1])pg_2 <- read_html(sites[2])pg_3 <- read_html(sites[3])pg %>% html_nodes(xpath="//h3[contains(., 'Assessment')]/following-sibling::p")## {xml_nodeset (2)}## [1] <p>This unit is assessed on a pass/fail basis. Multiple-choice on-line test ...## [2] <p style="margin-top: 2em;">\n <a href="/current-students/courses/course.php ...pg_2 %>% html_nodes(xpath="//h3[contains(., 'Assessment')]/following-sibling::p")## {xml_nodeset (3)}## [1] <p>Mid-trimester test 20%, three assignments (3 x 10%) 30%, examination 50%.</p>## [2] <p>* Rate for all CSP students, except for those who commenced Education and ...## [3] <p style="margin-top: 2em;">\n <a href="/current-students/courses/course.php ...pg_3 %>% html_nodes(xpath="//h3[contains(., 'Assessment')]/following-sibling::p")## {xml_nodeset (6)}## [1] <p>Assessment 1 (Group of 3 students) - Student video presentation (5-7 mins) ...## [2] <p>Assessment 2 (Group of 3 students) - Business plan (3500-4000 words) - 30% ...## [3] <p>Examination (2 hours) - 60%</p>## [4] <p><a href="http://www.deakin.edu.au/glossary?result_1890_result_page=H" targ ...## [5] <p>* Rate for all CSP students, except for those who commenced Education and ...## [6] <p style="margin-top: 2em;">\n <a href="/current-students/courses/course.php ...您也可以使用该 <p style="margin-top: 2em;"> 作为停止标记。您应该查看 xml2 的 as_list 以获得帮助。关于html - 使用 rvest 在 h 之后刮掉所有 p? (或其他 R 包),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31017018/ 10-12 17:34