用jsoup的select获取筛选元素
思路
1、通过url获取页面元素————2、用select抽取取有用的信息————3、拼装成想要的格式
例子
要在网上获取所有职业的名称(找工作app里让你选择某某行业的某某领域的某某职位)按等级插入数据库。
选取的网址:http://career.eol.cn/html/sy/zhiye/。
通过url获取页面元素
/**
* @Description: 获取页面元素
* @return Document 返回类型
* @author yangjing
* @date 2017-2-25 下午4:26:16
*/
public static Elements getElements(String url, String select) {
try {
Document doc = Jsoup.connect(url).get();
Elements element1 = doc.select(select);
return element1;
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
... prompt'''
用select抽取取有用的信息并拼接想要用的数据格式
/**
* @Description: 筛选
* @return List<travedParam> 返回类型
* @author yangjing
* @date 2017-2-25 下午4:33:29
*/
public static List<TravedParam> selectDocment(Elements elements) {
List<TravedParam> list = new ArrayList<>();
int parent_id2=0;
int parent_id3=0;
TravedParam travedParam=null;
List<TravedParam> list2=null;
int id=0;
for (int i = 0; i < elements.size(); i++) {
Elements as=elements.get(i).select("a");
for (int j = 0; j < as.size(); j++) {
id++;
Element a=as.get(j);
if(a.className().equals("black_14b")){
//第一级
if(i>0){
list.add(travedParam);
}
travedParam=new TravedParam();
list2=new ArrayList<>();
travedParam.setId(id);
String name="";
if(a.text().contains(">")){
name=a.text().substring(a.text().indexOf(">")+1);
}
travedParam.setName(name);
travedParam.setLevel(1);
travedParam.setParent_id(0);
parent_id2=id;
}else{
TravedParam travedParam2=new TravedParam();
travedParam2.setId(id);
travedParam2.setName(a.text());
//第二级
travedParam2.setParent_id(parent_id2);
travedParam2.setLevel(2);
list2.add(travedParam2);
travedParam.setParamList(list2);
String url=a.attr("href");
if(!url.contains("http://career.eol.cn/html/sy/zhiye/")){
url="http://career.eol.cn/html/sy/zhiye/"+url;
}
String select=".border_c";
Elements elements3=getElements(url, select);
Elements elements33=null;
if(elements3.size()>1){
elements33=elements3.get(i).select("a strong");
}
List<TravedParam> list3=new ArrayList<>();
parent_id3=id;
for (int k = 0; k < elements33.size(); k++) {
id++;
Element element3=elements33.get(k);
TravedParam travedParam3 = new TravedParam();
travedParam3.setName(element3.text());
travedParam3.setId(id);
travedParam3.setLevel(3);
travedParam3.setParent_id(parent_id3);
travedParam3.setDescr(elements3.select("span").get(k).text());
list3.add(travedParam3);
}
travedParam2.setParamList(list3);
}
}
}
return list;
}
... prompt'''
整合上面两个方法写需求
/**
* @author 作者yangjing:
* @date 创建时间:2017-2-17 上午10:48:49
*/
public class Traved {
public static void main(String[] args) {
String url = "http://career.eol.cn/html/sy/zhiye/";
String select = (".border_c .line_23 p");
selectDocment(getElements(url, select));
}
... prompt'''
想要的数据格式对象
package httpreq.guide;
import java.util.Date;
import java.util.List;
/**@author 作者yangjing:
* @date 创建时间:2017-2-25 下午4:28:21
*/
public class TravedParam {
private int id;
private String name;//名称
private String descr;//描述
private String logo;//logo
private int parent_id;//
private int level;//等级
private Date time;//时间
private List<TravedParam> paramList;//存放下级
public List<TravedParam> getParamList() {
return paramList;
}
public void setParamList(List<TravedParam> paramList) {
this.paramList = paramList;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDescr() {
return descr;
}
public void setDescr(String descr) {
this.descr = descr;
}
public String getLogo() {
return logo;
}
public void setLogo(String logo) {
this.logo = logo;
}
public int getParent_id() {
return parent_id;
}
public void setParent_id(int parent_id) {
this.parent_id = parent_id;
}
public int getLevel() {
return level;
}
public void setLevel(int level) {
this.level = level;
}
public Date getTime() {
return time;
}
public void setTime(Date time) {
this.time = time;
}
}
... prompt'''
详情
1、jsoup的官方中文文档为:http://www.open-open.com/
2、API为:http://jsoup.org/apidocs/