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.net.connectexception: connection timed out: connect

Java 简介

Java 中判断两个字符串值是否相等

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

Java bigdecimal 加减乘除运算

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

接口和抽象类的区别是什么?

Java 语言有哪些特点?

线程有哪些基本状态?

Java中为什么不要在 foreach 循环里进行元素的 remove/add 操作

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




打赏

取消

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

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

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

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

评论

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