python爬虫笔趣阁小说(仅用于技术学习)

# 导入所需的库
import requests  # 用于发送HTTP请求,获取网页内容
from bs4 import BeautifulSoup  # 用于解析HTML和XML文档
import re  # 用于正则表达式处理
from lxml import etree  # 用于HTML和XML解析
import os  # 用于处理文件和目录

# 设置要抓取的书籍章节的主页URL
url = 'https://www.xzmncy.com/list/49353/'  # 书籍章节列表页面的URL
head = {  # 设置请求头,模拟浏览器访问
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36'
}

# 创建目录用来存储抓取的文件(如果该目录不存在的话)
os.makedirs('book', exist_ok=True)  # 如果'book'目录不存在,则创建它

# 获取网页响应并解析其中所有章节的链接和标题
res = requests.get(url, headers=head)  # 发送GET请求获取页面内容
soup = BeautifulSoup(res.text, 'lxml')  # 使用BeautifulSoup解析HTML页面
dds = soup.find('div', id='list').find_all('dd')  # 找到所有章节的 <dd> 标签,其中包含每个章节的链接和标题

# 打开文件准备写入,文件路径是 'book/article.txt'
# 使用 'w' 模式,表示每次运行时会覆盖文件内容
with open('book/article.txt', 'w', encoding='utf-8') as merged_file:
    for dd in dds:  # 遍历每个章节的 <dd> 标签
        # 获取章节标题,处理掉非法字符
        title = dd.find('a').text  # 获取章节标题
        title = title.replace('?', '').replace('*', '').replace('<', '').replace('>', '').replace(':', '').replace('"','').replace('/', '').replace('\\', '').replace('|', '')  # 去除章节标题中的非法字符

        # 获取章节的链接,拼接成完整的URL
        link = 'https://www.xzmncy.com' + dd.find('a').get('href')  # 获取章节的URL

        # 获取章节的具体内容
        try:
            res1 = requests.get(link, headers=head, timeout=10)  # 发送请求获取章节页面内容
            res1.raise_for_status()  # 检查请求是否成功(返回200状态码)
            
            # 使用BeautifulSoup解析章节页面内容
            soup1 = BeautifulSoup(res1.text, 'lxml')  # 解析章节内容的HTML
            content_div = soup1.find('div', id='htmlContent')  # 找到包含章节内容的 <div> 标签

            if content_div:  # 如果找到了章节内容
                # 提取所有 <p> 标签中的文本并合并为一段内容
                content = '\n'.join([p.get_text().strip() for p in content_div.find_all('p')])  # 获取所有段落文本,并合并为一个长字符串

                # 写入章节标题和内容到文件
                merged_file.write(f"\n\n========== {title} ==========\n\n")  # 写入章节标题,并加上分隔线
                merged_file.write(content)  # 写入章节内容
                print(f'已合并章节:{title}')  # 输出提示,表示该章节已成功合并
            else:
                print(f'内容结构异常,跳过章节:{title}')  # 如果没有找到有效的内容,输出提示信息

        except Exception as e:  # 如果获取章节内容时发生错误
            print(f'获取章节失败 [{title}],错误:{str(e)}')  # 输出错误信息,并跳过当前章节
            continue  # 继续抓取下一个章节

# 输出提示信息,表示所有章节已合并完成
print("所有章节已合并到 book_完整版.txt")  # 最后输出合并完成的提示

总结:

  • 该程序的主要功能是从指定网站抓取章节标题和内容,并将它们合并成一个文本文件。
  • 它使用了requests库获取页面内容,BeautifulSoup进行HTML解析,os.makedirs创建目录,open方法写入文件。
  • 针对章节标题,代码进行了字符清理,确保文件中没有非法字符。
  • 每个章节的内容都会被提取并追加到一个名为book/article.txt的文件中。

注意:

  • 需要自己建book文件夹,并且python文件与book文件夹在同一级,合并的章节会自动提取并追加到book/article.txt文件中。 

换链接小说时需要修改的地方:

  • # 书籍章节列表页面的URL(笔趣阁该小说的主页)

        url = 'https://www.xzmncy.com/list/49353/'  

  • # 获取章节的链接,拼接成完整的URL

        link = 'https://www.xzmncy.com' + dd.find('a').get('href')  # 获取章节的URL

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值