使用JSoup实现爬虫 *** 作(爬取网页图片、文章内容)

使用JSoup实现爬虫 *** 作(爬取网页图片、文章内容),第1张

一、基础配置:
-

org.jsoup

jsoup

1.12.1

二、代码程序:
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;

    }
}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/725550.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-26
下一篇 2022-04-26

发表评论

登录后才能评论

评论列表(0条)

保存