使用 java 和 jsoup 进行网页抓取

时间:2021-02-12 18:52:50

标签: java web-scraping jsoup

我正在尝试从下表中抓取数据。

Yahoo finance CBOE Volatility Index

我正在使用 jsoup。

        String url = "https://finance.yahoo.com/quote/%5EVIX/history?p=%5EVIX&guccounter=1&guce_referrer=aHR0cHM6Ly9tYWlsLmdvb2dsZS5jb20v&guce_referrer_sig=AQAAAKU5UXnZEhNK_s1k-l6fQ7l-jFaR2xghH5NOhaohsec-HThT1BaEsni-hUlysVCFWpzd4qa2OZ2YZtBDJNQqKw1Uh64_nppDI4RnzPnTgxDGta123-A_SbIBm4SA5B0xopHvDcl5A21esFvWceZnRJPk6ohtud7OGJpWcNLdADYT";
        Document doc = Jsoup.connect(url).get();

        Element table = doc.getElementById("mrt-node-Col1-1-HistoricalDataTable");
        Elements rows=table.select("tr");

        Elements first=rows.get(0).select("th,td");
        List<String>headers=new ArrayList<>();

        for(Element header:first)
            headers.add(header.text());


        List<Map<String,String>> listMap = new ArrayList<Map<String,String>>();
        for(int row=1;row<rows.size()-1;row++) {
            Elements colVals = rows.get(row).select("th,td");
            int colCount = 0;
            Map<String,String> tuple = new LinkedHashMap<String,String>();
            for(Element colVal : colVals)
                tuple.put(headers.get(colCount++), colVal.text());
            listMap.add(tuple);
        }

通过这种方法,我只能得到前 100 行或更多行。这是因为它首先加载该数量的行,每当我们滚动到该行的该位置时,就会加载新的行。我找不到任何分页,网络调用也没有任何帮助。数据似乎以 gif 格式编码(只要滚动鼠标事件)。

我找到了一种使用 selenium Web 驱动程序并获取所有数据的方法。我想知道有没有什么办法可以只用 Jsoup 来解决这个问题。

0 个答案:

没有答案
相关问题