java - Jsoup 获取 Android 应用程序上的所有 html 数据,但无法获取 Java 控制台应用程序上的所有 html 数据

标签 java android jsoup

在我的 Android 应用程序中,我正在 AsyncTask 中抓取一些数据。它工作完美,Jsoup 正确检索整个文档。但是,当我在 Java 控制台应用程序中运行相同的 Jsoup 代码时,它会连接到 ESPN 网站,但无法获取整个文档,因为 games 对象始终为空(大小始终为 0)。由于某种原因,在控制台应用程序上,代码 document.select("section.sb-score"); 在 html 中找不到此数据。但在 Android 中确实如此。

这是运行良好的 Android 代码:

public class NBAScraper extends GameScraper  //GameScraper extends AsyncTask
{
    public NBAScraper(DateTime date)
    {
        super(date);
        mUrl = "http://www.espn.com/nba/scoreboard/_/date/" + mDateStr; //mDateStr format: yyyyMMdd
    }

    @Override
    protected GameSorterHelper doInBackground(Void... voids)
    {
        GameSorterHelper gsh = new GameSorterHelper();
        try
        {
            Document document = Jsoup.connect(mUrl).get();
            games = document.select("section.sb-score");
            if(games.size() == 0)
                return null;
        } catch (IOException)
        {
            e.printStackTrace();
            return null;
        }

        //do stuff with gsh object...
        return gsh;
    }
}

这是我尝试过的控制台应用程序:

public class Main
{
    public static void main(String[] args)
    {
        String url = "http://www.espn.com/nba/scoreboard/_/date/20170225";
        try
        {
            Document document = Jsoup.connect(url)
                    .maxBodySize(0)
                    .userAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36")
                    .get();
            Elements games = document.select("section.sb-score");
            System.out.println(games.size());

            if (games.size() == 0)
                System.out.println("games size is 0");
            else
                System.out.println("games exist");

        } catch (Exception e)
        {
            e.printStackTrace();
        }
    }
}

如您所见,我尝试将 maxBodySize 设置为 0(允许任何文档下载大小)并设置 userAgent。两者都无法修复它。当然,我也尝试过不设置这两个选项,但这也不起作用。

有谁知道为什么会发生这种情况以及如何让它在控制台应用程序上工作?谢谢!

最佳答案

看起来它与 userAgent 字符串有关。我必须使用以下 (Android UA) 才能使其在我的 PC 上运行:Mozilla/5.0 (Linux; U; Android 4.0.3; ko-kr; LG-L160L Build/IML74K) AppleWebkit/534.30(KHTML,如 Gecko)版本/4.0 Mobile Safari/534.30

关于java - Jsoup 获取 Android 应用程序上的所有 html 数据,但无法获取 Java 控制台应用程序上的所有 html 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42314576/

相关文章:

java - Android 上 Java 中的对象内存管理

java - 没有从 Servlet 页面收到任何响应

java - 解压缩到 ByteArrayOutputStream - 为什么我会收到 EOFException?

java - 使用 jsoup 从表中提取内容

java - Jsoup:以人类阅读的方式提取文本

java - 如何在 Windows 上设置 Stanford CoreNLP 服务器以返回文本情绪

java - Spring Boot中Spring Security的XML配置

java - 下面的线程代码中的synchronized是如何工作的,代码流程是怎样的?

android - 如何在 android 中使用游标适配器从 sqlite 数据库检索数据到自定义 ListView

android - 发布者关闭输入 channel 或发生错误。事件=0x8