java简单的抓取网页数据

来源:互联网 发布:数据库管理师培训费用 编辑:程序博客网 时间:2024/06/09 17:06

用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/

2 0