文档章节

使用JSoup+CSSPath采集和讯网人物信息

杨尚川
 杨尚川
发布于 2015/04/08 05:49
字数 627
阅读 774
收藏 1

使用JSoup+CSSPath采集和讯网人物信息


 

代码见github


 

模型类:

 

public class Person {
    private String name;
    //基本信息
    private Map<String, String> basicInfos;
    //教育经历
    List<String> educations;
    //工作经历
    List<String> jobs;
    //重要事件
    List<String> importants;
    
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Map<String, String> getBasicInfos() {
        return basicInfos;
    }
    public void setBasicInfos(Map<String, String> basicInfos) {
        this.basicInfos = basicInfos;
    }
    public List<String> getEducations() {
        return educations;
    }
    public void setEducations(List<String> educations) {
        this.educations = educations;
    }
    public List<String> getJobs() {
        return jobs;
    }
    public void setJobs(List<String> jobs) {
        this.jobs = jobs;
    }
    public List<String> getImportants() {
        return importants;
    }
    public void setImportants(List<String> importants) {
        this.importants = importants;
    }
}

 

 

 

采集器:

 

package org.apdplat.demo.collect;

import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class PersonCollector{
    private static final Logger LOG = LoggerFactory.getLogger(PersonCollector.class);
    private static final int PAGES = 298;

    public List<Person> collect() {
        List<Person> persons = new ArrayList<>();
        try {
            String url = "http://renwu.hexun.com/search.aspx?z=All&Filter=All&page=";
            //共298页
            for(int i=1; i<PAGES+1; i++){
                url += i;
                Document document = Jsoup.connect(url).get();
                String cssQuery = "html body div.wrap div.mainBox div.main div.contBox div.cont div.slistBox ul li a";
                LOG.debug("cssQuery: " + cssQuery);
                Elements elements = document.select(cssQuery);
                for(Element element : elements){
                    try{
                        String personName = element.text().replace(Jsoup.parse("&nbsp;").text(), " ").replace(Jsoup.parse("・").text(), "·");
                        LOG.debug("人物姓名:"+personName);
                        String href = element.attr("href");
                        LOG.debug("人物链接:"+href);
                        document = Jsoup.connect(href).get();
                        //基本信息
                        String basicInfoCSSQuery = "html body div.wrap div.mainBox div.main div.setBase div.right ul li";
                        LOG.debug("basicInfoCSSQuery: " + basicInfoCSSQuery);
                        Elements basicElements = document.select(basicInfoCSSQuery);
                        Map<String, String> basicInfos = new HashMap<>();
                        for(Element basicElement : basicElements){
                            String info = basicElement.text().replace(Jsoup.parse("&nbsp;").text(), " ").replace(Jsoup.parse("・").text(), "·");
                            if(info != null){
                                String[] attrs = info.split(":");
                                if(attrs != null && attrs.length == 2){
                                    basicInfos.put(attrs[0], attrs[1]);
                                }
                            }
                        }
                        String moreCSSQuery = "html body div.wrap div.mainBox div.main div.contBox";
                        LOG.debug("moreCSSQuery: " + moreCSSQuery);
                        Elements moreElements = document.select(moreCSSQuery);
                        //教育经历
                        List<String> educations = new ArrayList<>();
                        Elements educationElements = moreElements.get(0).select("div.cont p");
                        for(Element educationElement : educationElements){
                            String education = educationElement.text().replace(Jsoup.parse("&nbsp;").text(), " ").replace(Jsoup.parse("・").text(), "·");
                            if(education != null && !"".equals(education.trim())){
                                educations.add(education);
                            }
                        }                        
                        //工作经历
                        List<String> jobs = new ArrayList<>();
                        Elements jobElements = moreElements.get(1).select("div.cont p");
                        for(Element jobElement : jobElements){
                            String job = jobElement.text().replace(Jsoup.parse("&nbsp;").text(), " ").replace(Jsoup.parse("・").text(), "·");
                            if(job != null && !"".equals(job.trim())){
                                jobs.add(job);
                            }
                        }                        
                        //重要事件
                        List<String> importants = new ArrayList<>();
                        Elements importantElements = moreElements.get(4).select("div.cont p");
                        for(Element importantElement : importantElements){
                            String important = importantElement.text().replace(Jsoup.parse("&nbsp;").text(), " ").replace(Jsoup.parse("・").text(), "·");
                            if(important != null && !"".equals(important.trim())){
                                importants.add(important);
                            }
                        }

                        Person person = new Person();
                        person.setName(personName);
                        person.setBasicInfos(basicInfos);
                        person.setEducations(educations);
                        person.setJobs(jobs);
                        person.setImportants(importants);
                        persons.add(person);
                    }catch(IOException e){
                        LOG.error("采集出错",e);
                    }
                }
            }            
        } catch (IOException ex) {
            LOG.error("采集出错",ex);
        }
        return persons;
    }

    public static void main(String[] args) {
        PersonCollector personCollector = new PersonCollector();
        List<Person> persons = personCollector.collect();
        if (persons != null) {
            int i = 1;
            for (Person person : persons) {
                LOG.info("采集结果 " + (i++) + " "+person.getName()+ " :");
                
                if(person.getBasicInfos() != null && person.getBasicInfos().size() > 0){        
                    LOG.info("基本信息************************************************************");
                    for(Entry<String, String> basicInfo : person.getBasicInfos().entrySet()){
                        LOG.info(basicInfo.getKey() +":" + basicInfo.getValue());
                    }
                }
                if(person.getEducations() != null && person.getEducations().size() > 0){                    
                    LOG.info("");
                    LOG.info("教育经历************************************************************");
                    for(String education : person.getEducations()){
                        LOG.info(education);
                    }
                }
                if(person.getJobs() != null && person.getJobs().size() > 0){
                    LOG.info("");
                    LOG.info("工作经历************************************************************");
                    for(String job : person.getJobs()){
                        LOG.info(job);
                    }
                }
                if(person.getImportants() != null && person.getImportants().size() > 0){
                    LOG.info("");
                    LOG.info("重要事件************************************************************");
                    for(String important : person.getImportants()){
                        LOG.info(important.replace("\\?", " "));
                    }
                }
                LOG.info("");
                LOG.info("");
            }
        } else {
            LOG.error("没有采集到结果");
        }
    }
}

 

 

 

 


© 著作权归作者所有

杨尚川

杨尚川

粉丝 1103
博文 220
码字总数 1624053
作品 12
东城
架构师
私信 提问
元搜索引擎

元搜索引擎 原搜索引擎是通过一个统一的用户界面帮助用户在多个搜索引擎中选择和利用合适的搜索引擎来实现检索操作,是对分布于网络的多种检索工具的全局控制机制。 自己没搜索引擎,又想要大...

杨尚川
2015/03/24
2.4K
0
网站数据采集小程序开发

[项目描述] 数据采集源堆糖网: http://www.duitang.com/search/?kw=%E8%AE%BE%E8%AE%A1&type=feed [技术要求] 语言:Java或python 数据库:mysql 支持增量采集,采集频率可以在程序中配置 [采...

流云留云
2016/01/16
36
1
web data scraping的各种解决方案

对于互联网人来说,web data scraping (web数据采集)已经成为一个迫切而又实在的需求。在如今这个开源的时代,问题往往不在于是否有解决方案,而是如何选择适合你的解决方案,因为总是有很多...

xjfengck
2014/08/09
218
0
机器视觉技术在农业生产的发展前景

在1995年就有学者利用图像处理技术把新鲜的西红柿分级分类。也有学者利用机器视觉技术检测大米外观品质检测、观测小麦的生长状态、通过对棉花叶片的孔洞和叶片边缘的缺损情况判定受棉花受虫害...

gunser
2018/03/26
0
0
做一个能采集附近小程序信息的采集系统,可根据不同的经纬度信息,采集指定经纬度的附近小程序信息,并提供服务端(采集终端管理、采集任务发送、终端采集任务队列(批量不同经纬度列表,终端根据这些队列任务进行采集)、终端已采集列表、采集查询后台)功能。

主要功能包括: 1、服务端 1)提供“采集终端管理”功能, 2)服务端可“批量发送采集任务”, 3)可实时显示“当前采集的任务队列”, 4)可实时显示以及返回“终端已采集列表”信息, 5)可...

uName446
2017/12/22
37
0

没有更多内容

加载失败,请刷新页面

加载更多

js中将字符串转换成json的三种方式

使用ajax的开发项目过程中,经常需要将json格式的字符串返回到前端,前端解析成js对象(JSON )。 ECMA-262(E3) 中没有将JSON概念写到标准中,还好在 ECMA-262(E5) 中JSON的概念被正式引入了...

物种起源-达尔文
31分钟前
6
0
centos7下面python3.7安装

我这里使用的是CentOS7,默认系统自带python2.7的版本,这个版本被系统很多程序所依赖,所以不建议删除,如果使用最新的Python3那么我们知道编译安装源码包和系统默认包之间是没有任何影响的...

chenhongjiang
37分钟前
5
0
带你入门SpringCloud统一配置 | SpringCloud Config

前言 在微服务中众多服务的配置必然会出现相同的配置,如果配置发生变化需要修改,一个个去修改然后重启项目的方案是绝对不可取的。而 SpringCloud Config 就是一个可以帮助你实现统一配置选...

桌前明月
37分钟前
6
0
9.21 日常记录

先说说最近的状态: 一句话,很不好。缺失了目标感,做什么事都是浑浑噩噩的。 每天都是想着轻松的活路去做复习,没有看书,根本没有去思考如何让自己变得更好。 回想起年初的约定,也是一个...

Garphy
47分钟前
6
0
借助Python 函数进行模块化代码

你是否对函数、类、方法、库和模块等花哨的编程术语感到困惑?你是否在与变量作用域斗争?无论你是自学成才的还是经过正式培训的程序员,代码的模块化都会令人困惑。但是类和库鼓励模块化代码...

问题终结者
50分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部