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

来源:互联网 发布:社交网络有哪些 编辑:程序博客网 时间:2024/06/05 14:48

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

爬取的效果:
这里写图片描述

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

爬取博客: 泥瓦匠BYSocket

阅读全文
0 0