本文摘自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中为什么不要在 foreach 循环里进行元素的 remove/add 操作
Java中使用lambda表达式检查list集合是否存在某个值
更多相关阅读请进入《Java》频道 >>

深入理解Java虚拟机 JVM高级特性与实践 周志明 第3版
这是一部从工作原理和工程实践两个维度深入剖析JVM的著作,是计算机领域公认的经典。