这几天刚接触爬虫,好奇看了下本站的前端代码,发现是静态网页,直接使用jsoup就可以。

先在pom导入依赖

<dependency>
    <groupId>org.jsoup</groupId>
    <artifactId>jsoup</artifactId>
    <version>1.13.1</version>
</dependency>

然后检查网站链接:

https://www.dotcpp.com/oj/problem1000.html

https://www.dotcpp.com/oj/problem1001.html

每一题的链接只有题号的差别,然后再看1000这道题的网页代码

image.png


题目在这个div下

image.png

题目描述在这个里面,通过识别它们的class,就能定位到它们


代码:

import org.jsoup.Connection;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;

import java.io.*;
import java.nio.charset.StandardCharsets;

public class GetDotCpp {
    public static void main(String[] args) throws IOException {

        //在写入的时候会按照路径自动创建文件
        FileWriter writer = new FileWriter("D://题目.txt", true);//默认为覆盖,改为true追加模式
        for (int i = 1000; i <= 3131; i++) {
            String url = "https://www.dotcpp.com/oj/problem" + i + ".html";
            String str = "";
            // 与要爬取数据的页面建立连接
            
            Connection connection = Jsoup.connect(url);
            Document document = connection.get();
            // 找到第一个class为head_box_text_w的文档对象,获取题目标题
            Element elementTitle = document.selectFirst("[class=head_box_text_w]");
            if(elementTitle!=null){
                str += elementTitle.text() + "\n";
            }
            // panel_prob_body,获取题目内容
            Element elementText = document.selectFirst("[class=panel_prob_body]");
            if(elementText!=null){
                str += elementText.text() + "\n\n";
            }
            System.out.println(i);
            writer.write(str);
            writer.flush();
        }
        writer.close();

    }
}

有的题目描述是图片形式,这里只读取文本。

image.png

等待爬取结束,在d盘下就有了一个txt文件,这里面就是所有题目的题目描述了,复制到word里面查看,大概三十五万字。

image.png


image.png


点赞(0)
 

0.0分

1 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论