R语言抓取谷歌搜索结果返回元素为空问题求助
问题原因
- 直接请求谷歌搜索地址未携带合法请求头,触发谷歌反爬机制,返回的不是正常搜索结果页面,因此定位不到目标元素
- 所用XPath路径格式错误(开头多写了1个斜杠,应为
//而非///),且使用全绝对路径依赖谷歌页面临时结构,谷歌页面结构更新后就会失效 - 未针对“埃菲尔铁塔”相关内容做筛选逻辑
修正后可运行代码
# 加载依赖包 library(rvest) library(httr) library(stringr) # 构造搜索链接 search_key <- "most popular place in france" url <- paste0("https://www.google.com/search?q=", URLencode(search_key)) # 携带模拟浏览器的请求头发送请求,规避反爬 res <- GET(url, add_headers( `User-Agent` = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36" )) first_page <- read_html(res) # 用更稳定的元素属性定位搜索结果的标题和摘要 titles <- html_nodes(first_page, xpath = '//h3[contains(@class, "LC20lb")]') %>% html_text(trim = TRUE) contents <- html_nodes(first_page, xpath = '//div[contains(@class, "VwiC3b")]') %>% html_text(trim = TRUE) # 筛选包含埃菲尔铁塔的结果,兼顾中英文关键词 target_results <- str_subset(c(titles, contents), "Eiffel Tower|埃菲尔铁塔") print(target_results)
注意事项
- 谷歌反爬策略会动态更新,请求频率不要太高,否则容易被封禁IP
- 页面元素的class属性会不定期调整,如果再次出现返回空的情况,可以打开谷歌搜索页按F12重新查看目标元素的对应属性
- 如果需要抓取中文结果,可以在请求头里加上
Accept-Language: zh-CN,zh;q=0.9,返回的内容会以中文为主,筛选关键词直接用埃菲尔铁塔即可
内容的提问来源于stack exchange,提问作者mmorelli
相关产品推荐
相关产品推荐

