使用java 来爬取网页内容

本文介绍如何使用Java爬虫抓取笔*阁网站上的小说《进化的四十六亿重奏》的名称、简介和章节内容。通过分析网页源代码,提取所需信息,并保存章节内容为独立的HTML文件,实现按方向键换章的功能。强调了对网页内容的解析和处理,以及异常处理机制。

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

前言

在日常中,我们经常需要浏览网页,阅读一些内容。

但网页中并不是所有内容都是我们所需要的。
毕竟,谁都不想看的好好时突然出现一个“澳门棋牌”。

那么这时我们就可以爬取它的内容。


明确爬取对象

这里就以大家熟知的 笔*阁为例。

打开笔*阁的首页。
不对,打开一本小说。

这里以《进化的四十六亿重奏》为例(我是挺推荐这本书的,还有,如果可以的话尽量支持正版。)

请添加图片描述
打开主页,查看源代码,我们可以从其中换取我们需要的一起。

那我们需要什么呢?
那我们就需要明确我们爬取的对象。

1 小说的名称。
2 章节名称。
3 章节内容。

ok,明确了对象后,那我们就需要针对这些对象进行爬取。

实现需求

小说名称

首先是小说的名称。
通过观察源代码,我们可以看到:
请添加图片描述

小说的名称和简介是储存在:
请添加图片描述
11,12行的标签中的。

章节内容

小说的目录 和 章节内容是储存在:请添加图片描述

标签中的。

我们可以将网页的内容全部存入一个字符串数组中。
然后进行比较,确定位置。
然后将我们需要的内容提取出来。
在放入新的文件中。
话不多说,上实例:

源代码

    public static void main(String[] args){
   
        //确定主页链接
        String link = "https://www.biquwx.la/0_376/";
        //确定文件存放位置
        String path = "/Users/apple/Downloads/test/";




        //默认运行一次,当连接不上链接时(也就是出现SSLException异常时),runTime会+1,也就是仔运行一次
        int runTimes = 1;
        for (int runtime=0;runtime<runTimes;runtime++){
   
            try{
   

                //新建URL对象
                URL url = new URL(link);
                //打开连接
                URLConnection urlConnection = url.openConnection();
                //建立Http的连接
                HttpsURLConnection connection = (HttpsURLConnection) urlConnection;
                //新建流
                InputStreamReader isr = new InputStreamReader(connection.getInputStream(), StandardCharsets.UTF_8);
                BufferedReader br = new BufferedReader(isr);
                //现在网页中的内容已经读进了BufferedReader中。
                System.out.println("连接成功!");

                //新建一个容器,容器的长度会随内容的增加而增加,不用担心数组越界的问题
                ArrayList al = new ArrayList();
                //while循环,一直执行直到,line == null时停止,也就是网页内容读完后停止。
                while (true){
   
                    //新建字符串,用于储存一行的内容
                    String line = br.readLine();
                    //如果line == null ,则跳出循环
                    if (line == null){
   
                        break;
                    }
                    //如果line != null,那么把字符串添加进容器中。
                    else {
   
                        al.add(line);
                    }
                }

                //关闭流
                br.close();
                isr.close();

                //while循环完毕后,网页中的内容也都被放进了容器中
                //现在将容器中的内容放入一个字符串数组中
                //字符串的长度就为容器的大小
                String[] str = new String[al.size()];
                for (int i=0;i<str.length;i++){
   
                    str[i] = String.valueOf(al.get(i));
                }

                //如果出现乱码,则重新运行
                //其实,没多大用,我也不知道为什么会出现乱码。
                //但一般等会在运行就好了
                //如果有办法的,可以在评论中告诉我,谢谢。
      
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值