我需要从URL列表中提取一些特定的URL,这些URL列在我使用rvest提取的问题的底部。
但是,我只需要提取以下列之一开头的URL
/assets//data/files/并包含以下单词之一(大小写不敏感)
primaryelemmiddhigh但当URL以/files/开头时则不是这样,后者必须只包含data-for-researchers/。
我使用R;所以我使用rvest提取数据:
码
url %>%
html_nodes("a") %>% html_attr("href") %>%
str_subset(regex("^//*(assets|data|files).*((Primary|Elem|Midd|High)|(data-for-researchers))", ignore_case = T))这在很大程度上是可行的--也就是说,它提取了我所需的几乎所有URL,但它从以\files\开头的URL中给了我一些额外的部分。
示例-正则表达式工作的
[1] "https://www.ed.sc.gov/assets/reportCards/2008/documents/Primary_School_Performance_File_2008.xls"
[2] "https://www.ed.sc.gov/assets/reportCards/2008/documents/Primary_School_Fact_File_2008.xls"
[3] "https://www.ed.sc.gov/assets/reportCards/2008/documents/2008-ELEM-Schools-Performance-Data.xls"
[4] "https://www.ed.sc.gov/assets/reportCards/2008/documents/Elementary_School_Fact_File_2008.xls"
[5] "https://www.ed.sc.gov/assets/reportCards/2008/documents/2008-MIDDLE-Schools-Performance-Data.xls"
[6] "https://www.ed.sc.gov/assets/reportCards/2008/documents/Middle_School_Fact_File_2008.xls" 代码不工作的,
/files/2018/data-files/high-school-ela-math-results/
/files/2018/data-files/elementary-middle-ela-math-results/
/files/2018/data-files/2018-report-card-data-for-researchers/
/files/2018/data-files/2018-report-card-data-for-researchers-additional-information/但是,我只想从这个列表中获得第三个,同时使用上面的代码保存我与其他列表匹配的所有其他代码。
我尝试了许多regex模式的变体,但它大多只是从上面删除了底部2。
我怎么才能解决这个问题?
数据
我将链接添加到将所有数据的dput放在其中的文件,因为列表太长,无法发布。可以下载这里
发布于 2020-05-07 04:41:26
您可以使用:
library(rvest)
library(stringr)
url %>%
html_nodes("a") %>% html_attr("href") %>%
str_subset(regex('(assets/|data/).*((Primary|Elem|Midd|High))|(files.*data-for-researchers/)', ignore_case = TRUE))或者在基数R中使用grep:
grep('(assets/|data/).*((Primary|Elem|Midd|High))|(files.*data-for-researchers/)',
x, value = TRUE, ignore.case = TRUE)其中x是字符串。
发布于 2020-05-07 04:29:05
我不知道你能不能用正则表达式做条件。因此,我建议分两步完成这一步,并将列表组合起来。
most_data <-
url %>%
html_nodes("a") %>% html_attr("href") %>%
str_subset(regex("^//*(assets|data).*((Primary|Elem|Midd|High)|(data-for-researchers))", ignore_case = T))
remaining_data <-
url %>%
html_nodes("a") %>% html_attr("href") %>%
str_subset(regex("^//*files.*((Primary|Elem|Midd|High)|(data-for-researchers))", ignore_case = T))
all_data <- c(most_data, remaining_data)您可能必须根据您的数据更新上述内容。但我希望总的方法是有意义的。
https://stackoverflow.com/questions/61649587
复制相似问题