java中jsoup解析爬虫获取的页面html数据,轻松实现一个爬虫


本文摘自classinstance.cn。

最近在找工作,看看各大人才网上的工作岗位,搜索了一下自己住所附近的工作,搜索功能好像对地址搜索不是很友好,于是自己想爬一下各大人才网上的数据,以便自己好搜索,并不商用也不开放数据,话说最近反爬虫很严啊,不过想来自己只是爬取公开的数据,并且不会影响目标网站的正常运行,应该是没事的,这里也希望大家遵守爬虫协议。

jsoup是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。

它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据以某人才网为例,把他的搜索地址中的搜索词和页码动态传入参数,用Jsoup解析dom就可以把想要搜索的岗位数据拿下来,然后自己放到数据直或搜索引擎中搜索,直接分享代码爬虫和jsopu部分代码:

import java.net.URLEncoder;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import com.goodjob.util.HttpUtil;

public class CrawlService {

	public static String rcUrl = "https://www.xmrc.com.cn/net/info/Resultg.aspx?a=a&g=g&recordtype=1&searchtype=1&keyword=#_#&releasetime=365&sortby=updatetime&ascdesc=Desc&PageIndex=#-#&PageSize=100";
	
	public void crawl(String keyword) {
		crawlXmrc(keyword);
	}
	
	public void crawlXmrc(String keyword){
		String keyurl = rcUrl.replaceFirst("#_#",URLEncoder.encode(keyword));//关键词
		int page = 1;
		int pageSize = 100;
		int c = 1;
		while (true) {
			
			try {
				Thread.sleep(1000l);
			} catch (InterruptedException e) {
			}
			String pageUrl = keyurl.replaceFirst("#-#",page+"");//页码
			String xmrcHtml = HttpUtil.httpsGet(pageUrl);
			
			Document document = Jsoup.parse(xmrcHtml);//Jsoup解析html
			
			Elements table = document.getElementsByClass("queryRecruitTable");//内容表格table
			Elements tbody = table.select("tbody");
			Elements trs = tbody.select("tr");
			int size = trs.size();
			for (int i = 0; i < size; i++) {
				if (i!=0) {//第一行为标题
					Element element = trs.get(i);
					Elements tds = element.getElementsByTag("td");
					
					Element jobNameTd = tds.get(1);//职位名称
					Element companyNameTd = tds.get(2);//公司名称
					Element addressTd = tds.get(3);//职位名称
					Element monthlyPayTd = tds.get(4);//参考月薪
					
					String jobName = jobNameTd.text();
					String companyName = companyNameTd.text();
					String address = addressTd.text();
					String monthlyPay = monthlyPayTd.text();
					System.out.println(c+"--"+jobName+"--"+monthlyPay);
					c++;
				}
			}
			if (size < pageSize+1) {//小于pagesize表示最后一页了
				break;
			}
			page ++;
		}
		System.out.println("完成");
	}
	public static void main(String[] args) {
		CrawlService crawlService = new CrawlService();
		crawlService.crawl("java");
	}
}

DOM结构如下图:

阅读剩余部分

相关阅读 >>

Java 教程

Java stream接口操作 count,anymatch,allmatch,nonematch

关于 jvm jdk 和 jre 最详细通俗的解答

Java 中 string 和 int 类型的互相转化

Java中将list集合用逗号隔开进行拼接成字符串

Java 中 json 字符串和 model 对象的相互转化

Java 中定义一个不做事且没有参数的构造方法的作用

Java 和 c++ 的区别 ?

Java md5 加密方法

Java中的强制转换

更多相关阅读请进入《Java》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...