概述
jsoup的使用:
jsoup是用来解析HTML的,上回说到可以使用httpclient爬取目标网页的源码,这次我们将爬取到的源码进行解析,去其糟粕,取其精华。只留下我们需要的内容即可。
Let’s go!
一、搭建环境
直接上pom.xml代码~
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.3.1</version>
</dependency>
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.8.3</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
二、编写实现类
我把HttpGetUtils的代码也放在这里,结合起来看容易理解
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import org.apache.http.HttpEntity;
import org.apache.http.HttpStatus;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
/*
* @author sjia
* @Date 2017年4月14日--下午9:35:45
*/
public class HttpGetUtils {
/**
* get 方法
* @param url
* @return
*/
public static String get(String url){
String result = "";
try {
//获取httpclient实例
CloseableHttpClient httpclient = HttpClients.createDefault();
//获取方法实例。GET
HttpGet httpGet = new HttpGet(url);
//执行方法得到响应
CloseableHttpResponse response = httpclient.execute(httpGet);
try {
//如果正确执行而且返回值正确,即可解析
if (response != null
&& response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
System.out.println(response.getStatusLine());
HttpEntity entity = response.getEntity();
//从输入流中解析结果
result = readResponse(entity, "utf-8");
}
} finally {
httpclient.close();
response.close();
}
}catch (Exception e){
e.printStackTrace();
}
return result;
}
/**
* stream读取内容,可以传入字符格式
* @param resEntity
* @param charset
* @return
*/
private static String readResponse(HttpEntity resEntity, String charset) {
StringBuffer res = new StringBuffer();
BufferedReader reader = null;
try {
if (resEntity == null) {
return null;
}
reader = new BufferedReader(new InputStreamReader(
resEntity.getContent(), charset));
String line = null;
while ((line = reader.readLine()) != null) {
res.append(line);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (reader != null) {
reader.close();
}
} catch (IOException e) {
}
}
return res.toString();
}
}
好了接下来,该写我们的jsoup解析类了
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;
/*
* @author sjia
* @Date 2017年4月14日--下午9:38:37
*/
public class ParseHtml {
public static String parse(String html)
{
//直接通过Jsoup得到org.jsoup.nodes.Document实例
Document doc=Jsoup.parse(html);
//根据Xpath解析得到我们想要内容的Elements
//ps:百度贴吧里,层主的发言和发的图片都是class="d_post_content_main" 的div
Elements eles=doc.select("div[class=d_post_content_main]");
String result=eles.toString();
System.out.println(result);
return html;
}
}
三、测试代码!
这里我随便找了个贴吧进行测试。
上代码!
import com.crawl.HttpGetUtils;
import com.crawl.ParseHtml;
/*
* @author sjia
* @Date 2017年4月14日--下午9:45:37
*/
public class TestCase {
@Test
public void test1(){
String html=HttpGetUtils.get("https://tieba.baidu.com/p/4461920476?pn=3");
ParseHtml.parse(html);
System.out.println("OK");
}
}
测试结果:
熟悉的绿条,证明我们测试通过了。
接下来看看控制台输出的信息:
注意看,这个div 的class=”d_post_content_main”
所以解析完成!
最后你可以把这些string都导入到数据库里去!这里我就不赘述了!
最后
以上就是追寻机器猫为你收集整理的java爬虫第二弹的全部内容,希望文章能够帮你解决java爬虫第二弹所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复