有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java使用Jsoup获取数字值

我正在使用java从BNN网站上简单地跟踪股票的变化,并且我已经将其全部设置为访问正确的值。但是,我只得到{{quoteObj.openPrc | number:2 }},而不是一个数值。如何访问网站上显示的数字值

My code and the output:

另外,如果你能帮助我得到这个网站上的当前价值,这将是非常有帮助的

//编辑//

org.jsoup.nodes.Document doc = null;
                try {
                    doc = Jsoup.connect("https://www.bnn.ca/stock/ACB.TO").userAgent("Mozilla/5.0").timeout(30000).get();
                } catch (IOException e) {
                    e.printStackTrace();
                }
                org.jsoup.nodes.Element content = doc.getElementById("content-container");
                org.jsoup.nodes.Element value = content.getElementsByClass("value").get(0);
                doc.select("div.value:contains(quoteObj.high)");
                        Pattern pattern = Pattern.compile("number:(\\d+)");
                        Matcher matcher = pattern.matcher(value.text());
                        if (matcher.find()) {
                            String number = matcher.group(1);
                            System.out.println(number);
                        }`

我更新了我的代码,但现在输出只有2,它只是从{{quoteObj.high | number:2}中获取数字。我希望在站点上显示实际的数字值

I have attached an image of the webpage and the html code attached to the specific value I am trying to get.


共 (1) 个答案

  1. # 1 楼答案

    假设您已经检查了网站的源代码,如果没有,这里有一个代码片段,您正试图使用JSOUP获取它

    &13; 第13部分,;
     <div ng-controller="stockDetailSummary" ng-cloak> 
           <div class="stockDetail" ng-show="quoteFound"> 
            <div ng-show="DataLoaded"> 
             <h2>Summary</h2> 
             <div class="Column Left"> 
              <div class="row"> 
               <div class="label">
                Open
               </div> 
               <div class="value">
                {{quoteObj.openPrc | number:2 }}
               </div> 
              </div> 
              <div class="row alt"> 
               <div class="label">
                High
               </div> 
               <div class="value">
                {{quoteObj.high | number:2 }}
               </div> 
              </div> 
              <div class="row"> 
               <div class="label">
                Low
               </div> 
               <div class="value">
                {{quoteObj.low | number:2 }}
               </div> 
    和#13;
    和#13;

    如果您看到
    <div class="value"> {{quoteObj.openPrc | number:2 }} </div>
    返回作为输出得到的内容。把它当作字符串,做你想做的事情

    供您参考,该网站是基于angularjs构建的,{quoteObj.openPrc | number:2}是角度管道,这是一种编写显示值转换的方法,您可以在HTML中声明

    编辑:

    根据您所附的图像,您要检索的数据是 enter image description here

    如果您进入开发者控制台的网络选项卡,您将找到获取数据的确切请求 enter image description here

    导航到“预览”选项卡,也可以看到相应的响应 enter image description here

    html源代码中也引用了同样的内容,您可以通过按CTRL+U来查看 enter image description here

    &13; 第13部分,;
    <div class="stockDetail" ng-show="quoteFound">
    	<div ng-show="DataLoaded" class="">
    
    							<h2>Summary</h2>
    				<div class="Column Left">
    			<div class="row">
    				<div class="label">Open</div>
    				<div class="value ng-binding">0.00</div>
    			</div>
    			<div class="row alt">
    				<div class="label">High</div>
    				<div class="value ng-binding">0.00</div>
    			</div>	
    			<div class="row">
    				<div class="label">Low</div>
    				<div class="value ng-binding">0.00</div>
    			</div>
    			<div class="row alt">
    				<div class="label">Volume</div>
    				<div class="value ng-binding">0</div>
    			</div>
    			<div class="row">
    				<div class="label">52-Week High</div>
    				<div class="value ng-binding">8.66</div>
    			</div>	
    			<div class="row alt">
    				<div class="label">52-Week Low</div>
    				<div class="value ng-binding">1.90</div>
    			</div>												
    		</div>
    		<div class="Column Right">
    			<div class="row">
    				<div class="label">Exchange</div>
    				<div class="value ng-binding">TOR</div>
    			</div>
    			<div class="row alt">
    				<div class="label">Currency</div>
    				<div class="value ng-binding">CAD</div>
    			</div>
                <div class="row">
                    <div class="label">P/E</div>
                    <div class="value ng-binding">0.00</div>
                </div>
    			<div class="row alt">
    				<div class="label">EPS</div>
    				<div class="value ng-binding">-0.01</div>
    			</div>
    			<div class="row">
    				<div class="label">Dividend</div>
    				<div class="value ng-binding">0.00</div>
    			</div>
    			<div class="row alt">
    				<div class="label">Yield</div>
    				<div class="value ng-binding">0.00<!  ngIf: quoteObj.yield  ></div>
    			</div>	
    		</div>
    		<div class="clear"></div>
    	</div>		
    	</div>
    和#13;
和#13;

但是在使用JSOUP获取这些值时,这里有一些问题

  1. JSOUP是一个HTML解析器,它将无法获取Javascript呈现的任何内容
  2. 下面的内容由下面返回JSON数据的api URL呈现

Request URL:https://data.bnn.ca/dispenser/bnnApi/quote/summary?s=ACB.TO

&13; 第13部分,;
{
  "statusCode": 200,
  "generatedTimestamp": "2017-11-30T04:47:30.793-05:00",
  "duration": 61,
  "data": {
    "stocks": [{
      "symbol": "ACB.TO",
      "currency": "CAD",
      "trdprc": 0.0,
      "volume": 0,
      "dividend": 0.0,
      "earnings": -0.01375,
      "high": 0.0,
      "low": 0.0,
      "openPrc": 0.0,
      "perRatio": 0.0,
      "tradeDate": "29 NOV 2017",
      "yield": 0.0,
      "yearHigh": 8.66,
      "yearLow": 1.9,
      "exchange": "TOR"
    }],
    "invalidSymbols": []
  }
}
和#13;
和#13;

因此,如果您通过这些链接将更好

https://stackoverflow.com/a/47485387/5313817