java爬虫爬取笔趣阁小说(一)

小说目录链接

这次要爬的网站是主站链接: com
小说目录链接: /69528/

另外注意,爬虫对小说网站的页面布局要求是定制化的,可能不同网站的布局不一样,爬虫也要做相应的调整。

小说目录网站图

如果你看的时候,这个网站还在……
在这里插入图片描述
f12点开,查看列表在哪里。
在这里插入图片描述
在这里插入图片描述

代码


import org.jsoup.Connection;
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.FileWriter;
import java.io.IOException;
import java.io.Writer;
import java.util.ArrayList;

/**
 * @author Myli
 * @create 2023-02-15 23:23
 */
public class te {

    //规定要爬取的网页
    static String url = "https://www.7722wx.com";
    static String url0 = "https://www.7722wx.com/html/69528/";

    public static void main(String[] args) throws IOException {
        //设置下载文件存放磁盘的位置
        File path = new File("C:\\Users\\Sterman\\Desktop\\高天之上");
        //判断文件夹是否存在,不存在就创建
        if (!path.exists()) {
            path.mkdirs();
        }

        Connection conn = Jsoup.connect(url0);
        //伪装成为浏览器,有的网站爬取数据会阻止访问,伪装成浏览器可以访问,这里我伪装成Google浏览器
        Document doc = conn.header("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.128 Safari/537.36").get();
        System.out.println("开始连接网站……");
        //寻找名叫panel-body的div,接着再在里面寻找叫list-group.list-charts的ul,再在里面寻找li,再在li里寻找a    //"div.panel-body ul.list-group.list-charts li a"
        Elements as = doc.select(".listmain").select("dd");
        if (as.isEmpty()) {
            System.out.println("未查到任何内容,请检查标签是否正确!");
        } else {
            ArrayList<Element> elements = new ArrayList<>();

            for(int a=0;a<=11;a++) {
                elements.add(a,as.get(0));
                as.remove(0);
            }
            for (Element a : as) {
                //对于每一个元素取出拿到href和小说名字
//                String href = a.attr("href");
                String href = a.getElementsByAttribute("href").attr("href");
                String title = a.text().replace(" ", "");
                //path:表示存放文件的位置
                //href:表示要读取内容的页面
                //title:表示存放文件名称
                if (path.exists() || !href.isEmpty() || !title.isEmpty()) {
                    save(path, href, title);
                } else {
                    System.out.println("!!!!!!!!!!!!!!");
                }
            }
        }
    }

    private static void save(File path, String href, String title) {
        Writer out = null;
        String url2 = "";
        Connection conn = null;
        Document doc = null;
        String content = "";
        String path1="";
        int n = 0;
        File f=null;
        //在file目录下创建每一个章命名的txt文件
         path1 = path + "\\" + title + ".txt";
         f = new File(path1);
        try {
            //构建输出流对象,因为小说的内容是字符类型的数据
            if (!path.exists()) {
                // 判断路径是否存在
                if (!path.exists()) {
                    // 如果不存在则创建目录
                    path.mkdir();
                    f.createNewFile();
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        try {
            out = new FileWriter(f);
            //构建读取页面的url2
            url2 = url + href;
            //正确的地址为https://www.7722wx.com/html/69528/752585192.html
            conn = Jsoup.connect(url2);
            //伪装成为浏览器
            doc = conn.header("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.128 Safari/537.36").get();
            //获取小说的正文
            content = doc.select("div[class=showtxt]div[id=content]").html();
            //处理特殊数据
            content = content.replace("请记住本书首发域名:www.7722wx.com。笔趣阁手机版阅读网址:m.7722wx.com", "");
            content = content.replace("正在手打中,请稍等片刻,内容更新后,请重新刷新页面,即可获取最新更新", "");
            content = content.replace("<script>app2();</script>", "");
            content = content.replace("<script>chaptererror();</script>", "");
            content = content.replace("<br>", "");
            content = content.replace("&nbsp;", "");
            content = content.replace("  ", "\r\n  ");
            out.write(title + "\r\n" + content);
            out.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        if (f.exists()) {
            System.out.println(title + "创建成功!");
        } else {
            System.out.println(title + "!!!!!!!!!");
        }
        //需要使用休眠,为了防止网站检测为蓄意攻击,停止我们的IP访问
        n = (int) (Math.random() * 1000 + 100);
        try {
            Thread.sleep(n);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

不足

1.代码是晚上写的,其中使用 String href = a.getElementsByAttribute(“href”).attr(“href”);前,是使用a.attr(“href”),但这样写怎么也获取不到元素。
2.如果你详细看这个网站的排序,就会发现,他把最新章节放在的了最前面,所以我先把最新章节单独读取出来,还是因为太晚了,可以在后边再次读取一下,再使用save方法。
``

Python爬虫用于从网站上抓取数据,包括文本、图片等信息。如果你想爬取这类小说网站的数据,首先需要了解其网页结构,通常这种类型的网站会有分页、章节列表等布局。以下是使用Python爬虫如`requests`库获取HTML内容的大致步骤: 1. **导入所需库**: ```python import requests from bs4 import BeautifulSoup ``` 2. **发送GET请求获取HTML**: ```python url = 'https://www.biquge.com.cn/' # 首页或其他章节页面URL response = requests.get(url) if response.status_code == 200: html_content = response.text else: print("请求失败") ``` 3. **解析HTML内容**: ```python soup = BeautifulSoup(html_content, 'html.parser') # 使用BeautifulSoup解析HTML,提取你需要的信息,如章节链接或标题 chapters = soup.find_all('a', class_='chapter') # 这里的类名假设是获取章节链接的部分 ``` 4. **遍历获取数据**: ```python for chapter in chapters: link = chapter['href'] # 获取每个章节的链接 title = chapter.text.strip() # 获取章节标题 # 对于每个链接,你可以进步发送请求并处理新的HTML内容 ``` 5. **保存或处理数据**: 将爬取到的数据存储到文件、数据库或进行后续分析。 **注意事项**: - 爬虫应遵守目标网站的robots.txt规则,并尊重版权。 - 频繁的高频率请求可能会导致IP被封禁,所以可以设置合适的延迟或使用代理IP。 - 有些网站有反爬机制,可能需要使用更复杂的解决方案,比如设置User-Agent、模拟登录等。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值