javaJsoup爬取网站文章生成文件保存在本地 - Go语言中文社区

javaJsoup爬取网站文章生成文件保存在本地


javaJsoup爬取网站文章生成文件保存在本地

前言:

​ 导入jar包,这是目标链接https://www.iyiou.com/kcjiedu/1.html,它是有分页的,所以根据分页网址的变化生成分页对应的网址,爬取下载内容到本地磁盘

maven:
 <dependency>

			<groupId>org.jsoup</groupId>

			<artifactId>jsoup</artifactId>

			<version>1.11.3</version>

</dependency>
代码:
/**
 * 
 */
package TestJava;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;


/**
 * @author 杨光宇
 * 2019年12月10日
 */
public class day10 {
	public static void main(String[] args) throws Exception {
		//爬取目标https://www.iyiou.com/kcjiedu/1.html
		String url="https://www.iyiou.com/kcjiedu/1.html";
		Document doc = Jsoup.connect(url).get();
		//因为分页,所以我们获取他最后一页的数字
		int end =Integer.parseInt(doc.select(".end").text());
		//循环每一页  仔细观察网址的变化只是在最后数字发生了变化
		for (int i = 1; i <= end; i++) {
				//将地址的1替换成每页的数字生成一个新的url
				String replaceUrl = url.replaceAll("1", String.valueOf(i));
				System.out.println("获取链接的全部文章链接:"+replaceUrl);
				try {
					getAticleUrl(replaceUrl);
				} catch (Exception e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
		}
	}
	public static void getAticleUrl(String url) throws Exception{
		Document doc = Jsoup.connect(url).get();
		//查找class为newestArticleList的div 并从里面获取a标签属性
		Elements select = doc.select(".newestArticleList a");
		//这里他是有两个href地址的,有一个图片链接和一个文本链接 所以我们弄一个丢一个即可
		int i=0;
		for (Element element : select) {
			i++;
			if(i%2==0){
				continue;
			}
			String aticleUrl=element.attr("href");
			System.out.println("		单个文章链接:"+aticleUrl);
			//开始正式爬去单个链接
			getAticle(aticleUrl);
		}
	}
	public static void getAticle(String url) throws Exception{
		System.out.println("			开始爬去文章标题:"+url);
		Document doc = Jsoup.connect(url).get();
		//获取标题
		Elements select_title = doc.select("#post_title");
		//直接把非文件名字符替换
		String textTitle = select_title.text().replaceAll("[\s\\/:\*\?\"<>\|]", "");
		System.out.println("				文章的标题"+textTitle);
				//创建txt文件以文章标题为文件名
				String path="d:/pic/pa/aticle/"+textTitle+".txt";
				//创建文件
				File file = new File(path);
				if(!file.exists()){
					file.createNewFile();
				}
		//获取内容
		Elements select_description = doc.select("#post_description");
		String text_description = select_description.text();
				//下载文章
				loadStr(path, text_description);
	}
	public static void loadStr(String path,String text_description) throws Exception{
		//要写入文件所以创建BufferedWriter
		BufferedWriter bw = new BufferedWriter(new FileWriter(new File(path)));
		//想着匹配到多个空格就进行一个换行  不知道能不能行通 不喜欢忽略
		String[] split = text_description.split("     ");
		for (String str : split) {
			bw.write(str+"rn");
		}
		//关闭流
		if(bw!=null){
			bw.close();
		}
	}
}
效果展示:

在这里插入图片描述

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/qq_44426756/article/details/103482763
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢