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

本文介绍了如何使用Jsoup库进行网页爬虫的实现,包括引入Jsoup库,获取HTML源文件,解析并提取所需信息。同时,通过XML配置文件管理爬虫参数,便于动态调整。示例代码展示了从XML文件读取爬虫范围,并遍历抓取指定网页数据,如头图、标题、作者和正文等关键信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

<?xml version="1.0" encoding="UTF-8" ?>
<Clawler>
    <min>9744898</min>
    <max>9745020</max>
</Clawler>
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<JXNode> minNodes=jxDocument.selN("//min");
            List<JXNode> 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
    }
}

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

深海鱼肝油ya

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值