在这个博客文章中,我们将介绍如何使用 Python 爬取小说章节并将其保存为文本文件。我们将使用 requests
和 parsel
库来实现这一功能,下面是详细的步骤和代码示例。
1.准备工作
首先,我们需要安装了 requests
和 parsel
这两个 Python 库,通过pip指令进行安装
pip install requests parsel
2. 爬取小说章节
我们的目标是从指定的小说页面抓取章节标题和内容。下面是一个简单的 Python 脚本,演示了如何实现这一目标。
首先我们定义了一个fetch_novel_chapter
函数,
这个函数的作用是从指定的 URL 获取小说章节的标题和内容:
- 请求和响应:使用
requests.get
发送 HTTP GET 请求,并设置用户代理头部User-Agent
以避免被网站拒绝。 - 解析 HTML:利用
parsel.Selector
解析响应的 HTML 文本。 - 提取数据:使用 CSS 选择器
.bookname h1::text
获取标题,使用#content::text
获取内容。
def fetch_novel_chapter(url):
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36'
}
# 发送请求
response = requests.get(url=url, headers=headers)
response.encoding = response.apparent_encoding
# 转换成 selector 解析对象
selector = parsel.Selector(response.text)
# 获取小说标题
title = selector.css('.bookname h1::text').get()
# 获取小说内容 返回的是 list
content_list = selector.css('#content::text').getall()
# 将列表转换成字符串
content_str = ''.join(content_list)
return title, content_str
然后我们定义了一个save_to_file
函数,
该函数负责将抓取到的标题和内容保存到一个文本文件中:
- 文件名处理:替换标题中的非法字符(如
/
和\
),确保文件名有效。 - 写入文件:将内容写入文件,使用 UTF-8 编码来支持中文字符。
最后我们在主程序去运行上面的函数,并保存到指定的txt文档当中:
if __name__ == '__main__':
# 第一章小说url地址
url = 'http://www.biquges.com/52_52642/25585323.html'
title, content = fetch_novel_chapter(url)
# 打印标题和内容(可选)
print(title)
print(content[:1000]) # 打印前1000个字符以避免输出过多内容
# 保存到文件
save_to_file(title, content)
3.爬取txt文档如下:
因为txt文档在保存时没有处理数据,所以出现了一些空格