首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在r中进行web抓取时,xpath返回空文本

在r中进行web抓取时,xpath返回空文本
EN

Stack Overflow用户
提问于 2019-05-26 19:46:10
回答 1查看 39关注 0票数 0

我在试着从https://www.kff.org/interactive/subsidy-calculator那里获取信息。例如,放置state=California,zip=90001,income=20000,无覆盖,1人,1成人,无儿童,age=21,无烟草。

我们得到以下信息:https://www.kff.org/interactive/subsidy-calculator/#state=ca&zip=94704&income-type=dollars&income=20000&employer-coverage=0&people=1&alternate-plan-family=individual&adult-count=1&adults%5B0%5D%5Bage%5D=21&adults%5B0%5D%5Btobacco%5D=0&child-count=0

我想得到“估计的财务帮助”和“你的银色计划的费用”的数字(它们在“结果”灰色框中以蓝色粗体显示,由于某种原因,我无法上传屏幕截图)。当我对数字使用xpath时,我得到的结果是空字符串。如果我要检索一些其他文本(不在灰色框中),情况就不是这样了。我想知道这会有什么问题。我附加了下面的代码。如果这是一个愚蠢的问题,请原谅我,因为我对网络抓取非常陌生。谢谢!

代码语言:javascript
复制
state = tolower('CA')
zip = 94704
income = 20000
people = 1
adult = 1
children = 0

url = paste0("https://www.kff.org/interactive/subsidy-calculator/#state=", state, "&zip=", zip, "&income-type=dollars&income=", income, "&employer-coverage=0&people=", people, "&alternate-plan-family=individual&adult-count=", adult, "&adults%5B0%5D%5Bage%5D=21&adults%5B0%5D%5Btobacco%5D=0&child-count=", children)

# This returns empty string
r = read_html(url) %>%
      html_nodes(xpath ='//*[@id="subsidy-calculator-new"]/div[5]/div/div/dl/dd[1]/span') %>% html_text()

# This returns "Number of children (20 and younger) enrolling in Marketplace coverage", a line that's not in the grey box.
r = read_html(url) %>%
  html_nodes(xpath = '//*[@id="subsidy-form"]/div[2]/div[3]/div[3]/p') %>%
  html_text()
EN

回答 1

Stack Overflow用户

发布于 2019-05-27 01:21:36

这些值是通过在页面上运行的脚本生成的。您当前的方法不允许这样做,因此您会得到结果。您最好使用一种允许脚本运行的方法,比如RSelenium。

您填写的表单将值输入到脚本标记#results-template中的模板。此脚本https://www.kff.org/wp-content/themes/kaiser-foundation-2016/interactives/subsidy-calculator/2019/calculator.js?ver=1.7.7中介绍了相关的计算,您将在其中找到逻辑和预设值,例如每年的贫困线。

最简单的快速查看可能是在创建新的SubsidyCalculator对象来处理表单时检查javascript变量,即以var sc = new SubsidyCalculator开头的js。你可以用你的值加上从json返回的值来“逆向工程”这些变量,我认为,根据邮政编码,将6个以kff_sc开头的变量输入到计算器中,例如silver: kff_sc.silver,但还没有确认。假设脚本顶部给出了缺省值,您就可以大致了解这些数字。

与邮政编码相关的数字可以从这里检索到:https://www.kff.org/wp-content/themes/kaiser-foundation-2016/interactives/subsidy-calculator/2019/json/zips/94.json,其中.json之前的最后两个数字是邮政编码的前两个数字。您可以从输入验证脚本中确定这一点:https://www.kff.org/wp-content/themes/kaiser-foundation-2016/interactives/subsidy-calculator/2019/shared.js?ver=1.7.7

代码语言:javascript
复制
var bucket = $( this ).val().substring( 0, 2 );
		if ( kff_sc.buckets[bucket] ) return;
		$.ajax( '/wp-content/themes/vip/kaiser-foundation-2016/interactives/subsidy-calculator/2019/json/zips/' + bucket + '.json', 

前两个数字确定存储桶。

总而言之,您可能会实现自己的计算器,但您将重新发明轮子。只需自动化浏览器,然后提取结果值似乎更容易。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56313196

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档