8

次のことを行う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();

しかし、それはダメです。助言がありますか?またはこれについて行くためのより良い方法は?

4

4 に答える 4

18

Connection.ResponseタイプのJSoupドキュメントに記載されているように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;
   }
}
于 2012-05-09T16:13:11.813 に答える
7

ログインする必要がない場合は、以下を使用してください。

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");
}

それはそれについてです..良い仕事を続けてください

于 2012-05-13T22:52:32.523 に答える
3

応答オブジェクトでparse()を呼び出すことができるはずです。

Document doc = response.parse();
于 2012-05-09T16:11:45.840 に答える
3

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

    }

}
于 2017-04-21T07:39:45.287 に答える