# 导入所需的库
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('|', '') # 去除章节标题中的非法字符# 获取章节的链接,拼接成完整的URLlink = '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') # 解析章节内容的HTMLcontent_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