如何用R的httr包POST请求获取infantchart儿童体重百分位数
解决httr提交表单抓取婴儿体重百分位数的问题
嘿,作为刚接触httr包的新手,碰到表单提交的坑太正常啦!我帮你一步步梳理怎么搞定从目标网站抓取数据的需求:
第一步:先搞清楚网站的表单参数
首先你得确认网站实际接收的参数名称和格式——这是POST请求成功的关键!你可以打开浏览器的开发者工具(按F12),切换到「网络」标签,手动提交一次表单,找到对应的POST请求,查看「Form Data」部分,就能看到每个输入项对应的参数名(比如性别可能是gender,出生日期可能是dob,这些都要以网站实际的命名为准,别自己瞎猜)。
第二步:编写正确的httr POST代码
结合你需要的5个参数,这里给你一个可参考的代码模板,你可以根据实际参数名调整:
library(httr) library(rvest) # 用来解析返回的HTML内容 # 定义你的参数,注意替换成实际的参数名和符合网站要求的格式 form_params <- list( gender = "female", # 性别:比如"male"或"female",看网站选项 dob = "2022-06-15", # 出生日期:格式要和网站一致,比如YYYY-MM-DD measurement_date = "2024-03-20", # 测量日期 weight = "10.2", # 体重数值 unit = "kg" # 单位:比如"kg"或"lb",以网站实际提交值为准 ) # 发送POST请求,模拟浏览器请求避免被拦截 response <- POST( url = "https://www.infantchart.com/", body = form_params, encode = "form", # 表单数据的编码方式,一般用form即可 add_headers( "User-Agent" = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36" ) ) # 检查请求是否成功,如果失败会自动报错 stop_for_status(response) # 解析返回的HTML页面,提取需要的年龄和百分位数 page_html <- content(response, "text") %>% read_html() # 这里的CSS选择器需要你根据实际页面结构调整! # 比如你可以用浏览器开发者工具的「选择元素」功能,找到年龄和百分位数对应的标签 child_age <- page_html %>% html_element(".age-display") %>% html_text() weight_percentile <- page_html %>% html_element(".percentile-result") %>% html_text() # 输出结果 cat("孩子的年龄:", child_age, "\n") cat("体重百分位数:", weight_percentile, "\n")
几个关键注意事项
- 参数格式要匹配:比如日期格式如果网站要求是MM/DD/YYYY,就不能传YYYY-MM-DD;单位如果网站实际接收的是
pounds而不是lb,一定要改过来,否则请求会无效。 - 调试技巧:如果返回的内容不对,可以先打印
content(response, "text")看看实际拿到的页面是什么,有没有报错信息。 - 遵守网站规则:不要频繁发送请求,避免被网站封禁IP;可以先查看网站的robots.txt文件,确认允许抓取这类数据。
- 动态内容处理:如果网站是用JavaScript加载结果的,httr可能拿不到数据,这时候你可能需要用RSelenium或者playwright包来模拟浏览器操作。
内容的提问来源于stack exchange,提问作者frank
相关产品推荐
相关产品推荐

