You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从Benzinga网站获取最热门卖空股票的指定数据?

问题描述

需要获取Benzinga网站「最热门卖空股票」板块的以下数据:

  • Symbol(股票代码)
  • Current Short Int(当前卖空比率)
  • Previous Short Int(上期卖空比率)
  • Short In(卖空天数)
  • Short Share Value(卖空股票价值)

当前使用Jsoup直接抓取页面文本,但未获取到目标数据,代码如下:

public class doIT extends AsyncTask<Void,Void,Void> {
    String words;
    @Override
    protected Void doInBackground(Void... params) {
        try {
            Document document = Jsoup.connect("https://www.benzinga.com/short-interest/most-shorted").get();
            words = document.text();
        } catch (IOException e) {
            e.printStackTrace();
        } return null;
    }
    @Override
    protected void onPostExecute(Void aVoid) {
        super.onPostExecute(aVoid);
        Log.i("words",words);
    }
}
解决方案

问题根源

目标页面的卖空数据是通过JavaScript动态渲染加载的,Jsoup仅能抓取页面的静态HTML源码,无法解析执行JS后生成的动态内容,所以直接调用document.text()无法获取到表格里的目标数据。

可行解决方法

1. 抓取后端API(推荐)

打开浏览器开发者工具(F12),切换到「网络」标签,刷新页面后筛选XHR/fetch请求,找到加载卖空数据的API接口。这类接口通常返回JSON格式数据,直接请求API比解析页面DOM更高效稳定。

修改后的AsyncTask示例:

public class doIT extends AsyncTask<Void,Void,String> {
    @Override
    protected String doInBackground(Void... params) {
        try {
            // 替换为你找到的实际API地址
            String apiUrl = "https://example-api.benzinga.com/short-interest/most-shorted";
            String jsonResponse = Jsoup.connect(apiUrl)
                    .ignoreContentType(true) // 允许Jsoup处理JSON响应
                    .userAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36")
                    .execute()
                    .body();
            return jsonResponse;
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }
    }

    @Override
    protected void onPostExecute(String jsonResponse) {
        super.onPostExecute(jsonResponse);
        if (jsonResponse != null) {
            Log.i("API响应数据", jsonResponse);
            // 使用Gson/Jackson等JSON解析库提取所需字段
            // 例如:
            // MostShortedData data = new Gson().fromJson(jsonResponse, MostShortedData.class);
        }
    }
}

2. 使用WebView渲染页面后抓取

如果找不到可用API,可以用Android的WebView加载页面,等待JS渲染完成后再提取数据:

  1. 在布局中添加WebView组件
  2. 启用JavaScript支持,监听页面加载完成事件
  3. 通过evaluateJavascript()执行JS脚本获取渲染后的页面内容

示例代码片段:

WebView webView = findViewById(R.id.webview);
webView.getSettings().setJavaScriptEnabled(true);
webView.setWebViewClient(new WebViewClient() {
    @Override
    public void onPageFinished(WebView view, String url) {
        super.onPageFinished(view, url);
        // 执行JS获取表格的HTML,需根据页面实际DOM结构调整选择器
        webView.evaluateJavascript("document.querySelector('.table-responsive table').outerHTML", new ValueCallback<String>() {
            @Override
            public void onReceiveValue(String value) {
                // 解析返回的HTML字符串
                Document doc = Jsoup.parse(value.replace("\"", "")); // 去除JS返回的引号包裹
                Elements rows = doc.select("tr");
                
                for (Element row : rows) {
                    Elements cols = row.select("td");
                    if (cols.size() >= 5) {
                        String symbol = cols.get(0).text().trim();
                        String currentShortInt = cols.get(1).text().trim();
                        String previousShortInt = cols.get(2).text().trim();
                        String shortInDays = cols.get(3).text().trim();
                        String shortShareValue = cols.get(4).text().trim();
                        
                        Log.i("卖空数据", String.format("%s | 当前比率:%s | 上期比率:%s | 天数:%s | 价值:%s",
                                symbol, currentShortInt, previousShortInt, shortInDays, shortShareValue));
                    }
                }
            }
        });
    }
});
webView.loadUrl("https://www.benzinga.com/short-interest/most-shorted");

注意事项

  • 严格遵守网站的使用条款和robots.txt规则,避免高频请求导致IP被封禁
  • 部分API可能需要特定请求头(如User-Agent、Referer),需在请求中添加对应参数
  • 使用WebView时,注意处理内存泄漏问题,及时销毁WebView实例

内容的提问来源于stack exchange,提问作者Arron Lapta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 07:15:37