XML案例——Jsoup网页爬虫 & XML配置参数

XML案例——Jsoup网页爬虫 & XML配置参数,第1张

XML案例——Jsoup网页爬虫 & XML配置参数 1 使用 Jsoup 完成网页爬虫 网络爬虫(web crawler):自动抓取互联网信息的程序。 Jsoup 可以通过 URL 获取网页的 HTML 源文件,源文件中包含着网站数据,我们可以解析 HTML 源文件的数据来获取我们需要的信息。 步骤: 1. 引入 jar 包。(jsoup的包) 2. 使用 Jsoup 获取网页 HTML 源文件,转为 document 对象 3. 通过 document 对象,获取需要的 Element 对象 4. 获取 Element 对象的数据。 5. 设置循环自动爬取

2 使用 XML 配置爬虫程序的参数 爬虫程序有一些参数需要配置,如果直接将参数写在 JAVA 程序中,则修改参数非常不方便,所以此时我们将参数写在 XML 配置文件中,通过解析 XML 文件获取参数的配置信 息。 感悟: 因为虚拟机会先将java文件编译为class文件,如果我们的朋友也想用,我们直接发给他们class文件即可,运行时无需编译,直接命令行即可运行,但是如果过了半年,可能程序就不适用了,因为 文章链接最后的数字(及程序for循环的临界值)可能就变了,但class文件又无法修改,打开是只有虚拟机才懂的一堆乱码,所以要直接将这个数字放到配置文件中 (这样方便修改),运行时会读取配置文件。 步骤: 1. 写爬虫程序的 XML 配置文件 2. 解析 XML 配置文件:加载 XML 文件到内存,转为 document 对象。 3. 获取 XML 配置文件的配置信息 4. 将配置信息应用于爬虫程序中

 

 crawler.xml



    9744898
    9745020
CrawlerDemo.java
package com.baizhan.xml.crawler;

import cn.wanghaomiao.xpath.exception.XpathSyntaxErrorException;
import cn.wanghaomiao.xpath.model.JXdocument;
import cn.wanghaomiao.xpath.model.JXNode;
import org.jsoup.Jsoup;
import org.jsoup.nodes.document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.util.List;

public class CrawlerDemo {
    public static void main(String[] args) {
        int min=0,max=0;
        try {
            //2. 解析 XML 配置文件:加载 XML 文件到内存,转为 document 对象。
            //获得xml文件绝对路径
            String path=CrawlerDemo.class.getClassLoader().getResource(
                    "com/baizhan/xml/crawler/crawler.xml").getPath().replace(
                    "%20"," ");
            //转为 document 对象
            document document=Jsoup.parse(new File(path),"utf-8");
            //3. 获取 XML 配置文件的配置信息
            //XPath方式获取
            JXdocument jxdocument=new JXdocument(document);
            List minNodes=jxdocument.selN("//min");
            List maxNodes=jxdocument.selN("//max");

            Element minElement=minNodes.get(0).getElement();
            Element maxElement=maxNodes.get(0).getElement();
            String maxStr=maxElement.text();
            String minStr=minElement.text();

            //4. 将配置信息应用于爬虫程序中
            min=Integer.parseInt(minStr);
            max=Integer.parseInt(maxStr);
            System.out.println(min+"======="+max);
        } catch (IOException e) {
            e.printStackTrace();
        } catch (XpathSyntaxErrorException e) {
            e.printStackTrace();
        }

        //5. 设置循环自动爬取
        for (int i=min;i<=max;i++){
            try {
                //2. 使用 Jsoup 获取网页 HTML 源文件,转为 document 对象
                document document= Jsoup.parse(new URL("http://daily.zhihu.com/story/"+i),1000);

                //3. 通过 document 对象,获取需要的 Element 对象
                //获取头图,标题,作者,正文
                //头图
                Elements headerImgEle=document.getElementsByAttributevalue("alt","头图");
                //标题
                Elements headerEle=document.select(".DailyHeader-title");
                //作者
                Elements authorEle=document.select(".author");
                //content是正文
                Elements contentEle=document.select(".content");

                //4. 获取 Element 对象的数据。
                //get是获取第几个元素,get(0)是获取第一个,因为头图就一个,再获取src属性的文本
                //头图链接
                String headerImg=headerImgEle.get(0).attr("src");
                String header=headerEle.text();
                String author=authorEle.text();
                String content=contentEle.text();

                System.out.println(headerImg);
                System.out.println(header);
                System.out.println(author);
                System.out.println(content);
                System.out.println("------------------------------------------------------------------");
            }catch (Exception ex){
                //有的页面不存在
                System.out.println("页"+i+"不存在");
            }
        }//for
    }
}

这样就好比形成了一个半自动的软件,和框架原理差不多,用户只需要配置参数即可。

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

原文地址: https://outofmemory.cn/zaji/5720302.html

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

发表评论

登录后才能评论

评论列表(0条)

保存