Java爬虫--利用HttpClient和Jsoup爬取博客数据并存入数据库

时间:2022-09-18 17:59:27

  由于今日头条等头条类产品的出现,以今日头条为代表所使用的爬虫技术正在逐渐火热,在爬虫领域具有良好性能和较好效果的Python在最近一年的时间里逐渐火热起来,同时因为Python良好的数据分析和机器学习的能力,Python的应用越来越广泛。不过,今天我们要提到的是基于java 的简单爬虫,为使用java作为开发语言的人做一个参考。

爬虫实现

HttpClient 是 Apache Jakarta Common 下的子项目,可以用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。

jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。

httpClient操作代码,值得注意的是,我们将html存入数据库的时候,最好将数据库对应的字段设置为text类型或者是longtext类型。存入的时候使用setString即可。否则可能 出现。Data too long for row错误。

public class pachongMain {

    public static void main(String[] args) throws Exception {
        for (int j = 2000; j >0; j = j - 1) {
            CloseableHttpClient client = HttpClients.createDefault();
            HttpGet get = new HttpGet("http://www.bysocket.com/?p=" + j);



            HttpResponse response = client.execute(get);
// System.out.println(response.getStatusLine().getStatusCode());
            if (response.getStatusLine().getStatusCode() !=200 ) {
                continue ;
            }
            HttpEntity entity = response.getEntity();
            String content = EntityUtils.toString(entity, "utf-8");
                        // 使用Jsoup解析网页
            Document doc = Jsoup.parse(content);
            Elements element3 = doc.select("h1[class=entry-title]");
            String title = element3.text();


            Elements element2 = doc.select("div[class=entry-content]");
            String article =element2.html();
           new StoreData().store(j,article,title);

        }

    }

}

数据存储类

public class StoreData {
    public void store(Integer id, String content, String  title) throws Exception {
        String driverClassName = "com.mysql.jdbc.Driver";

        String url = "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8";

        String username = "root";

        String password = "123456";
        // 加载驱动类
        Class.forName(driverClassName);
        Connection con = (Connection) DriverManager.getConnection(url, username, password);
        // 创建sql语句模板
        String sql = "INSERT blog VALUES(?,?,?)";
        // 创建一个声明对象
        PreparedStatement pst = (PreparedStatement) con.prepareStatement(sql);
        // 用循环将数据添加到sql模板中
            pst.setInt(1, id);
            pst.setString(2, content);
            //pst.set
            pst.setString(3, title);

        pst.addBatch();
        // 将sql语句发送到mysql上
        int[] res = pst.executeBatch();
        System.out.println(res);
        pst.close();
    }
}

爬取的效果:
Java爬虫--利用HttpClient和Jsoup爬取博客数据并存入数据库

但是只是这种普通的爬取会出现请求超时的情况,
出现这种请求头设置有误,使用浏览器,分析请求信息,对于url请求,将请求头信息添加到java的程序中即可。

爬取博客: 泥瓦匠BYSocket