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
相关产品推荐
相关产品推荐

