java爬虫小demo
jsoup
jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。
为啥要写这篇文章呢,就是闲辖无聊没事干,简单琢磨了一下。
其实呢这个东西真的不难,只要你会一点jquery获取html元素就基本没啥问题。哈哈哈好了不说了直接上代码。
package com.jincou.pachong;
import java.io.IOException;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import sing.test.SqlUitl; /*
* 这个案例你只需要看结果,具体的jsoup介绍下一篇博客会详细介绍 */
public class Pachong {
private static SqlUitl sql = new SqlUitl();
public static void main(String args[]) {
// 这个就是博客中的java反射的url
for (int j = 1; j < 10; j++) {
String url = "https://www.zhipin.com/c101010100/?query=Java&page="+j+"&ka=page-"+j+"";
try { // 先获得的是整个页面的html标签页面
Document doc = Jsoup.connect(url).get();
Elements job = doc.select("div.job-title");//获取页面的节点
Elements xz = doc.select("span.red");//获取页面的节点
/*Elements wz = doc.select(".info-primary p");*/
Elements gs = doc.select("div.company-text h3.name");//获取页面的节点
String[] job1 = job.text().split(" ");
String[] xz1 = xz.text().split(" ");
String[] gs1 = gs.text().split(" ");
int a = 1;
System.out.println(job1.length);
System.out.println(xz1.length);
System.out.println(gs1.length);
if(job1.length>xz1.length){
a = xz1.length;
}else if(job1.length>gs1.length){
a = gs1.length;
}else if(xz1.length > gs1.length){
a = gs1.length;
}else {
a = xz1.length;
}
for (int i = 0; i < a; i++) {//遍历出来存到数据库
System.out.println("============================》》一个职位");
System.out.println(job1[i]);
System.out.println(gs1[i]);
System.out.println(xz1[i]);
sql.insert(job1[i], gs1[i], xz1[i]);
System.out.println("《《=================================");
System.out.println();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
这里爬去的是boss招聘的java职位的信息,然后将爬取到的信息存到数据库。这个是启动类,还有一个dao。如下:
package sing.test;
import java.sql.*;
public class SqlUitl {
private static Connection getConn() {
String driver = "com.mysql.jdbc.Driver";
String url = "jdbc:mysql://localhost:3306/test?useUnicode=true&useSSL=false&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull";
String username = "root";
String password = "root";
Connection conn = null;
try {
Class.forName(driver); //classLoader,加载对应驱动
conn = (Connection) DriverManager.getConnection(url, username, password);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
public int insert(String a,String b,String c) {
Connection conn = getConn();
int i = 0;
String sql = "insert into boss1 (pname,cname,salary) values(?,?,?)";
PreparedStatement pstmt;
try {
pstmt = (PreparedStatement) conn.prepareStatement(sql);
pstmt.setString(1, a);
pstmt.setString(2, b);
pstmt.setString(3, c);
i = pstmt.executeUpdate();
pstmt.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
return i;
}
}
还有sql脚本如下:
CREATE TABLE `boss1` (
`cid` bigint(20) NOT NULL AUTO_INCREMENT,
`pname` varchar(255) DEFAULT NULL COMMENT '//职位',
`cname` varchar(255) DEFAULT NULL COMMENT '公司名称',
`salary` varchar(255) DEFAULT NULL COMMENT '薪资',
PRIMARY KEY (`cid`)
) ENGINE=InnoDB AUTO_INCREMENT=537 DEFAULT CHARSET=utf8mb4;
直接执行main方法效果如下
好了就分享到这里。。。。。。。。。第一次写博客 排版啥的都不会。。。。。。