자바 httpRequest+Jsoup 를 사용 하여 빨 간 블 루 볼 번 호 를 얻 습 니 다.
10267 단어 JavahttpRequestJsoup기어오르다
1.1 안내
jsoup 는 자바 의 HTML 해상도 기 로 URL 주소,HTML 텍스트 내용 을 직접 분석 할 수 있 습 니 다.그것 은 DOM,CSS 및 jQuery 와 유사 한 조작 방법 으로 데 이 터 를 추출 하고 조작 할 수 있 는 매우 편리 한 API 를 제공 합 니 다.
1.2 JSOP 의 주요 기능
1.URL,파일 또는 문자열 에서 HTML 분석
2.DOM 또는 CSS 선택 기 를 사용 하여 데 이 터 를 찾 거나 꺼 냅 니 다.
3.HTML 요소,속성,텍스트 조작 가능
주의:jsoup 는 MIT 프로 토 콜 을 바탕 으로 발 표 된 것 으로 상업 프로젝트 에 안심 하고 사용 할 수 있 습 니 다.
2.소스 사이트 및 페이지 요소 분석
2.1 번호 원본
우선,여기 서 저 는 최근 몇 년 동안 비교적 안정 적 인 데이터 소스 주 소 를 선택 하 겠 습 니 다[모 사이트]캡 처 는 다음 과 같 습 니 다.
2.2 dom 요소 분석
2.2.1 추첨 번호 의 주체 분석
먼저 개발 자 도 구 를 열 고 모든 추첨 번호 에 대응 하 는 dom 요 소 를 찾 습 니 다.
각 호의 번호 정보 주체 가 하나의태그 에 있 는 것 을 볼 수 있 습 니 다.그 중에서 첫 번 째는 추첨 날짜 이 고 두 번 째는 추첨 번호 이 며 세 번 째는 추첨 번호 입 니 다.각 상 번 호 는 단독 태그 이 고 빨 간 공의 class=rr 입 니 다.농 구 는 스타일 을 설정 하지 않 았 습 니 다.
<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 페이지 영역 분석우리 가 데 이 터 를 기어 올 라 갈 때 페이지 넘 기 작업 을 해 야 하기 때문에 페이지 넘 기 부분의 내용 을 분석 하고 개발 자 도구 에서 페이지 넘 기 영역 을 계속 찾 아야 합 니 다.
페이지 번호 부분 은의 마지막에서 볼 수 있 습 니 다.페이지 넘 기기 동작 내용 은 class=pg 의
탭 에서 볼 수 있 습 니 다.
여러 개의
/zhcw/inc/ssq/ssq_wqhg.jsp?pageNum=페이지 번호
혹시
/zhcw/html/ssq/list_페이지 번호.html
원소
속뜻
0
총 페이지 수
1
총기 록 수
2
첫 페이지 의 연결
3
이전 페이지 의 링크
4
다음 페이지 링크
5
마지막 페이지 연결
6
현재 페이지 수
<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 참조,여 기 는 JSOP 1.13.1 버 전 을 사용 합 니 다.
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.13.1</version>
</dependency>
이것 은 jeecg 를 바탕 으로 개발 한 Job 을 사용 합 니 다.구축 과정 은 군말 하지 않 고 주체 코드 를 직접 봅 니 다.
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;
}
다음은 완 료 된 부분 데이터 캡 처 입 니 다.기본 데 이 터 를 얻 은 후에 우 리 는 job 를 하나 더 써 서 매 호의 추첨 번호 의 지 표를 계산 하고 상 번호 분석,예측 등 을 할 수 있다.
여기 서 일부 분석 지표의 계산 을 간단하게 실 현 했 고 다음은 주체 코드 이다.
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;
}
이로써 이 간단 한 파충 류 는 다 썼 다.기어 오 는 기초 데 이 터 를 이용 해 데이터 분석 과 예측 을 할 수 있다.자바 가 httpRequest+Jsoup 을 사용 하여 레 드 블 루 볼 번 호 를 얻 는 것 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 자바 가 레 드 블 루 볼 번 호 를 얻 는 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JPA + QueryDSL 계층형 댓글, 대댓글 구현(2)이번엔 전편에 이어서 계층형 댓글, 대댓글을 다시 리팩토링해볼 예정이다. 이전 게시글에서는 계층형 댓글, 대댓글을 구현은 되었지만 N+1 문제가 있었다. 이번에는 그 N+1 문제를 해결해 볼 것이다. 위의 로직은 이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.