`

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

    博客分类:
  • java
阅读更多

使用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("没有采集到结果");
        }
    }
}

 

 

 

 

2
4
分享到:
评论

相关推荐

    基于springboot+mybatisplus+jsoup+mysql开发web小说网站

    【标题】基于SpringBoot+MyBatisPlus+Jsoup+MySQL开发Web小说网站 在现代互联网环境中,构建一个Web小说网站已经成为许多开发者和创业者的首选项目。本项目使用了Java技术栈,具体包括SpringBoot、MyBatisPlus、...

    jsoup+httpclient j简单爬虫

    例如,要从一个网页中抓取所有的段落(`&lt;p&gt;` 标签),你可以使用以下 JSoup 代码: ```java import org.jsoup.Jsoup; import org.jsoup.nodes.Document; // 获取网页内容 Document doc = Jsoup.connect(...

    Java爬虫Jsoup+httpclient获取动态生成的数据

    Java爬虫是指使用Java语言编写的一类程序,这些程序能够按照既定的规则自动从互联网上抓取信息。常见的Java爬虫库包括Jsoup、HttpClient、HtmlUnit等,它们各具特色,能够处理不同类型的网页内容。 ### Jsoup库解析...

    jsoup+httpclient

    为了更好地理解,这里提供一个简化的示例代码片段,演示如何使用JSoup和HttpClient获取网页内容: ```java CloseableHttpClient httpClient = HttpClients.createDefault(); HttpGet httpGet = new HttpGet(...

    springboot+mybatisplus+jsoup+mysql搭建小说阅读网站

    springboot+mybatisplus+jsoup+mysql springboot【小说阅读网站】,多线程抓取小说数据(单本或者批量),持久化到MySQL数据库,能定时跟源站数据同步=小说定时更新。通过jsoup采集数据到mysql数据,redis作为缓存...

    Jsoup+httpclient模拟登陆和抓取页面.pdf

    Jsoup+httpclient模拟登陆和抓取页面.pdf

    Jsoup+httpclient 模拟登陆和抓取

    Jsoup+httpclient 模拟登录和抓取知识点: 1. Jsoup库使用介绍: - Jsoup是一个Java的HTML解析器,能够直接解析HTML文档,提供类似于jQuery的操作方法。 - 主要功能包括从URL、文件或字符串中解析HTML,使用DOM或...

    动态爬虫jsoup+jdic实现

    总的来说,动态爬虫jsoup+jdic实现是一种实用的网络爬虫技术,它帮助我们克服了静态HTML解析无法处理动态内容的问题。通过熟练运用这两个工具,开发者可以在Java环境中高效地抓取和处理各种网页信息。

    jsoup+httpclient+jar包

    6. **数据提取**:使用JSoup的select方法通过CSS选择器定位元素,或者使用getElementById、getElementsByTag等方法提取特定数据。 7. **处理数据**:提取的数据可以进一步处理,如存储到数据库、分析、展示等。 8....

    jsoup+htmlunitl 爬取外币汇率

    在本文中,我们将深入探讨如何使用Jsoup和HtmlUnit库来爬取并处理网页上的外币汇率信息。这两个工具是Java编程语言中的强大选择,用于网络数据抓取和页面解析。 首先,Jsoup是一个用于处理实际世界HTML的Java库。它...

    用eclipse在Maven基础上使用Jsoup+MYSQL+MyBatis+jsp实现网络小说抓取以及前端展示

    5. 使用Jsoup连接目标网站,解析HTML并提取小说信息,通过MyBatis接口存入数据库。 6. 设计JSP页面,通过Servlet或Controller接收请求,调用MyBatis查询数据,动态填充页面内容。 7. 部署应用到服务器,如Tomcat,...

    spring boot+java +jsoup+ 爬虫

    Spring Boot + Java + Jsoup 爬虫是一个常见的技术组合,用于构建高效、简洁的网络爬虫项目。本文将深入探讨这些技术如何协同工作,以及如何利用它们来抓取和处理网页上的图片资源。 首先,Spring Boot 是一个由...

    基于Java开发的简单steam爬虫。使用jsoup+jdbc实现用户资料爬取存储以及商店页面游戏图片下载。.zip

    使用jsoup+jdbc实现用户资料爬取存储以及商店页面游戏图片下载。.zip”提供了一个Java编程的实例,用于开发一个简单的Steam平台数据爬虫。这个项目主要涉及以下几个关键知识点: 1. **Java编程语言**:作为项目的...

    基于java+Jsoup+HttpClient的网络爬虫技术的网络新闻分析系统设计与实现(源码+文档)网络爬虫-数据挖掘.zip

    资源名字:基于java+Jsoup+HttpClient的网络爬虫技术的网络新闻分析系统设计与实现(源码+文档)_MySQL_网络爬虫_数据挖掘.zip 资源内容:项目全套源码+完整文档 源码说明: 全部项目源码都是经过测试校正后百分百...

    图片列表RecyclerView+ListView+WebView+JzvdStd/JZPlayer+Jsoup+Glide

    在Android开发中,标题"图片列表RecyclerView+ListView+WebView+JzvdStd/JZPlayer+Jsoup+Glide"所提及的技术栈是构建一个功能丰富的移动应用的关键组件。以下是这些技术的具体介绍和它们如何协同工作的详细说明: 1...

    Lucene4.8+IKAnalyzer+SpringMVC4+Jsoup+Quartz示例

    本示例项目"Lucene4.8+IKAnalyzer+SpringMVC4+Jsoup+Quartz"为我们提供了一个强大的智能搜索引擎搭建框架,它整合了多项关键技术,旨在帮助开发者高效地实现网页抓取、内容分析和定时任务等功能。 首先,Lucene是...

    Java爬虫【一篇文章精通系列-案例开发-巨细】HttpClient5 + jsoup + WebMagic + spider

    本篇文章以"一篇文章精通系列-案例开发-巨细"为主题,详细介绍了如何使用HttpClient5、jsoup、WebMagic以及spider-flow这四个关键工具来构建一个强大的Java爬虫系统。以下是对这些工具和技术的深入解析。 首先,...

    java基于jsoup+mongodb的简单爬虫入门程序

    **Java基于Jsoup+MongoDB的简单爬虫入门程序** 在现代互联网环境中,数据的获取与分析变得至关重要,而爬虫技术就是实现这一目标的重要工具。本教程将介绍如何使用Java编程语言,结合Jsoup库进行网页抓取,并利用...

Global site tag (gtag.js) - Google Analytics