使用rvest的read_html()获取pixiv英文页面返回日文版,求解决方案
解决rvest读取Pixiv英文站却返回日文页面的问题
问题说明
使用rvest的read_html()读取Pixiv英文站时,返回的HTML代码里<html>标签的lang属性为ja(日文版本),但实际需要获取lang="en"的英文页面。曾尝试参考xml2文档设置User Agent,但不清楚具体实现方式,也不确定是否找对了解决方向。
解决方法
Pixiv会根据请求头中的Accept-Language(语言偏好)和User-Agent(客户端标识)来决定返回的页面语言版本,因此需要在请求中添加这两个关键头信息,具体实现有两种方式:
方式一:结合httr::GET()发送请求
先通过httr::GET()自定义请求头发送请求,再将响应传给read_html()解析:
library(rvest) library(httr) # 定义请求头:设置英文优先,同时模拟主流浏览器标识 custom_headers <- add_headers( `Accept-Language` = "en-US,en;q=0.9", `User-Agent` = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36" ) # 发送请求并解析HTML response <- GET("https://www.pixiv.net/en/", custom_headers) target_html <- read_html(response) # 验证是否获取到英文页面 html_node(target_html, "html") %>% html_attr("lang")
方式二:直接在read_html()中传递配置
更简洁的写法是直接在read_html()的config参数中添加请求头:
library(rvest) # 直接配置请求头并读取页面 target_html <- read_html( "https://www.pixiv.net/en/", config = httr::add_headers( `Accept-Language` = "en-US,en;q=0.9", `User-Agent` = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36" ) ) # 验证语言属性 html_node(target_html, "html") %>% html_attr("lang")
关键说明
Accept-Language设置为en-US,en;q=0.9,明确告诉服务器优先返回英文版本User-Agent模拟普通浏览器,避免被服务器识别为爬虫而返回默认的日文页面
内容的提问来源于stack exchange,提问作者kyarudata
相关产品推荐
相关产品推荐

