Java爬虫——爬取体彩网足球赛果

现在用Python做爬虫很是盛行,在学Java的本人寻思着Java如何做爬虫。

本爬虫例子为体育彩票网http://www.sporttery.cn/
在这里插入图片描述

在这里插入图片描述

本例实现对“足球赛果开奖”的爬取;若要对体育彩票站其他页面爬取,稍微修改代码中URL规则即可;若要爬取非体彩网的其他网站,则需要重新分析其站结构,修改其爬取方式。

在这里插入图片描述
进入正题,编译器为intellij IDEA,大略分析工程构成,上图为其结构:

所含jar包:

第一类 jsoup包,为java爬取页面利器,传送门https://segmentfault.com/a/1190000007967145

第二类 poi包,将数据保存为本地word、excel等利器,传送门http://www.voidcn.com/article/p-odzwqxka-er.html

所含代码

1.main类

完成对足球赛果开奖”页面分析,制定爬取规则。eg页面http://info.sporttery.cn/football/match_result.php?page=1&search_league=0&start_date=2018-10-21&end_date=2018-10-23&dan= 感兴趣同学可去分析下页面结构。

指挥DownloadWord对象将页面数据爬到中list中。
指挥SaveEveryRow对象将list数据保存本机Excel中。

package DownloadWord;import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;import java.lang.String;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;public class Main {public static void main(String[] args) {int allRows = 0;SaveEveryRow save = new SaveEveryRow();HSSFWorkbook workbook = new HSSFWorkbook();HSSFSheet spreadsheet = workbook.createSheet("try");DownloadWord down = new DownloadWord();try {Date d1 = new SimpleDateFormat("yyyy-MM-dd").parse("2018-08-22");Date d2 = new SimpleDateFormat("yyyy-MM-dd").parse("2018-10-23");Calendar dd = Calendar.getInstance();dd.setTime(d1);while (dd.getTime().before(d2)) {SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");String str = sdf.format(dd.getTime());String url = "http://info.sporttery.cn/football/match_result.php?page=1&search_league=0&start_date=" + str + "&end_date=" + str+ "&dan=";if (down.getM_page(url) <= 0) {List lis = down.getTexts(url);save.Save(url, (ArrayList) lis,allRows,workbook,spreadsheet);allRows = allRows + lis.size();dd.add(Calendar.DAY_OF_YEAR, 1);}else{for(int j=1;j<=down.getM_page(url);j++){String u = "http://info.sporttery.cn/football/match_result.php?page="+j+"&search_league=0&start_date=" + str + "&end_date=" + str+ "&dan=";List lis = down.getTexts(u);save.Save(u, (ArrayList) lis,allRows,workbook,spreadsheet);allRows = allRows + lis.size();}dd.add(Calendar.DAY_OF_YEAR, 1);}}}catch (Exception e) {e.printStackTrace();}System.out.println("成功爬取到本机!");}
}

2.DownloadWord类,需熟悉jsoup包中函数相关函数、对页面源码分析。
将爬取页面的信息保存到自己定义的ArrayList数据结构中.

package DownloadWord;import java.io.IOException;
import java.util.*;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;public class DownloadWord {private int rows;private int page;public List getTexts(String u){List list = new ArrayList();try {Document document = Jsoup.connect(u).get();Elements a = document.select(".m-tab").select("tr");rows = a.size()-2;for(int i = 0;i < rows;i++) {Elements b= a.get(i).select("td");Match e = new Match();e.setTime( b.get(0).text());e.setNum(b.get(1).text());e.setMatch(b.get(2).text());e.setVs(b.get(3).text());e.setMidScore(b.get(4).text());e.setFullScore(b.get(5).text());e.setConditon(b.get(6).text());list.add(e);}} catch (IOException e) {e.printStackTrace();}return list;}public int getM_page(String u) throws IOException {Document document = Jsoup.connect(u).get();Elements a = document.select(".m-page").select("li");page = a.size()-3;return page;}
}
  1. SaveEveryRow类,需熟悉POI包中相关函数、对数据源字符串进行分割。
    将ArrayList数据结构数据存放到本机excel文档中。
package DownloadWord;import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;public class SaveEveryRow {private String[] STR;private static String outputFile = "D:\\try.xls";public void Save(String url, ArrayList lis, int allRows, HSSFWorkbook workbook, HSSFSheet spreadsheet) throws IOException {for (int i = 0; i<lis.size(); i++) {Match obj = (Match) lis.get(i);HSSFRow row = spreadsheet.createRow((short) i + allRows);HSSFCell cell0 = row.createCell((short) 0);cell0.setCellValue(obj.getTime());HSSFCell cell1 = row.createCell((short) 1);cell1.setCellValue(obj.getNum().substring(0, 2));HSSFCell cell2 = row.createCell((short) 2);cell2.setCellValue(obj.getNum().substring(2, 5));HSSFCell cell3 = row.createCell((short) 3);cell3.setCellValue(obj.getMatch());STR = obj.getVs().split("[()]", 3);HSSFCell cell4 = row.createCell((short) 4);cell4.setCellValue(STR[0]);HSSFCell cell5 = row.createCell((short) 5);cell5.setCellValue(STR[1]);HSSFCell cell6 = row.createCell((short) 6);cell6.setCellValue(STR[2].substring(2, STR[2].length()));HSSFCell cell7 = row.createCell((short) 7);cell7.setCellValue(obj.getMidScore());HSSFCell cell8 = row.createCell((short) 8);cell8.setCellValue(obj.getFullScore());HSSFCell cell9 = row.createCell((short) 9);cell9.setCellValue(obj.getConditon());}FileOutputStream out = new FileOutputStream(outputFile);workbook.write(out);out.flush();out.close();System.out.println(url);}
}

4.Match类,竞赛基本信息类。
定义的各变量、get、set函数。

package DownloadWord;public class Match {private String time;private String num;private String match;private String vs;private String midScore;private String fullScore;private String conditon;public String getTime() {return time;}public void setTime(String time) {this.time = time;}public String getNum() {return num;}public void setNum(String num) {this.num = num;}public String getMatch() {return match;}public void setMatch(String match) {this.match = match;}public String getVs() {return vs;}public void setVs(String vs) {this.vs = vs;}public String getMidScore() {return midScore;}public void setMidScore(String midScore) {this.midScore = midScore;}public String getFullScore() {return fullScore;}public void setFullScore(String fullScore) {this.fullScore = fullScore;}public String getConditon() {return conditon;}public void setConditon(String conditon) {this.conditon = conditon;}
}

效果:爬取足球竞彩结果8月22号到10月22号,一共2292条信息,存储到本机D:\try.xls文件中。(注意main方法引用的函数dd.getTime().before(d2)是指在d2时间前,即23号之前指22号、21号等等,所以d2应该多设置一天)

在这里插入图片描述
图为页面信息 共2292条信息

在这里插入图片描述
图为爬虫运行结束

在这里插入图片描述
图为保存到本地Excel,2292条完全保存。

结语:用java爬虫相对Python麻烦(好友飞哥的Python代码更简洁),但是亦可通过其java各类jar包所提供的功能丰富接口完工,这也是java强大的一点。
每当需要爬取一个站点时,需分析站点结构,然后这个站及其子站基本就是你的了。

代码与其包含jar包已传到github:https://github.com/Bicycleful/javaCrawler

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/65857.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

我如何预测10场英超联赛的确切结果

Is there a way to predict the outcome of any soccer game with 100% accuracy? The honest and simplest answer is…. no. Regardless of what your fantasy football friends say, there is absolutely no way to be 100% certain, but there is a proven, mathematical …

KNN算法简单应用之预测队伍胜利

爬取了2019年LPL职业联赛的一些数据&#xff0c;通过大小龙&#xff0c;推塔数&#xff0c;以及队伍击杀数来预测队伍胜利&#xff0c;所以分为爬虫和knn算法俩块 首先是爬虫部分&#xff0c;根据网页结构&#xff0c;创造了一个大列表来储存所有要爬取的url&#xff0c;然后循…

世界杯八强即将出炉,iModeluus助您知晓赛果!

世界杯八强之战已渐近尾声&#xff0c;无论是C罗、梅西的遗憾离场&#xff0c;亦或是东道主拼至最后战胜斗牛士&#xff0c;还是内马尔带领的巴西拒绝冷门&#xff0c;已经过去的几天都给我们献上了精彩纷呈的赛事。 今晚的比赛我们依然是期待未减&#xff0c;到底是北欧海盗瑞…

大数据之实战足球盘口、凯利、必发和预测结果分析

现在大点的足球彩票类平台都在搞预测推荐服务&#xff0c;扛着大数据的旗子&#xff0c;安分点的叫做“大数据预测”&#xff0c;博眼球赶时髦的叫“大数据AI算法&#xff08;人工智能算法&#xff09;”&#xff0c;严重点说这是骗取信任。为什么这么说呢&#xff1a; 因为…

【12月17日更新决赛预测】用二元泊松模型预测2022年世界杯淘汰赛结果

用二元泊松模型预测2022年世界杯淘汰赛结果 网上有很多文章用双泊松&#xff08;Double Poisson&#xff09;模型来预测世界杯比赛结果。但是双泊松模型有一个严重的缺陷&#xff0c;那就是它假设比赛中两队的比分是条件独立的。而我们都知道&#xff0c;在对抗性比赛中&…

未来计算机会取代人类吗,未来的人工智能会进化出智慧吗?他们是否会取代人类?...

引言&#xff1a;有关于人工智能概念的提出可以追溯到上个世纪末期&#xff0c;到了最近十年这一概念才逐渐热门起来。目前许多国家都投入大量的资金和人才去研究人工智能技术&#xff0c;可见该技术在未来将会有不可撼动的地位。人工智能时代来袭&#xff0c;它们最终会进化出…

只需3步,快来用AI预测你爱的球队下一场能赢吗?

摘要&#xff1a;作为球迷&#xff0c;我们有时候希望自己拥有预测未来的能力。 本文分享自华为云社区《用 AI 预测球赛结果只需三步&#xff0c;看看你爱的球队下一场能赢吗&#xff1f;》&#xff0c;作者&#xff1a;HWCloudAI。 还记得今年夏天的欧洲杯吗&#xff1f;来自…

磁盘分区工具diskgenius、易我分区大师

对于给磁盘分区&#xff0c;我们知道有很多方式&#xff0c;Windows自带的磁盘管理器就可以实现简单的分区功能&#xff0c;但若是想对磁盘上分区的大小作进一步调整、移动分区、合并分区&#xff0c;甚至克隆磁盘/分区&#xff0c;恢复丢失分区等&#xff0c;就不能单纯指望磁…

看chatGPT怎么帮我们写文章

探索暴风雨的力量与美丽 暴风雨是大自然中一种令人又惊又喜的自然现象。它以其强大的力量和壮观的景象而闻名于世。暴风雨常常带来狂风、暴雨、雷电和可能的冰雹。它们在全球各地发生&#xff0c;无论是在海洋上还是陆地上&#xff0c;都能让我们目睹大自然的力量。 首先&…

你对 ChatGPT 的所有疑问,看这这一篇文章就够了

总会被别人问到&#xff0c;”你听过 ChatGPT 吗&#xff1f;你知道怎么安装吗&#xff1f;帮我装一个呗&#xff01;“等等诸如此类的疑问&#xff0c;前面也写了不少关于 ChatGPT 的文章&#xff0c;相信面前的你估计也有类似的疑问&#xff0c;今天我就把类似的问题梳理总结…

微信朋友圈广告详细说明

根据官方发布的微信广告系统介绍&#xff0c;朋友圈广告来源于微信广告的一部分&#xff0c;与公众号广告形成了一整个体系。关于公众号的广告&#xff0c;简单说&#xff0c;他可以把微信公众号变成广告牌&#xff0c;会根据用户的阅读习惯以及个人信息来进行广告的投放。每一…

今天的微信朋友圈多了一条推广信息

今天早上&#xff0c;不少微信用户在朋友圈中看到了来自微信团队的推广信息&#xff0c;这就是微信即将推出的朋友圈广告。在不久前的中欧商学院举办的“微信全球MBA创新大赛——创意中国2015”活动中&#xff0c;腾讯公司副总裁表示微信朋友圈广告即将上线&#xff0c;这将是微…

微信运营,做好微信朋友圈营销的6个技巧和3点注意事项

如今客户越来越难跟进&#xff0c;借助微信建立客户联系已然成为一种非常有效的方法&#xff01;特别是利用朋友圈营销打造的“信息流广告”&#xff0c;在无形之中就能完成产品的销售。那么如何做好微信朋友圈的营销呢&#xff1f;以下一些实用性技巧和注意事项&#xff0c;希…

微信朋友圈广告投放价格

本地商户对门店周边人群有较强的曝光引客需求&#xff0c;但往往很难实现精准触达&#xff0c;与此同时更面临传统地推难、其它形式费用高、营销流程繁琐、耗时费力等难点。 为解决以上中小商户营销难题&#xff0c;微信广告升级本地广告产品能力&#xff0c;推出针对小商户小额…

朋友圈水果店简短销售文案,水果店朋友圈宣传文案

1、提高自己的审美 想象自己就是一个顾客&#xff0c;看到自己发的内容有没有想买的冲动。图片&#xff0c;视频最好亲力亲为&#xff0c;全部自己去拍&#xff0c;别人拍的可以参考一下拍摄技巧。开水果店主入门学习交流圈子&#xff0c;朋友圈下搜一搜功能&#xff0c;搜水果…

微信朋友圈广告投放

您对微信朋友圈的广告技巧了解多少&#xff1f; 首先&#xff0c;让我们了解一下微信朋友圈的广告。微信朋友圈中的大部分广告都是用图片和文字展示的&#xff0c;并穿插微信官方账号链接。同样&#xff0c;朋友圈中的客户仍然可以通过点赞和评论与他们交流和互动。基于微信系统…

微信朋友圈广告如何投放?怎样投放?

o微信发朋友圈广告宣传都是基于微信公众平台生态模式&#xff0c;以类似好友的优质内容方式在朋友圈中展现的植入式广告&#xff0c;。给予品牌策划推广&#xff0c;当地店面&#xff0c;商品信息&#xff0c;搜集整理客户线索&#xff0c;APP免费下载&#xff0c;发放优惠劵&a…

微信朋友圈广告怎么投放,有那些推广渠道

微信朋友圈广告怎么投放&#xff0c;有那些推广渠道 朋友圈广告推广有哪些定向方式&#xff1f;第一种的话第一是以最小的一个单位地级市的话进行定价投放的&#xff0c;比如说啊像、北京、上海、杭州这种和地级市的话去进行投放&#xff0c;因为另外一种的话就是附近推可以选…

微信朋友圈推广广告怎么投放?

全媒体广告(当地或是全国各地推广业务)微信发朋友圈、抖音视频、快手视频(确保价格低优质)请找我聊!!!咱们更专业!!! 不论你是做房产销售、汽车销售服务、餐馆、专业培训、个人贷款、婚纱影楼、店铺、商业保险这些。。 我们能够让你把你选定范围之内(全国各地、当地)的潜在客户…

微信朋友圈广告怎么做?

一、掌握微信朋友圈广告推广的基本信息1&#xff09;人群定位 手机微信具有准确的数据信息定项功能&#xff0c;可以很好的帮助店家针对目标消费群体进行广告营销&#xff0c;确立广告宣传的准确定位&#xff0c;可以确立广告营销应对整体目标消费群体&#xff0c;更准确地进行…