欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-07-14 16:59:55
...

  由于今日头条等头条类产品的出现,以今日头条为代表所使用的爬虫技术正在逐渐火热,在爬虫领域具有良好性能和较好效果的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