打开与Jsoup连接,获取状态代码和文档解析(Open a connection with Jsou

2019-06-24 07:14发布

我创建使用jsoup一类,将做到以下几点:

  1. 构造器打开一个URL连接。
  2. 我有一个将检查页面的状态的方法。 即200,404等。
  3. 我要解析的页面,并返回URL列表的方​​法。#

下面是什么,我试图做的,而不是它很粗糙,因为我一直在尝试了很多不同的东西粗略工作

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();

但是,这是一个没有去。 有什么建议? 或者更好的方法去吗?

Answer 1:

正如在JSoup的文档所陈述Connection.Response类型,有一个parse()该解析响应的身体作为方法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;
   }
}


Answer 2:

如果你不需要登录,使用方法:

Document doc = Jsoup.connect("url").get();

如果您确实需要登录我建议使用:

Response res = Jsoup.connect("url")
    .data("loginField", "yourUser", "passwordField", "yourPassword")
    .method(Method.POST)
    .execute();
Document doc = res.parse();

//If you need to keep logged in to the page, use
Map<String, String> cookies = res.cookies;

//And by every consequent connection, you'll need to use
Document pageWhenAlreadyLoggedIn = Jsoup.connect("url").cookies(cookies).get();

在您的使用得到的URL我可能会尝试

Elements elems = doc.select(a[href]);
for (Element elem : elems) {
    String link = elem.attr("href");
}

这就是它..保持良好的工作



Answer 3:

你应该能够调用parse()的响应对象。

Document doc = response.parse();


Answer 4:

像你想用jsoup连接,然后检查状态代码,然后根据状态代码,你会解析或任何你想做的事情,似乎你的情况。

对于这第一个你要检查,而不是创建连接的URL状态代码。

  Response response = Jsoup.connect("Your Url ").followRedirects(false).execute();
        System.out.println(response.statusCode() + " : " + response.url());

response.statusCode()将返回状态码

之后,你可以创建连接

 if (200 == response.statusCode()) {
        doc = Jsoup.connect(" Your URL").get();
        Elements elements = doc.select("href");
        /* what ever you want to do*/
      }

您的类将是这样的

package com.demo.soup.core;

import java.io.IOException;

import org.jsoup.Connection.Response;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;

/**
 * The Class DemoConnectionWithJsoup.
 *
 * @author Ankit Sood Apr 21, 2017
 */
public class DemoConnectionWithJsoup {

    /**
     * The main method.
     *
     * @param args
     *            the arguments
     */
    public static void main(String[] args) {
    Response response;
    try {
        response = Jsoup.connect("Your URL ").followRedirects(false).execute();

        /* response.statusCode() will return you the status code */
        if (200 == response.statusCode()) {
        Document doc = Jsoup.connect("Your URL").get();

        /* what ever you want to do */
        }
    } catch (IOException e) {
        e.printStackTrace();
    }

    }

}


文章来源: Open a connection with Jsoup, get status code and parse document