Java使用httpRequest+Jsoup爬取红蓝球号码

2025-05-29 0 73

1、jsoup介绍

1.1、简介

jsoup 是一款java 的html解析器,可直接解析某个url地址、html文本内容。它提供了一套非常省力的api,可通过dom,css以及类似于jquery的操作方法来取出和操作数据。

1.2、jsoup的主要功能

1、从一个url,文件或字符串中解析html
2、使用dom或css选择器来查找、取出数据
3、可操作html元素、属性、文本
注意:jsoup是基于mit协议发布的,可放心使用于商业项目。

2、源网站及页面元素分析

2.1、号码源

首先,这里我选择近年来比较稳定的数据源地址【】截图如下

Java使用httpRequest+Jsoup爬取红蓝球号码

2.2、dom元素分析

2.2.1、开奖号码主体分析

先打开开发者工具,找到每条开奖号码对应的dom元素

可以看到每一期号码信息主体在一个<tr>标签中,其中第一个<td>是开奖日期,第二个<td>是开奖期号,第三个<td>是开奖号码,每个奖号是单独的标签,红球的class=rr,篮球没有设置样式

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19
<tr>

<td align="center">2021-06-13</td>

<td align="center">2021065</td>

<td align="center" style="padding-left:10px;">

<em class="rr">01</em>

<em class="rr">04</em>

<em class="rr">08</em>

<em class="rr">19</em>

<em class="rr">29</em>

<em class="rr">33</em>

<em>16</em></td>

<td><strong>362,527,724</strong></td>

<td align="left" style="color:#999;"><strong>3</strong></td>

<td align="center"><strong class="rc">82</strong></td>

<td align="center">

<a href="http://www.zhcw.com/ssq/kjgg/" rel="external nofollow" target="_blank"><img src="http://images.zhcw.com/zhcw2010/kaijiang/zhcw/ssqpd_42.jpg" width="16" height="16" align="absmiddle" title="详细信息"></a>

<a href="http://www.zhcw.com/video/kaijiangshipin/" rel="external nofollow" target="_blank"><img src="http://images.zhcw.com/zhcw2010/kaijiang/zhcw/ssqpd_43.jpg" width="16" height="16" align="absmiddle" title="开奖视频"></a>

</td>

</tr>

2.2.2、页码区域分析

由于我们爬取数据的时候,需要进行翻页操作,所以这里还需要分析翻页部分的内容,继续在开发者工具中,定位页码区域

Java使用httpRequest+Jsoup爬取红蓝球号码

可以看到页码部分是<tbody>中的最后一个<tr>中,翻页操作的内容再class=pg的 <p> 标签中
可以拆分为多个<storage>标签数组,可以分析得出翻页链接的规律。
/zhcw/inc/ssq/ssq_wqhg.jsp?pagenum=页码

/zhcw/html/ssq/list_页码.html

元素 含义
0 总页数
1 总记录数
2 第一页的连接
3 上一页的链接
4 下一页的链接
5 最后一页的连接
6 当前页数
?

1

2

3

4

5

6

7

8

9

10

11

12
<tr>

<td colspan="7" align="center" style="background:#fdf2e3;">

<p class="zhu"></p>

<p class="pg">

共<strong>136</strong> 页 /<strong>2709 </strong>条记录

<strong><a href="/zhcw/inc/ssq/ssq_wqhg.jsp" rel="external nofollow" >首页</a></strong>

<strong><a href="/zhcw/inc/ssq/ssq_wqhg.jsp?pagenum=1" rel="external nofollow" >上一页</a></strong>

<strong><a href="/zhcw/inc/ssq/ssq_wqhg.jsp?pagenum=2" rel="external nofollow" >下一页</a></strong>

<strong><a href="/zhcw/inc/ssq/ssq_wqhg.jsp?pagenum=136" rel="external nofollow" >末页</a></strong>

当前第<strong> 1 </strong>页</p>

</td>

</tr>

3、代码实现

maven引用,这里使用的是jsoup1.13.1版本

?

1

2

3

4

5
<dependency>

<groupid>org.jsoup</groupid>

<artifactid>jsoup</artifactid>

<version>1.13.1</version>

</dependency>

这使用的是基于jeecg开发的job,搭建过程不赘述了,直接看主体代码。

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53
public void execute(jobexecutioncontext arg0) throws jobexecutionexception {

integer maxpage=getmaxpage();//获取总页数

for(int pageno=0;pageno<maxpage;pageno++){//循环处理每一页的数据

string url = "http://kaijiang.zhcw.com/zhcw/html/ssq/list_"+(pageno+1)+".html";//拼访问地址

string strdateformat = "yyyy-mm-dd";

simpledateformat sdf = new simpledateformat(strdateformat);

string html = jwthttputil.httprequest(url, "get",null);//访问对应的页面

document doc = jsoup.parse(html);//用jsoup解析页面内容并且解析为document

document doc1= jsoup.parse(doc.getelementsbyclass("wqhgt").tostring());//wqhgt是table标签的class,这里获取到开奖号码的table的内容并且解析为document

elements trs= doc1.getelementsbytag("tr");//根据tag获取到所有的tr标签,这里获取到的是一个element数组

logger.info("当前页码---"+(pageno+1)+"----"+trs.size());

for(int i=2;i<trs.size()-1;i++){//这里是根据页面内容确定开奖内容是从第三个tr开始到倒数第二个tr结束,最后一个tr是翻页按钮

try {

elements tds=trs.get(i).getelementsbytag("td");

string kjrq=tds.get(0).text();

string kjqh=tds.get(1).text();

//这里是为了防止重复拉取,所以做了判断,如果已存在当前期的奖号,就直接跳过

long count=lotteryssqkjjlservice.getcountforjdbc("select count(*) from lottery_ssq_kjjl where ssq_kjqh='"+ kjqh + "'");

//下面的内容很容易理解,就是可以对照页面分析部分内容看,就不赘述了

if(count>0)break;

lotteryssqkjjlentity kjhmentiry=new lotteryssqkjjlentity();

elements kjhm=tds.get(2).getelementsbytag("em");

kjhmentiry.setssqkjrq(sdf.parse(kjrq));

kjhmentiry.setssqkjqh(kjqh);

kjhmentiry.setssqr1(integer.parseint(kjhm.get(0).text()));

kjhmentiry.setssqr2(integer.parseint(kjhm.get(1).text()));

kjhmentiry.setssqr3(integer.parseint(kjhm.get(2).text()));

kjhmentiry.setssqr4(integer.parseint(kjhm.get(3).text()));

kjhmentiry.setssqr5(integer.parseint(kjhm.get(4).text()));

kjhmentiry.setssqr6(integer.parseint(kjhm.get(5).text()));

kjhmentiry.setssqb1(integer.parseint(kjhm.get(6).text()));

lotteryssqkjjlservice.save(kjhmentiry);

} catch (parseexception e) {

// todo auto-generated catch block

e.printstacktrace();

} catch (exception e) {

// todo auto-generated catch block

e.printstacktrace();

}

}

}

}

private integer getmaxpage(){

string url = "http://kaijiang.zhcw.com/zhcw/html/ssq/list.html";

string html = jwthttputil.httprequest(url, "get",null);

document doc = jsoup.parse(html);

document docpagebar= jsoup.parse(doc.getelementsbyclass("pg").tostring());

elements elepagebar = docpagebar.getelementsbytag("strong");

integer maxpageno=integer.parseint(elepagebar.get(0).text());

return maxpageno;

}

以下是执行完成的部分数据截图

Java使用httpRequest+Jsoup爬取红蓝球号码

拉取到基础数据后,我们可以再写一个job,去计算出每期开奖号码的指标,可以进行奖号分析,预测等。
这里简单实现了部分分析指标的计算,以下是主体代码。

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61
public void run(){

list<lotteryssqkjjlentity> list= lotteryssqkjjlservice.findbyquerystring("from lotteryssqkjjlentity t");

for(int i=0;i<list.size();i++){

lotteryssqkjjlentity kjjg=list.get(i);

logger.info("正在处理:"+kjjg.getssqkjqh());

kjjg.setssqmin(kjjg.getssqr1());//最小号

kjjg.setssqmax(kjjg.getssqr6());//最大号

kjjg.setssqkd(kjjg.getssqr6()-kjjg.getssqr1());//号码跨度

kjjg.setssqjscnt(ssqkjjgutils(kjjg, "jscnt"));//奇数个数

kjjg.setssqoscnt(ssqkjjgutils(kjjg, "oscnt"));//偶数个数

kjjg.setssqsum(ssqkjjgutils(kjjg, "sum"));//号码和

lotteryssqkjjlservice.updateentitie(kjjg);

}

logger.info("结果数据条数"+list.size());

}

/**

*

* @param kjjg

* @param optype jsgs=奇数个数

* @return

*/

private integer ssqkjjgutils(lotteryssqkjjlentity kjjg,string optype){

list<integer> t =new arraylist<integer>();

t.add(kjjg.getssqr1());

t.add(kjjg.getssqr2());

t.add(kjjg.getssqr3());

t.add(kjjg.getssqr4());

t.add(kjjg.getssqr5());

t.add(kjjg.getssqr6());

integer result=0;

switch (optype) {

case "jscnt":

case "oscnt":

int jsgs=0;

int osgs=0;

for(int i=0;i<t.size();i++){

if(t.get(i)%2==0){

osgs++;

}else{

jsgs++;

}

}

if("jscnt".equals(optype)){

result=jsgs;

}else{

result=osgs;

}

break;

case "sum":

int sum=0;

for(int i=0;i<t.size();i++){

sum+=t.get(i);

}

result=sum;

break;

default:

break;

}

return result;

}

至此,这个简单的爬虫就写完了,可以利用爬过来的这些基础数据,进行一些数据分析,预测。

到此这篇关于java使用httprequest+jsoup爬取红蓝球号码的文章就介绍到这了,更多相关java 爬取红蓝球号码内容请搜索快网idc以前的文章或继续浏览下面的相关文章希望大家以后多多支持快网idc!

原文链接:https://juejin.cn/post/6973925783370727432

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 Java使用httpRequest+Jsoup爬取红蓝球号码 https://www.kuaiidc.com/106037.html

相关文章

发表评论
暂无评论