当前位置: 首页 > 知识库问答 >
问题:

在Android应用程序上获取所有html数据,而不是在Java控制台应用程序上

周越泽
2023-03-14

在我的Android应用程序中,我正在异步任务中抓取一些数据。它工作正常,Jsoup可以正确地检索整个文档。但是,当我在Java控制台应用程序中运行相同的Jsoup代码时,它会连接到ESPN网站,但无法获取整个文档,因为games对象始终为空(大小始终为0)。由于某些原因,在控制台应用程序上,代码文档。选择(“section.sb分数”) 在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设置为0。两者都不能解决问题。当然,我也尝试过在没有设置这两个选项的情况下使用它,但这也不起作用。

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


共有1个答案

熊俊人
2023-03-14

看起来它与userAgent字符串有关。为了让它在我的PC上运行,我不得不使用以下(AndroidUA):Mozilla/5.0(Linux;U;Android4.0.3;ko-kr;LG-L160L Build/IML74K)AppleWebkit/534.30(KHTML,比如Gecko)Version/4.0 Mobile Safari/534.30

 类似资料:
  • 问题内容: 我正在用Java和gradle编写控制台应用程序。我正在使用插件,并在中正确配置了必填字段。 在我的主班里,我与有联系。这是问题所在:当我在项目目录中运行时,阅读器不会等待控制台输入。而是在第一次通话时返回。对于我在做什么,这种行为是不可取的。 解决办法是什么?是否有用于gradle的单独的控制台应用程序插件,或者我需要以某种方式调整插件以适合我的需要? 问题答案: 默认情况下,gra

  • 我目前正在开发一个Android版本的iPhone应用程序。

  • 问题内容: 所有, 我已经用Java编写了基于命令行的PhoneBook应用程序。该应用程序基本上会询问用户的一些详细信息,例如姓名,年龄,地址和电话号码,并将它们存储在文件中。其他操作包括按名称,电话号码等查找电话簿。所有详细信息都通过控制台输入。 我正在尝试为我已实现的每个功能编写JUnit测试用例,但无法弄清楚如何将实现代码重定向到我的JUnit测试方法中的某个东西,当我的实际代码停止供用户

  • 通过WebLogic Admin控制台停止/启动部署时,有时我们会收到以下错误: 然而,如果我停止并启动托管服务器,部署似乎又回来了。 我的问题是,为什么这些war文件在服务器运行时从托管服务器上随机消失?这通常发生在我们有一段时间(6个月)没有接触部署之后。还有其他部署的war文件。它不会影响应用程序的运行,直到我们尝试停止/启动它。 这就是文件系统前后的样子。 在此处重新启动托管服务器。。。

  • 我在上传文件时遇到错误。Google play控制台中的aab捆绑包与现有密钥库。我有白标签应用程序和密钥库文件 你上传了一个APK或Android应用捆绑包,该捆绑包使用一个密钥签名,该密钥也用于签名交付给用户的APK 在Android应用程序包的概念中,所有30个应用程序都可以使用相同的密钥库文件和密码,还是我们需要为所有30个应用程序创建单独的密钥库和密码?

  • 要在控制台应用程序中开始使用Hangfire,您需要首先将Hangfire包安装到控制台应用程序。因此,使用您的软件包管理器控制台窗口进行安装: PM> Install-Package Hangfire.Core 然后添加任务存储安装所需的软件包。例如,使用SQL Server: PM> Install-Package Hangfire.SqlServer 仅需 Hangfire.Core 软件包