gpt4 book ai didi

r - 用rvest阅读html。如何检查CSS选择器类是否包含任何内容?

转载 作者:行者123 更新时间:2023-12-03 17:25:35 24 4
gpt4 key购买 nike

这是我第一次尝试处理HTML和CSS选择器。我正在使用R软件包rvest废弃Billboard Top 100网站。我感兴趣的一些数据包括本周的排名,歌曲,天气或歌曲是否是New,以及天气或歌曲是否有任何奖项。

我可以通过以下方式获得歌曲名称和排名:

library(rvest)
URL <- "http://www.billboard.com/charts/hot-100/2017-09-30"

webpage <- read_html(URL)
current_week_rank <- html_nodes(webpage, '.chart-row__current-week')
current_week_rank <- as.numeric(html_text(current_week_rank))


我的问题来自于新指标和奖励指标。歌曲按行列出,其中每100首包含在其中:

<article> class="chart-row char-row--1 js chart-row" ....
</article>


如果一首歌是新的,它将包含以下内容:

<div class="chart-row__new-indicator">


如果某首歌获得奖项,则其中将包含此类:

<div class="chart-row__award-indicator">


有没有一种方法可以查看class =“ chart-row char-row--1 js chart-row” ...的所有100个实例,并查看其中是否存在这些实例?我从current_week_rank获得的输出是一列100个值。我希望有一种方法可以做到这一点,这样我对每首歌都有一个观察。

感谢您的帮助或建议。

最佳答案

基本上相当于我上面指出的“问答”的定制版本。我不确定100%是否确定or是否按预期工作,因为示例页面中只有一行带有<div class="chart-row__new-indicator">,并且该行也恰好具有<div class="chart-row__award-indicator">标记。

#xpath to focus on the 100 rows of interest
primary_xp = '//div[@class="chart-row__primary"]'
#xpath which subselects rows you're after
check_xp = paste('div[@class="chart-row__award-indicator" or' ,
'@class="chart-row__new-indicator"]')

webpage %>% html_nodes(xpath = primary_xp) %>%
#row__primary for which there are no such child nodes
# will come back NA, and hence so will html_attr('class')
html_node(xpath = check_xp) %>%
#! is a bit extraneous, as it only flips FALSE to TRUE
# for the rows you're after (necessity depends on
# particulars of your application)
html_attr('class') %>% is.na %>% `!`


FWIW,您可以将 check_xp缩短为以下内容:

check_xp = 'div[contains(@class, "indicator")]'


它当然涵盖了 "chart-row__award-indicator""chart-row__new-indicator",但是如果存在这样的替代标记,则还将用包含 class"indicator"包裹其他节点(您必须自己确定)

关于r - 用rvest阅读html。如何检查CSS选择器类是否包含任何内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46597294/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com