我创建使用jsoup一类,将做到以下几点:
- 构造器打开一个URL连接。
- 我有一个将检查页面的状态的方法。 即200,404等。
- 我要解析的页面,并返回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();
但是,这是一个没有去。 有什么建议? 或者更好的方法去吗?
正如在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;
}
}
如果你不需要登录,使用方法:
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");
}
这就是它..保持良好的工作
你应该能够调用parse()的响应对象。
Document doc = response.parse();
像你想用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();
}
}
}