You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言Web Scraping:GET请求返回特殊字符串的处理咨询

解决方法

你遇到的问题是服务器返回了gzip压缩的原始内容,而httr::content()没有自动完成解压,导致得到一串无法识别的字符串。以下是具体的解决步骤和代码:

1. 检查响应状态与压缩类型

先确认响应是否被压缩:

library(httr)
resp <- GET("https://pmfby.gov.in/landingPage/districtState?stateID=2F3DE245-46E6-4C4D-9297-C0B23C803B15&sssyID=02012223")
# 查看响应头中的编码信息
print(resp$headers[["content-encoding"]])

如果输出gzip,说明内容确实是gzip压缩的。

2. 手动解压并解析内容

通过添加浏览器请求头模拟正常访问,再手动处理压缩内容:

library(httr)
library(jsonlite)

# 发送带完整请求头的请求
resp <- GET(
  url = "https://pmfby.gov.in/landingPage/districtState?stateID=2F3DE245-46E6-4C4D-9297-C0B23C803B15&sssyID=02012223",
  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",
    "Accept" = "application/json, text/javascript, */*; q=0.01",
    "Accept-Encoding" = "gzip, deflate, br"
  )
)

# 提取原始二进制内容并解压
raw_content <- content(resp, as = "raw")
decompressed_text <- memDecompress(raw_content, type = "gzip", asChar = TRUE)

# 解析为JSON格式
district_list <- fromJSON(decompressed_text)
print(district_list)

3. 备选方案:使用会话保持Cookie

部分政府网站会验证会话Cookie,可先访问主页建立会话再请求数据:

library(httr)
library(jsonlite)

# 初始化会话,获取必要的Cookie
session <- html_session("https://pmfby.gov.in/")

# 在会话内发送目标请求
resp <- session %>%
  GET(
    path = "/landingPage/districtState",
    query = list(
      stateID = "2F3DE245-46E6-4C4D-9297-C0B23C803B15",
      sssyID = "02012223"
    ),
    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",
      "Accept" = "application/json, text/javascript, */*; q=0.01"
    )
  )

# 直接解析响应内容
district_list <- content(resp, type = "application/json")
print(district_list)

核心原因

服务器会对非浏览器的请求返回压缩后的原始数据,同时可能验证请求头的合法性。通过模拟浏览器的User-Agent和Accept头,并手动处理gzip压缩,就能正确获取并解析地区列表的JSON数据。

内容的提问来源于stack exchange,提问作者NoAlibi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 07:40:34