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

Rvest XML网页爬取求助:VEIS号码状态查询表单提交问题

帮你排查VIES VAT状态爬取的代码问题

嘿,作为网页爬取初学者,碰到表单提交的问题很正常!我看了你用rvest写的代码,帮你找出几个关键问题,再给你修正后的版本:

代码里的核心问题

  • 访问了错误的页面:你当前用的vatResponse.html是表单提交后的结果页,根本不是包含提交表单的初始页面!得先访问表单所在的vatRequest.html,才能正确获取到可提交的表单结构。
  • 表单参数值填错了:requesterMemberStateCode的下拉选项实际只认两位国家代码(比如奥地利是AT),而不是显示的文本"AT- Austria"——表单只会识别选项的value属性值,不是你看到的标签文字。
  • 参数选错了:你设置的requester开头的字段是填你自己的VAT信息(可选字段),但你要查的是客户的VAT状态,核心字段应该是memberStateCode(客户的国家代码)和number(客户的VAT号码)。

修正后的代码

library(rvest)

# 第一步:访问正确的表单初始页面
url <- 'http://ec.europa.eu/taxation_customs/vies/vatRequest.html'
session1 <- html_session(url)

# 获取页面里的表单(可以先打印出来确认字段结构)
form1 <- html_form(session1)[[1]]
print(form1)

# 第二步:填充表单值——替换成你要查询的客户信息
filled_form <- set_values(
  form1,
  # 可选:如果需要填写自己的请求者信息,就放开下面两行注释
  # requesterMemberStateCode = "AT",
  # requesterNumber = "你的VAT号码",
  # 核心必填:客户的VAT信息
  memberStateCode = "AT",  # 比如客户是奥地利,填AT
  number = "U12345678"     # 客户的VAT号码,注意格式要正确
)

# 第三步:提交表单并获取结果页面
response <- submit_form(session = session1, form = filled_form)

# 第四步:从结果页面提取你需要的状态数据
result_table <- response %>% 
  html_element(".result table") %>%  # 定位结果表格
  html_table()  # 把表格转成数据框

print(result_table)

额外注意事项

  • VIES系统有请求频率限制,别频繁提交请求,不然可能被封IP哦。
  • 如果之后碰到验证码或者反爬机制,纯rvest可能搞不定,这时候可以试试RSelenium这类模拟真实浏览器的工具。
  • 一定要确认客户的VAT号码格式正确,不同欧盟国家的VAT号码格式是有差异的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:21:01