我想使用
rvest
进行网页抓取来提取 bing 搜索结果的数量。
我使用以下功能:
BingResults <- function(x) {
stringr::str_glue('https://www.bing.com/search?q="{x}"') %>%
rvest::session() %>%
rvest::html_elements(xpath = '//*[@id="b_tween_searchResults"]/span') %>%
rvest::html_text() %>%
stringr::str_remove_all("Ungefähr|Ergebnisse|results|About| |\\.") %>%
as.integer() %>%
"/"(1000) %>%
as.integer()
}
但是,这对某些单词有效,但对另一些单词无效
BingResults(x = "Diversity")
# 19700
BingResults(x = "Aktie")
# integer(0)
第二个例子失败有什么原因吗?如何使该功能适用于所有可能的搜索词。
library(tidyverse)
library(rvest)
bing_results <- function(search_term) {
str_c("https://www.bing.com/search?q=", search_term) %>%
read_html() %>%
html_element(".sb_count , .sb_bp") %>%
html_text2() %>%
str_remove_all("[^0-9]") %>%
as.numeric()
}
bing_results("Aktie")
[1] 7390000
您要查找的代码是:
pacman::p_load(tidyverse, rvest)
BingResults <- function(x) {
str_glue('https://www.bing.com/search?q="{x}"') %>%
read_html %>%
html_nodes('.sb_count') %>%
html_text %>%
parse_number %>%
{. / 1000} %>%
as.integer
}
我无法重现你的问题,对我来说,
BingResults(x = "Diversity")
和BingResults(x = "Aktie")
都返回NA
。这是因为您从 stringr::str_remove_all("Ungefähr|Ergebnisse|results|About| |\\.") %>%
行得到像“19,700,000”这样的结果,当它转换为整数时,由于逗号的原因,变成了 NA
s。因此,要使此代码正常工作,您可以做的最小更改就是在 str_remove_all()
行的正则表达式中添加一个逗号,它应该可以工作。