使用Jsoup

时间:2015-06-27 23:36:59

标签: java jsoup

我试图从雅虎财经中提取“来自经营活动的总现金流”数字。变量“s”可以是SP500中的任何符号。在大多数情况下,会发生所需的输出。但是,在某些情况下,比如AAPL,我无法弄清楚它的打印内容或来自哪里。

如果“s”为A,则输出为711000000.正确。

如果“s”为AA,则输出为1674000000.正确。

但是,如果“s”是AAPL,则输出为-416542144。不知道它来自哪里。

public class CashFlowStatement {
String cashFromOperatingActivities = "Total Cash Flow From Operating Activities";

public CashFlowStatement(String s) {
    String cashFlowStatementURL = ("https://finance.yahoo.com/q/cf?s="+s+"+Cash+Flow&annual");
    String cashFlowStatementTableName = "table.yfnc_tabledata1";
    boolean foundLine = false;

    String line;
    int line2;

    try {
        Document doc = Jsoup.connect(cashFlowStatementURL).get();

        for (Element table : doc.select(cashFlowStatementTableName)) {
            for (Element row : table.select("tr")) {
                if(foundLine == false)  {
                    Elements tds = row.select("td");
                    for( int j = 0; j < tds.size() - 1; j++)  {
                        if(tds.get(j).text().equals(cashFromOperatingActivities)) {
                            line = tds.get(j+1).text().replaceAll(",","");
                            line = line.substring(0,(line.length())-2);
                            line2 = Integer.parseInt(line)*1000;
                            System.out.println(line2);
                            foundLine = true;
                        }                                  
                    }
                }    
            } 
        }
    }
    catch (IOException ex)  {
        ex.printStackTrace();
    }
    catch (NumberFormatException ex) {
        ex.printStackTrace();
    }
}  

}

1 个答案:

答案 0 :(得分:4)

你有一个溢出!表中的值为59,713,000。如果将它乘以1000 - line2 = Integer.parseInt(line)*1000;,则会得到一个大于MAXINT的数字,因此为负数。请尝试使用long代替int line2