一、基础配置:
-<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.12.1</version>
</dependency>
二、代码程序:
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.io.IOException;
//我们要读取网站中的前100篇
//分页的时候,每一页有18篇
//100篇就是(18*5+10)
public class Reptile03 {
public static void main(String[] args) {
int count=0; //计数器
int totalQuantity=100;//总共100篇
int page=0; //从第一页开始 在这个题目中 page最大就是6 第六页的第十篇
ReptileService reptileService = new ReptileService();
String url = "https://www.qlu.edu.cn/gdyw/list1.htm"; //初始页面
Document document=null;
Elements elements=null;
while(count<100){
try {
document = Jsoup.connect(url).get();
elements = document.select("div.col_news_con>div>div>ul>li>span>a");
// System.out.println(elements.size()); //可以查看有多少条内容
for(Element element:elements){
count++;// 每读取一个数据,计数器就+1
if(count==totalQuantity+1){
System.exit(0);
}
// 文章链接 System.out.println(element.attr("href"));
System.out.println("****************************************************************************************************************************************************************************************************");//分割线
System.out.println("****************************************************************************************************************************************************************************************************");//分割线
System.out.println("文章章节数:"+count); //篇数
System.out.println(element.ownText());//文章标题
// 通过文章链接提取文章内容
// 先判断文件是否是https开始
if(element.attr("href").startsWith("https")){
System.out.println("文章链接:"+element.attr("href"));
// 运行到这里,说明是https开始,我们直接从连接中提取
reptileService.getArticleByOfficial(element.attr("href"));
}else{
System.out.println("文章链接:"+"https://www.qlu.edu.cn"+element.attr("href"));
// 运行到这里,说明不是https开始,我们要改变一下
reptileService.getArticle("https://www.qlu.edu.cn"+element.attr("href"));
}
}
url= reptileService.changePage(url,page,count);
System.out.println(url);
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.io.IOException;
public class ReptileService {
// 从href中获取文章的内容
public void getArticle(String href){
Elements articles =null;
Elements articlesPicture;
try {
Document document = Jsoup.connect(href).get();
//文字
articles = document.select("div.wp_articlecontent>p");
for(Element article:articles){
// 获取文章文字
System.out.println(article.ownText());//但是数据比较冗杂
}
// 图片
articlesPicture = document.select("div.wp_articlecontent>p>img");
for(Element picture:articlesPicture){
System.out.println("https://www.qlu.edu.cn/"+picture.attr("src"));//但是数据比较冗杂
}
} catch (IOException e) {
e.printStackTrace();
}
}
// 从href中获取文章的内容(来源于公众号)
public void getArticleByOfficial(String href){
Elements articles =null;
Elements articlesPicture=null;
try {
Document document = Jsoup.connect(href).get();
// 文字
articles = document.select("div.rich_media_content>section>p>span");
for(Element article:articles){
System.out.println(article.ownText());//但是数据比较冗杂
}
// 图片
articlesPicture = document.select("div.rich_media_content>section>p>img");
for(Element picture:articlesPicture){
System.out.println(picture.attr("src"));//但是数据比较冗杂
}
} catch (IOException e) {
e.printStackTrace();
}
}
// 当此页面的内容提取完了之后,要换下一个分页
public String changePage(String url,int page,int count){
page = (count/18)+1; //比如count是22时,page就是2,刚好就是第二页
System.out.println("下一次进入页数:"+page+",count:"+count);
url = url.replace(url.substring(28,33),"list"+String.valueOf(page)); //当页数改变的时候,url也需要改变
return url;
}
}