我是靠谱客的博主 追寻机器猫,最近开发中收集的这篇文章主要介绍java爬虫第二弹,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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

测试结果:
这里是junit测试结果
熟悉的绿条,证明我们测试通过了。

接下来看看控制台输出的信息:
这里写图片描述

注意看,这个div 的class=”d_post_content_main”
所以解析完成!
最后你可以把这些string都导入到数据库里去!这里我就不赘述了!

最后

以上就是追寻机器猫为你收集整理的java爬虫第二弹的全部内容,希望文章能够帮你解决java爬虫第二弹所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(36)

评论列表共有 0 条评论

立即
投稿
返回
顶部