html - 当 nth-child() 在页面之间变化时指定 CSS

标签 html css r apply rvest

我在抓取多个 HTML 元素时无法指定正确的 CSS 路径。问题是页面的设置略有不同,因此 nth-child(#) 指定的元素不同页面之间相差 1。那就是我对“单元代码”感兴趣的元素位于 nth-child(20)在某些页面和 nth-child(21)在别人身上。

我将在数百个站点上运行此程序,因此我需要弄清楚如何处理这种位置变化。此代码与 nth-child(21) 一起运行并且可以预料地为第二个 URL 返回不正确的文本。

我正在使用包 rvest .

library(rvest)
urls <- data.frame('site' = 1:2, 'urls' = c('https://www.deakin.edu.au/current-students/unitguides/UnitGuide.php?year=2015&semester=TRI-1&unit=SLE010',
                        'https://www.deakin.edu.au/current-students/unitguides/UnitGuide.php?year=2015&semester=TRI-2&unit=SLE339'))

urls$urls <- as.character(urls$urls)

uCode<- sapply(1:length(urls[,1]), function(x)
               html(urls[x,2]) %>% 
               html_nodes(css='#wmt_content > div:nth-child(21) > p.STANDARD') %>% 
               html_text())

每个页面的 html 都非常大,页面位于 first。和 second .包含单元代码以及一些额外的 div 的 HTML 如下所示:

 <div class="UnitGuideElementItem">
    <a name="0-UNIT-CODE"></a>
    <p style="font-size: 100%;" class="BOLD">
        "Unit code"
        <br>
        "&nbsp;"
        <br>
    <p style="font-size: 100%" class="STANDARD">
        "SLE334"
        <br>
    </p>
  </div>
  <div class="UnitGuideElementItem">
    <a name="0-UNIT-TITLE"></a>
    <p style="font-size: 100%;" class="BOLD">
       "Unit title"
       <br>
       "&nbsp;"
       <br>
    <p style="font-size: 100%" class="STANDARD">
       "Medical Microbiology and Immunology"
        <br>
  </div>
  <div class="UnitGuideElementItem">
     <a name="0-CONTACT-HOURS"></a>
     <p style="font-size: 100%;" class="BOLD">
        "Contact hours"
        <br>
        "&nbsp;"
        <br>
     <p style="font-size: 100%" class="STANDARD">
        "3 x 1 hour class per week, 5 x 3 hour practicals per trimester."
     <br>
  </div>

除了0-UNIT-CODE 之外,与其他部分相比,这部分HTML 代码没有任何独特之处。在<a>标签。通过查看 w3schools page我能够到达 <a>标签,但不知道如何指定 <p>此节点内的 sibling 。前往 <a>标签:

uCode<- sapply(1:length(urls[,1]), function(x)
               html(urls[x,2]) %>% 
               html_nodes(css='[name$=CODE]') %>% 
               html_text())

有谁知道我如何选择“相同”元素,例如name="0-UNIT-CODE"的 sibling ,当元素位置从页面更改为 HTML 文件时?或者,如何从只能从具有相同父级的不同标签类型中定位的标签返回信息?

编辑:包含的包名称。包含指向网站的链接,并包含更多 HTML 以供说明。

最佳答案

您可以使用 xpath 的“following-sibling”:“查找 <p class=STANDARD><a name=0-UNIT-CODE> 的 sibling 并在 //a[@name='0-UNIT-CODE'] 之后。

uCode<- sapply(1:length(urls[,1]), function(x)
               html(urls[x,2]) %>% 
               html_nodes(xpath="//a[@name='0-UNIT-CODE']/following-sibling::p[@class='STANDARD']") %>% 
               html_text())
  • <a>name="0-UNIT-CODE" 找到 //a[local-name()='0-UNIT-CODE'](注意:我认为通常在 xpath 中你做 /following-sibling::p[@class='STANDARD'] 但这个语法在这个函数中似乎不被理解?)
  • a 选择 ojit_code 的以下同级标准类。

关于html - 当 nth-child() 在页面之间变化时指定 CSS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31421877/

相关文章:

php - 菜单 WordPress 滚动

html - 两列不重叠的div布局

javascript - 如何计算自定义滚动条的高度和宽度?

删除 R 中特殊字符的引号

r - 匹配从头到/aaa-bbb-ccc/的所有内容,不包括/aaa-bbb-ccc/

htmlwidgets 并排在 html 中?

javascript - 从 Web 服务器访问客户端本地网络上的文件,但不能访问本地计算机上的文件

html - 将多个 div 彼此对齐,其中 1 个应该自动增长

R中没有for循环的多列的重复总和

jquery - 如何使用 jquery 制作显示/隐藏切换按钮