使用R语言polite包下载XML.GZ文件时遭遇403 Forbidden错误
解决polite包下载XML.GZ文件时403 Forbidden的问题
你遇到的403错误是因为网站的反爬机制识别了R默认的请求标识,拒绝了非浏览器发起的请求。浏览器能正常下载是因为它会携带包含浏览器信息的请求头,服务器会允许这类请求。
修改后的代码
在bow()函数中添加自定义的user_agent参数,模拟浏览器的请求标识即可解决问题:
library(polite) # 目标文件URL eprice_xml_products_1 <- "https://www.eprice.it/sitemap/https/Sitemap_Elettrodomestici_1.xml.gz" # 创建会话时指定浏览器风格的User-Agent session <- bow(eprice_xml_products_1, 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") # 下载文件到本地 file_path <- rip(session, destfile = "xml_1.gz") print(file_path)
如果你偏好管道写法,可以简化为:
library(polite) library(magrittr) eprice_xml_products_1 <- "https://www.eprice.it/sitemap/https/Sitemap_Elettrodomestici_1.xml.gz" bow(eprice_xml_products_1, 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") %>% rip(destfile = "xml_1.gz")
额外说明
- 不需要调用
nod(),因为bow()已经直接指向了目标文件的URL,nod()用于导航到同一域名下的其他子路径,这里完全多余。 - 你可以根据自己常用的浏览器调整
user_agent的值,比如Firefox的标识是Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/118.0,只要是合法的浏览器User-Agent都可以。
内容的提问来源于stack exchange,提问作者Andrea
相关产品推荐
相关产品推荐

