Jsoup从下拉菜单中选择元素

时间:2017-05-07 20:50:57

标签: java html web-scraping jsoup

我一直在尝试从Steam排行榜页面的下拉菜单中访问特定元素。是否有一种很好的方式来访问特定的选项价值'?我尝试了以下代码并且它没有抓取任何值(调试器将levelName显示为"")。感谢任何帮助,谢谢:)

String url = "http://steamcommunity.com/stats/592300/leaderboards/1900835";
Document document = Jsoup.connect(url).get();
String levelName = document.select("div#leaderHeader > option:contains(1900822)").val();
System.out.println(levelName);

1 个答案:

答案 0 :(得分:1)

您的代码中几乎没有错误:

  • :contains不会检查属性,而是检查元素生成的文本。如果您想使用<option value="1900822">someText</option>找到value="1900822",那么您可以使用[attr=value]选择器,例如option[value=1900822](不带引号)
  • 您使用了parent > child,但<option ...><select ...>元素的子元素,而不是<div id="leaderHeader">。这个div是它的祖先,但它不是父级,所以删除>
  • 我不确定您在此处尝试使用val()方法做什么,但我猜您想使用text()

所以你可能想要:

String levelName = document.select("div#leaderHeader option[value=1900822]").text();

请注意,结果中有non-breaking spaces &nbsp;。您可能希望用简单的空格替换它们,然后修剪前导和尾随空格。

levelName = levelName.replace((char)160,' ').trim();