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

理解httr包的response对象:R语言POST表单提交与结果存储问题咨询

Hey Emma, let's walk through how to solve both of your httr-related questions—submitting HTML forms and turning response data into a dataframe. It's simpler than you might think once you know the right tools!


1. Submitting a Simple HTML Form with httr

First, you need to gather a few key details from the HTML form you're targeting. Open your browser's dev tools (hit F12) and inspect the form elements:

  • Locate the action attribute of the <form> tag (this is the URL your form data gets sent to)
  • Confirm the form uses the POST method (most submission forms do)
  • Note the name attribute of every input field (these are the exact keys you'll use in your request body)

Here's a practical example. Let's say we're submitting a basic search form with an input named "query" and a submit button labeled "Search":

library(httr)

# Build your form data as a list (match input names exactly!)
form_payload <- list(
  query = "r programming httr",
  submit = "Search"  # Some forms require including the submit button's value too
)

# Send the POST request
response <- POST(
  url = "https://example.com/search-results",  # Replace with your form's action URL
  body = form_payload,
  encode = "form"  # Critical: this formats data like a web browser would
)

# Always verify the request succeeded (status code 200 means "OK")
stop_for_status(response)

2. Extracting Tabular Data into a Dataframe

The method here depends on what the server sends back. Let's cover the two most common scenarios:

Scenario 1: Response is an HTML Page with a Table

For HTML tables, pair httr with the rvest package—it’s built specifically for scraping HTML content seamlessly.

library(rvest)

# Convert the response to a parsed HTML document
html_doc <- content(response, as = "parsed")

# Extract all tables from the page (returns a list of dataframes)
all_tables <- html_table(html_doc, fill = TRUE)  # fill=TRUE fixes uneven row issues

# If there's only one table, grab the first item in the list
results_df <- all_tables[[1]]

# Preview your dataframe
head(results_df)

Scenario 2: Response is JSON Data

If the server returns JSON (super common for modern web APIs/forms), use the jsonlite package to convert it directly into a dataframe:

library(jsonlite)

# Extract raw JSON text from the response
json_text <- content(response, as = "text")

# Convert JSON to a dataframe
results_df <- fromJSON(json_text)

# If your table data is nested under a specific key (like "data" or "results"), adjust accordingly:
# results_df <- fromJSON(json_text)$results

Quick Tip to Identify Response Type

If you're unsure whether the response is HTML or JSON, run content(response, as = "text") to print the raw content. That will tell you exactly what you're working with!


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 13:57:32