当前位置: 首页 > 面试题库 >

使用Jsoup打开连接,获取状态代码并解析文档

羊舌子瑜
2023-03-14
问题内容

我正在使用jsoup创建一个类,该类将执行以下操作:

  1. 构造函数将打开与url的连接。
  2. 我有一种方法可以检查页面状态。即200、404等。
  3. 我有一种解析页面并返回网址列表的方法。

下面是我要做的工作的粗略工作,而不是因为我尝试了许多不同的事情而变得很粗糙

public class ParsePage {
private String path;
Connection.Response response = null;

private ParsePage(String langLocale){
    try {
        response = Jsoup.connect(path)
                .userAgent("Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.21 (KHTML, like Gecko) Chrome/19.0.1042.0 Safari/535.21")
                .timeout(10000)
                .execute();
    } catch (IOException e) {
        System.out.println("io - "+e);
    }
}

public int getSitemapStatus(){
    int statusCode = response.statusCode();
    return statusCode;
}

public ArrayList<String> getUrls(){
    ArrayList<String> urls = new ArrayList<String>();

 }
}

如您所见,我可以获取页面状态,但是使用构造函数中已经打开的连接,我不知道如何解析文档,我尝试使用:

Document doc = connection.get();

但这是不行的。有什么建议?还是更好的方法来解决这个问题?


问题答案:

如JSoup文档中有关Connection.Response类型的所述,有一种parse()方法将响应的主体解析为a
Document并返回它。有了它,您就可以随心所欲。

例如,查看执行 getUrls()

public class ParsePage {
   private String path;
   Connection.Response response = null;

   private ParsePage(String langLocale){
      try {
         response = Jsoup.connect(path)
            .userAgent("Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.21 (KHTML, like Gecko) Chrome/19.0.1042.0 Safari/535.21")
            .timeout(10000)
            .execute();
      } catch (IOException e) {
         System.out.println("io - "+e);
      }
   }

   public int getSitemapStatus() {
      int statusCode = response.statusCode();
      return statusCode;
   }

   public ArrayList<String> getUrls() {
      ArrayList<String> urls = new ArrayList<String>();
      Document doc = response.parse();
      // do whatever you want, for example retrieving the <url> from the sitemap
      for (Element url : doc.select("url")) {
         urls.add(url.select("loc").text());
      }
      return urls;
   }
}


 类似资料:
  • 使用ApacheHttpClient 4.1。3并尝试从获取状态代码: 如何从中提取状态代码(202,404等)?或者,如果在4.1.3中还有另一种方法可以做到这一点,那它是什么? 另外,我假设完美/良好的HTTP响应是,但也希望得到确认。提前谢谢!

  • 在打开和关闭其他ejb连接时保持和ejb连接打开是常见的还是可以接受的,还是应该在客户端完成连接并为后续任务打开新连接后立即关闭连接? 我目前正在开发一个使用EJB(JBoss AS7.1.1.final)的Swing应用程序。该应用程序打开一个ejb连接(即创建一个SynalContext实例),然后在应用程序保持运行的情况下将该SynalContext用于常见任务。有许多长时间运行的操作,其中

  • 我在macOS上多个文件夹中的多个项目中工作。我通常通过运行以下命令开始处理它们: 这总是会打开一个新窗口,显示我在该项目中工作的最后一个文件。我的下一步是关闭所有标签页,如果编辑器被拆分,我必须像拆分编辑器那样做很多次。 有没有一个设置可以让我总是从一个干净的状态开始? 我认为与此问题相关的设置如下: 我尝试,但行为保持不变。 另外,如果可能,此信息存储在哪里(打开给定文件夹的文件)?这是文件夹

  • 问题内容: 我的程序需要打开大量连接(Mongo)。我得到了错误: 打开的连接太多,无法再打开 在819个连接之后。我已经知道我们可以增加此限制。但这不是我的想法。我正在考虑关闭MongoClient对象,然后在800个连接后再次创建一个新对象。 我的想法是使用新的mongoClient对象将关闭所有连接,并且当我再次启动/创建它时,连接将再次打开直到800。因此不会给出错误。(让我知道此方法是否

  • 问题内容: 我在客户端上将nodejs与socket.io和angularjs一起使用。我从互联网上获取了angular- socketio示例,并向其中添加了方法。 套接字服务: 控制器: 但是,当我尝试使用此方法断开连接时,出现错误: 而且我不知道在哪里挖…… 问题答案: [更新] 是Angular的内部私有变量,因此您不应该真正依赖于此类事情。伊戈尔在另一个答案中描述了一些处理此问题的建议,

  • 在改版1.9中,RetrofitError仍然存在,我们可以通过以下操作获得状态: 您如何使用RXJava在Registfit2.0中做到这一点?