jsoup爬虫项目基础用法,如何用jsoup从网上爬东西

package com.starry.service;

import java.io.IOException;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.apache.commons.dbutils.QueryRunner;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import com.starry.util.MyJDBCUtils;
import com.starry.utity.Job;

/**
 * 这是一个方法类
 * jsoup的使用方法
 * 以下代码实验于智联招聘		
 * @author Starry
 *
 */
public class DateSearch {
	//主程序入口
	public static void main(String[] args) throws SQLException {
		String url = "http://sou.zhaopin.com/jobs/searchresult.ashx?jl=郑州&kw=保洁&p=1&isadv=0";
		acquireDate(url);
	}
	/**
	 * 这是一个方法,需要传入一个字符串
	 * @param url
	 * @throws SQLException
	 */
	public static void acquireDate(String url) throws SQLException{
		
		QueryRunner qr=new QueryRunner(MyJDBCUtils.getDataSource());
		Job job = new Job();
		try {
			//根据一个url创建一个Document对象
			//此时相当于鼠标点进去这个网页
			Document doc = Jsoup.connect(url).get();
			//获取网页里面class为zumc的那段代码
			Elements element = doc.getElementsByClass("zwmc");
			//获取网页上面那段代码中的的包含href属性的a标签,得到一个集合
			Elements element2 = element.select("a[href]");
			//遍历集合
			for (Element ele : element2) {
				//获取 上面那段代码中的  href="www.XXXXXXXXXXX.com" 获取的是引号中的网址
				String href = ele.attr("href");
				//然后根据获得的网址在创建一个对象    ,相当于又点进去了一个网页
				Document docc = Jsoup.connect(href).get();
				//下面的是我新建的一个job类,我把我从网页上弄出来的东西封装到这个类里面,然后在输出到mysql
				//我使用的方法很简单,例如下面:div.inner-left>h1  意思就是说有个标签叫div,这个div
				//的class是inner-left,">"这个符号的意思是这个标签里面有个h1的标签,".text"这个意思是把这个h1标签里面的文字转换出来变成String字符串
				job.setJobName(docc.select("div.inner-left>h1").text());// 工作名称
				job.setCompanyName(docc.select("div.inner-left>h2").text());// 公司名称
				//这个就是有个class是terminal-ul的ul标签,他里面有个li,li里面有个strong标签
				//然后把Strong里面的文字给我变成一个String字符串  "first"意思是  第一个strong标签里面的内容
				job.setPay(docc.select("ul.terminal-ul>li>strong").first().text());// 工资范围
				job.setJobDesc(docc.select("div.tab-inner-cont>p").first().text());// 职位描述
				job.setCompanyDesc(docc.select("div.tab-inner-cont[style]>p").text());// 公司描述
				//这是一个获取日期的方法
				String str = docc.select("ul.terminal-ul>li").get(2).select("strong").text();
				job.setPublicDate(dateMethod(str));// 发布日期
				job.setCreateDate(dateMethod2(0));// 创建时间
				
				//这个标签就有点意思了,select了两次
				//第一次先查找第5个li,然后获取第5个li里卖弄的strong标签中的内容
				//"get"的意思是我要获取第5个li里面的内容  {从0开始,第一个是0}
				job.setPersonNumber(docc.select("ul.terminal-ul>li").get(6).select("strong").text());
				job.setJobAdress(docc.select("ul.terminal-ul>li").get(1).select("strong").text());
				job.setSourceURL(href);
				
				//mysql插入数据的语句
				String sql="insert into worktable value(?,?,?,?,?,?,?,?,?,?,?)";
				Object[] params={null,job.getJobName(),job.getCompanyName(),
						job.getPay(),job.getJobDesc(),job.getCompanyDesc(),job.getJobAdress(),job.getPersonNumber(),
						job.getPublicDate(),job.getCreateDate(),job.getSourceURL()};
				qr.update(sql, params);
			}

		} catch (IOException e) {
			e.printStackTrace();
		}

		/*
		 * 创建时间 和当前时间
		 */

	}

	/**
	 * 信息发布日期
	 * @param a
	 * @return
	 */
	public static String dateMethod(String str){
		
		String regEx="\\d{4}-\\d{2}-\\d{2}";   
		Pattern p = Pattern.compile(regEx);   
		Matcher m = p.matcher(str);
		String aa = null;
		if(m.matches()){
			aa=str;
		}else{
			if(str.equals("前天")){
				aa=dateMethod2(2);
			}else if(str.equals("昨天")){
				aa=dateMethod2(1);
			}else if(str.equals("15天前")){
				aa="15天前";
			}else{
				aa=dateMethod2(0);
			}
		}
		return aa;
	}

	public static String dateMethod2(int a) {
		Calendar cal = Calendar.getInstance();
		cal.add(Calendar.DATE, -a);
		String yesterday = new SimpleDateFormat("yyyy-MM-dd ").format(cal.getTime());
		return yesterday;
	}
}

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值