天天看點

利用Jsoup+java爬取大資料崗位資訊

一. jsoup介紹

jsoup 是一款Java 的HTML解析器,可直接解析某個URL位址、HTML文本内容。它提供了一套非常省力的API,可通過DOM,CSS以及類似于jQuery的操作方法來取出和操作資料。

二. jsoup功能

  1. 從一個URL,檔案或字元串中解析HTML;
  2. 使用DOM或CSS選擇器來查找、取出資料;
  3. 可操作HTML元素、屬性、 文本;

三. 爬取資料步驟

1.建立一個Java項目。

利用Jsoup+java爬取大資料崗位資訊

2.去Jsoup官網下載下傳Jsoup的jar包,導入到項目中。

利用Jsoup+java爬取大資料崗位資訊
利用Jsoup+java爬取大資料崗位資訊

3.在浏覽器登入校園招聘網站,搜尋大資料崗位,擷取網址和網頁源碼

利用Jsoup+java爬取大資料崗位資訊

4.編寫Java代碼

package jsoup;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.net.URL;

import java.net.URLConnection;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

import org.jsoup.Jsoup;

import org.jsoup.nodes.Document;

import org.jsoup.nodes.Element;

import org.jsoup.select.Elements;

public class Test {

public static String getHtml(String url,String encoding) {

URL uri = null;

URLConnection conn = null;

BufferedReader br = null;

StringBuffer sb = new StringBuffer();

try {

//建立網絡連接配接

uri = new URL(url);

//打開連接配接

conn = uri.openConnection();

//使用輸入流讀取網頁資料

InputStream in = conn.getInputStream();

br = new BufferedReader(new InputStreamReader(in, encoding));

String line = null;

while((line = br.readLine()) != null) {

sb.append(new String(line + “\n”));

}

} catch (Exception e) {

e.printStackTrace();

}finally {

try {

if (br != null) {

br.close();

}

} catch (IOException e) {

e.printStackTrace();

}

}

return sb.toString();

}

public static List<Map<String,String>> getContent(String url,String encoding){
	//擷取網頁内容
	String html = getHtml(url, encoding);
	//将網頁内容轉成document的格式
	Document document = Jsoup.parse(html);
	//擷取ul标簽
	Elements elements = document.getElementsByClass("searchResultItemDetailed");
	//使用List<Map>集合進行收集資料
	List<Map<String,String>> list = new ArrayList<Map<String,String>>();
	//使用一個map進行存儲資料
	for (Element element : elements) {
		//擷取職位名
		String jobName = element.getElementsByClass("searchResultJobName").text().split(" ")[0];
		//擷取公司名
		String firmName = element.getElementsByClass("searchResultCompanyname").text();
		//擷取城市
		String city = element.getElementsByClass("searchResultJobCityval").text();
		//擷取釋出時間
		String time = element.getElementsByClass("searchResultKeyval").text().split(" ")[1].split(":")[1];
		
		//擷取需求
		String require = element.getElementsByClass("searchResultJobdescription").text();
		
		System.out.println(String.format("職位: %s\n公司名:%s\n城市:%s\n釋出時間:%s\n需求: %s\n",jobName,firmName,city,time,require));
		Map<String,String> map = new HashMap<String, String>();
		map.put("職位", jobName);
		map.put("公司名", firmName);
		map.put("城市", city);
		map.put("釋出時間", time);
		map.put("需求", require);
		System.out.println();
		list.add(map);
	}
	return list;
	
}

public static void main(String[] args) {
	List<Map<String, String>> content = getContent("https://xiaoyuan.zhaopin.com/full/0/0_0_0_0_0_-1_%E5%A4%A7%E6%95%B0%E6%8D%AE_1_0", "UTF-8");
	System.out.println(content);
}
           

}

運作效果

利用Jsoup+java爬取大資料崗位資訊