利用Python爬虫抓取小说并保存至本地

在网络上有许多优秀的小说资源,有时候我们可能希望将它们保存至本地以便离线阅读。本文将介绍如何使用 Python 爬虫,从指定小说网站上抓取小说内容,并保存为本地文本文件。

1. 简介

Python 爬虫是一种自动化工具,可以模拟浏览器行为,从网页上抓取数据。在本文中,我们将使用 Python 的 requests、parsel 和 tqdm 库来实现小说内容的抓取和保存。

2. 准备工作

首先,我们需要安装一些 Python 库:

  • requests:用于发送 HTTP 请求和接收响应。
  • parsel:用于解析 HTML 和 XML 文档。
  • tqdm:用于显示进度条,提升用户体验。

你可以使用 pip 工具来安装这些库:

pip install requests parsel tqdm

3. 实现步骤

3.1 发送请求并获取网页内容

我们首先定义一个函数 GetResponse,用于发送 HTTP 请求,并返回响应内容。

import requests

def GetResponse(url):
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36"
    }
    response = requests.get(url=url, headers=headers)
    return response

3.2 解析网页内容并提取小说章节信息

接下来,我们定义一个函数 GetInfo,用于获取小说的名称和章节链接。

import parsel

def GetInfo():
    novel_url = 'https://www.heenee.com/quanben/27/27066/'
    novel_html = GetResponse(url=novel_url).text
    selector = parsel.Selector(novel_html)
    name = selector.css('.bdsub h1::text').get().split(' ')[0]
    href = selector.css('.L a::attr(href)').getall()
    chapter_url_list = ['https://www.heenee.com/' + i for i in href]
    return name, chapter_url_list

3.3 获取章节内容并保存至本地

最后,我们定义一个函数 Save,用于保存小说章节的标题和内容至本地文件。

def Save(name, title, content):
    with open(name + '.txt', mode='a', encoding='utf-8') as f:
        f.write(str(title))
        f.write('\n\n')
        f.write(content)
        f.write('\n\n')

3.4 执行爬虫任务

if __name__ == '__main__': 下执行爬虫任务。

if __name__ == '__main__':
    name, chapter_url_list = GetInfo()
    print(f'正在采集{name},请等待。')
    for chapter_url in tqdm(chapter_url_list):
        title, content = GetContent(link=chapter_url)
        Save(name, title, content)

4. 运行代码

# 导入数据请求模块
import requests
# 导入数据解析模块
import parsel
# 导入进度条模块
from tqdm import tqdm


def GetResponse(url):
    # 模拟浏览器
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36"
    }
    # 发送请求
    response = requests.get(url=url, headers=headers)
    # 返回内容
    return response


def GetContent(link):
    """获取小说内容单章"""
    # 小说章节链接地址
    link = 'https://www.heenee.com/quanben/27/27066/16579246.html'
    # 调用发送请求
    response = GetResponse(url=link)
    # 获取数据内容
    html = response.text
    # 把获取到的html字符串数据 转成可解析对象
    selector = parsel.Selector(html)
    # 提取章节标题
    title = selector.css('#amain h1::text').get()  # 根据标签属性提取数据内容
    # 提取章节内容
    content_list = selector.css('#htmlContent p::text').getall()
    # 把列表合并成字符串
    content = '\n\n'.join(content_list)
    # 返回标题 和 内容
    return title, content


# 保存函数
def Save(name, title, content):
    with open(name + '.txt', mode='a', encoding='utf-8') as f:
        f.write(str(title))
        f.write('\n\n')
        f.write(content)
        f.write('\n\n')


def GetInfo():
    # 获取小说名字,章节链接
    novel_url = 'https://www.heenee.com/quanben/27/27066/'
    # 发送请求
    novel_html = GetResponse(url=novel_url).text
    # 把获取到的html字符串数据 转成可解析对象
    selector = parsel.Selector(novel_html)
    # 提取小说名字
    name = selector.css('.bdsub h1::text').get().split(' ')[0]
    # 提取小说章节链接
    href = selector.css('.L a::attr(href)').getall()
    chapter_url_list = ['https://www.heenee.com/' + i for i in href]
    print(name)
    print(href)
    print(chapter_url_list)
    return name, chapter_url_list


if __name__ == '__main__':
    # 获取小说名字,章节链接
    name, chapter_url_list = GetInfo()
    print(f'正在采集{name},请等待。')
    for chapter_url in tqdm(chapter_url_list):
        # 调用获取章节标题/内容函数
        title, content = GetContent(link=chapter_url)
        # 保存数据
        Save(name, title, content)

5. 总结

本文介绍了如何使用 Python 爬虫从指定网站上抓取小说内容,并保存至本地文件。通过学习本文,你可以掌握使用 Python 爬虫进行数据采集的基本方法,以及如何处理抓取到的数据内容。当然,在实际应用中,你还可以根据需求对代码进行进一步的优化和扩展,以满足更多的功能需求。

  • 10
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值