基于java使用jsoup爬取网站投票数据的demo

想爬取一个投票网站的实时数据

获取姓名和票数
在这里插入图片描述查看网站源码(这里只展示一部分)

<table border="0" cellpadding="0" cellspacing="0" class="main"
	width="100%">
	<tbody>
		<tr>
			<td height="87" width="30"></td>
			<td class="ttl2_1">
			<p class="att" style="font-size:14px">1、登陆才可投票,可最多选择10名老师,投票可分多次。 <br />
			2、用户名为学号,不区分大小写(ex.b20090001)。 <br />
			3、密码默认为身份证出生年月日(ex.19900101)。<br/>
			4、本次网络投票时间为2019年11月29日12时至2019年12月10日24时。<br>
			<!-- 4、导师排序为拼音顺序。 --></p>
			</td>
			<td width="16"></td>
		</tr>
		<tr>
			<td></td>
			<td valign="top">
			<hr />
			<center><br />
			<center><h1>总参与投票人数:1309</h1></center>
			<br />
			<br />


    				<table border="0" cellpadding="10" cellspacing="0"><tbody>
																												<tr>
															<td class = "md" style="width:232px">
									<div class="text_box" style="width:232px;height:500px;overflow:hidden;  text-align:center;">
									<a href="#" target="_blank"><img src="/img/1.jpg" style="height:170px;max-width:100%" /></a>
										<h3><span class="r">得票:95</span><span class="l">许镇</span></h3>
										<div class="clear dot_line"></div>
										<p class="comments">许镇,北京科技大学副教授,清华大学博士,《工程力学》期刊主编助理,主要研究方向为:城市和重大工程的灾变过程情景仿真。发表论文共30余篇,以第一作者身份发表SCI论文6篇,EI论文4篇,包括2篇JCR工程土木类2区论文,2篇3区论文,1篇美国土木工程学会ASCE下属SCI期刊论文。获得实用新型专利1项,软件著作权5项。曾获得北京市科技新星、北京市科学技术二等奖、校“先进工作者”、校“就业工作贡献教师”、中国建筑学会科技进步奖一等奖、中国公路学会科学技术奖一等奖、中国电力科学技术奖三等奖、全国优秀城乡规划奖三等奖等。</p>
<!--<div class="scrollDiv">
<ul id="teach_1">
</ul>
</div>-->

									</div>
            					</td>
            					<td width="25"></td>
																												<td class = "md" style="width:232px">
									<div class="text_box" style="width:232px;height:500px;overflow:hidden;  text-align:center;">
									<a href="#" target="_blank"><img src="/img/2.jpg" style="height:170px;max-width:100%" /></a>
										<h3><span class="r">得票:81</span><span class="l">刘娟红</span></h3>
										<div class="clear dot_line"></div>
										<p class="comments">刘娟红,女,1966年出生,江苏苏州人,博士学历,北京科技大学土木与资源工程学院教授、博士生导师,兼任中国建筑学会建材分会理事、中国混凝土与水泥制品协会教育与人力资源委员会理事、中国砂石学会专家委员会委员、中国硅酸盐学会固废分会专家委员会委员。长期从事现代混凝土技术教学与研究工作。承担国家自然科学基金、国家重点基础研究发展计划、国家“十二五”科技支撑项目、省部级科技计划项目和横向科研课题等50余项。获省部级科技进步一等奖1项、二等奖1项、三等奖3项。获国家发明专利6项。在公开刊物上发表文章150余篇,被SCI、EI收录50余篇。出版学术专著《绿色高性能混凝土技术与工程应用》、《活性粉末混凝土》和《固体废弃物与低碳混凝土》,主编教材《土木工程材料》。主要科研成果应用于北京市奥运工程与地铁工程混凝土裂缝控制,广东、新疆等省市重点工程等方面。</p>
<!--<div class="scrollDiv">
<ul id="teach_2">
</ul>

可以看到,网站中一共有两个table,需要从后一个table中读取数据,获取姓名和票数

1.创建java项目,导入jsoup的jar包

下载网站,https://jsoup.org/download,其中也有源码。

2.创建爬虫类

Robot.java

package com.getRoot;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

public class Robot {
    public static void main(String[] args)
    {
        Robot robot=new Robot();
        robot.getList();
    }
    public void getList()
    {
    	String url = "http://ysyy.ibeike.com/index.php?p=result";
    	List<Teacher> lists=new ArrayList<>();
        try {
        	Document doc = Jsoup.connect(url).get();
			// 获取最后一个表格中的所有td(因为每一个人都是在td中的)
			Elements els = doc.select("table").last().select("td");
			for (Element el : els) {
				Elements el2=el.select("h3");//从td中找到h3项
				//System.out.println("=="+el2);
				//el2:  <h3><span class="r">得票:81</span><span class="l">刘娟红</span></h3>
				for(Element e:el2)
				{
					//分别获取第一个span和第二个span中的内容,然后赋值到一个类中
					String s1=e.select("span").get(0).text();
					int n=Integer.parseInt(s1.substring(s1.indexOf(':')+1));
					Teacher teacher=new Teacher();
					teacher.setNumber(n);
					teacher.setName(e.select("span").get(1).text());
					
					lists.add(teacher);
				}
			}
        } catch (Exception e) {
            e.printStackTrace();
        }
		//根据票数进行排序
        Collections.sort(lists, new Comparator<Teacher>() {
            @Override
            public int compare(Teacher o1, Teacher o2) {
                if (o1.getNumber() - o2.getNumber() <= 0) { //变成 < 可以变成递减排序
                    return 1;
                } else {
                    return -1;
                }
            }
        });
       // lists.sort(Comparator.naturalOrder());
        for(int i=0;i<lists.size();i++)
        {
        	if(i<9)
        		System.out.println(i+1+"   "+lists.get(i));
        	else
        		System.out.println(i+1+"  "+lists.get(i));
        }
    }
 
}

Teacher.java

package com.getRoot;

public class Teacher 
{
	private String name;
	private int number;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getNumber() {
		return number;
	}
	public void setNumber(int number) {
		this.number = number;
	}
	@Override
	public String toString() {
		if(number>=100)
			return "票数:"+number+"  姓名:"+name;
		else
			return "票数:"+number+"   姓名:"+name;
	}
}

执行结果:
执行结果

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值