我在抓取多个 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>
" "
<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>
" "
<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>
" "
<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/