java爬取读者文摘杂志

java爬虫入门实战练习

此代码仅用于学习研究

此次练习选择了读者文摘杂志网站进行文章爬取

练习中用到的都只是一些简单的方法,不过过程中复习了输入流输出流的使用以及文件的创建写入等知识,对自己还是有所帮助的


经小伙伴提醒,部分文章存在乱码,我们将这两个地方修改一下就可以了

代码可以直接运行(需要Jsoup包),唯一需要在E盘下创建一个名为FileTest的文件夹存储下载的文件或者修改一下代码中的存储路径

第一处(第52行)修改为:

OutputStreamWriter fileOutputStream = new OutputStreamWriter(new FileOutputStream(file,true),"UTF-8");

第二处(第55行)修改为:

fileOutputStream.write(Content.toString());

原代码:

 1 import java.io.File;
 2 import java.io.FileOutputStream;
 3 
 4 import org.jsoup.Jsoup;
 5 import org.jsoup.nodes.Document;
 6 import org.jsoup.select.Elements;
 7  
 8 
 9 public class testDUZHE {
10  
11     public static void main(String[] args) throws Exception {
12         // 第一步:访问读者首页
13         String url = "https://www.dzwzzz.com/";
14         Document document = Jsoup.connect(url).get();
15         
16         // 第二步:解析页面
17         Elements datatime = document.select("a");
18         //获取a标签
19         for(int num=0;num<datatime.size();num++) {
20             //判断文章链接
21             if(datatime.get(num).attr("href").charAt(4)=='_') {
22                 //获取a标签中href属性的值
23                 String deHref = datatime.get(num).attr("href");
24                 System.out.println("==================\n\n\n");
25                 System.out.println("开始获取"+deHref.substring(0, 4)+"年第"+deHref.substring(5,7)+"期");
26                 System.out.println("\n\n\n==================");
27                 //根据a标签的值创建不同年份期刊的文件夹
28                 File fileTest = new File("E:/FileTest/"+datatime.get(num).text());
29                 fileTest.mkdirs();//创建文件夹
30                 //访问不同期刊页面
31                 String DuZhe = "https://www.dzwzzz.com/"+deHref;
32                 Document  newdocu = Jsoup.connect(DuZhe).get();
33                 //获取a标签
34                 Elements a_Elements = newdocu.select("a");
35                 for(int i=0;i<a_Elements.size();i++) {
36                     //判断是否是文章链接
37                     if (a_Elements.get(i).attr("href").charAt(0)=='d'
38                             &&a_Elements.get(i).attr("href").charAt(1)=='u')
39                     {
40                         //访问文章所在页
41                         String purpose = "https://www.dzwzzz.com/"+deHref.substring(0, 8)+a_Elements.get(i).attr("href");
42                         Document finaldocu = Jsoup.connect(purpose).get();
43                         //获取文章标题
44                         Elements h1_elements = finaldocu.select("h1");
45                         String title = h1_elements.text();
46                         //获取文章内容
47                         Elements p_Elements = finaldocu.select("p");
48                         String Content = p_Elements.text();
49                         //创建txt文件
50                         File file = new File("E:/FileTest/"+datatime.get(num).text()+"/"+title+".txt");
51                         //创建文件输出流
52                         FileOutputStream fileOutputStream = new FileOutputStream(file,true);
53                         //这里的true功能是不覆盖原有内容,所以多次运行程序会造成重复
54                            //将文章内容写入文件
55                         fileOutputStream.write(Content.getBytes());
56                            fileOutputStream.close();
57                            System.out.println("文章地址"+purpose);
58                            System.out.println(title+"  下载成功!");
59                     }
60                 }
61             }
62         }
63 
64     }
65  
66 }

运行截图:

下载成功文件示例:

 

posted @ 2019-07-27 21:48  嚼着炫迈去追梦  阅读(362)  评论(0编辑  收藏  举报
人家故里