使用R爬取数据时出现unexpected symbol语法错误,寻求解决方案
R爬虫错误:unexpected symbol 原因分析与解决办法
错误提示
Error: unexpected symbol in: " name = page %>% html_nodes(".title""
错误原因
- HTML转义字符干扰:代码中出现的
%>%是HTML转义后的管道符,R无法识别该转义字符,导致管道操作中断,代码逻辑被截断,触发unexpected symbol错误。 - 函数与变量名冲突:定义了名为
email的函数,但后续又用email作为变量名存储爬取结果,直接覆盖了函数本身,会导致sapply调用时出现逻辑错误。 - 链接拼接语法错误:循环中拼接链接时,末尾多了一个多余的引号,导致生成的URL格式无效,影响
read_html的正常执行。
解决办法
- 替换转义字符:将所有
%>%替换为R原生的管道符%>% - 重命名函数避免冲突:把
email函数重命名为get_writer_email,防止与变量名冲突 - 修正链接拼接:移除链接末尾多余的引号,保证URL格式正确
- 优化数据框拼接:用
dplyr::bind_rows替代rbind,提升循环中数据框拼接的效率
修正后的完整代码
library(rvest) library(dplyr) get_writer_email = function(writer_link) { page = read_html(writer_link) writer_email = page %>% html_node(".field-type-email a") %>% html_text() return(writer_email) } writerdata = data.frame() for (page_result in seq(from = 0, to = 20)) { link = paste0("https://www.pw.org/directory/writers?genre=All&translated=All&journal-nid=&identity=15969&work=All&language=English&education=All&retreat=All&agent=All&metroarea%5Bcity_autocomplete%5D=&metroarea%5Bhidden_latitude%5D=&metroarea%5Bhidden_longitude%5D=", page_result) page = read_html(link) name = page %>% html_nodes(".title a") %>% html_text() writer_links = page %>% html_nodes(".title a") %>% html_attr("href") %>% paste("https://www.pw.org", ., sep = "") email_list = sapply(writer_links, FUN = get_writer_email, USE.NAMES = FALSE) writerdata = bind_rows(writerdata, data.frame(name, email = email_list, stringsAsFactors = FALSE)) print(paste("Page:", page_result)) }
内容的提问来源于stack exchange,提问作者Ronak Zalavadia
相关产品推荐
相关产品推荐

