一、引入依赖
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.10.3</version>
</dependency>
二、代码
public static void main(String[] args) {
// 要爬取的网页URL
String url = "https://datachart.500.com/ssq/history/newinc/history.php?start=00001&end=23145";
List<String> list= Lists.newArrayList();
List<String> list1= Lists.newArrayList();
try {
// 使用Jsoup连接到网页并获取Document对象
Document document = Jsoup.connect(url).get();
// 获取目标HTML代码
Elements elements = document.select("tbody[id=tdata]").select("tr");
for (Element e : elements) {
Elements tds = e.select("td");
if (tds.size() >= 8) {
// 获取开奖号码
list.add(tds.get(2).text().concat(" ") +tds.get(3).text().concat(" ") +
tds.get(4).text().concat(" ") + tds.get(5).text().concat(" ")+ tds.get(6).text());
list1.add(tds.get(7).text());
} else {
System.out.println("Warning: Insufficient elements in a row");
}
}
// 创建一个Map来存储数字及其出现次数
Map<Integer, Integer> frequencyMap = new HashMap<>();
Map<Integer, Integer> frequencyMap1 = new HashMap<>();
// 计算每个数字的出现次数
for (String numberGroup : list) {
String[] numbers = numberGroup.split(" ");
for (String number : numbers) {
int num = Integer.parseInt(number);
frequencyMap.put(num, frequencyMap.getOrDefault(num, 0) + 1);
}
}
// 输出结果
for (Map.Entry<Integer, Integer> entry : frequencyMap.entrySet()) {
System.out.println("红球: " + entry.getKey() + ", 次数: " + entry.getValue());
}
for (String number : list1) {
int num = Integer.parseInt(number);
frequencyMap1.put(num, frequencyMap1.getOrDefault(num, 0) + 1);
}
// 输出结果
for (Map.Entry<Integer, Integer> entry1 : frequencyMap1.entrySet()) {
System.out.println("篮球: " + entry1.getKey() + ", 次数: " + entry1.getValue());
}
// 选出出现次数最多的6个红球
int topN = 6;
for (int i = 0; i < topN; i++) {
int maxFrequency = 0;
int maxRedBall = 0;
// 找出当前未被选择的出现次数最多的红球
for (Map.Entry<Integer, Integer> entry : frequencyMap.entrySet()) {
int redBall = entry.getKey();
int frequency = entry.getValue();
if (frequency > maxFrequency && !isRedBallSelected(redBall, frequencyMap)) {
maxFrequency = frequency;
maxRedBall = redBall;
}
}
// 输出结果
System.out.println("红球: " + maxRedBall + ", 次数: " + maxFrequency);
// 标记已选择的红球
frequencyMap.put(maxRedBall, -1);
}
// System.out.println(list);
} catch (IOException e) {
e.printStackTrace();
}
}
// 检查红球是否已经被选择
private static boolean isRedBallSelected(int redBall, Map<Integer, Integer> redBallFrequencyMap) {
return redBallFrequencyMap.get(redBall) == -1;
}
三、结果