Python爬取小说实例

前言

这里以笔趣阁中的一部小说(https://www.biduo.cc/biquge/40_40847/)为例,将每一章的内容爬取下来保存到本地。
特别声明:该分享仅供参考与学习使用,请勿用于其他商业等非法用途,如有侵权请联系我删除该博文!

如下是我们要爬取的小说目录
在这里插入图片描述

先看源码

import requests
from lxml import etree

url = "https://www.biduo.cc/biquge/40_40847/"
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36'
}

# 面向对象 --》设计模式
class Spider(object):
    def detail_request(self):
        # 1. 请求目录拿到HTML数据,抽取章名、章链接
        response = requests.get(url,headers=headers)
        # print(response.content.decode('gbk'))
        html = etree.HTML(response.content.decode('gbk'))  # 整理文档对象
        # print(html)
        tit_list = html.xpath('//*[@id="list"]/dl/dd/a/text()')
        url_list = html.xpath('//*[@id="list"]/dl/dd/a/@href')
        print(tit_list,url_list)
        for tit, src in zip(tit_list, url_list):
            self.content_request(tit, src)

    def content_request(self, tit, src):
        # 2. 请求文章拿到HTML数据,抽取文章内容并保存
        response = requests.get(url + src,headers=headers)
        html = etree.HTML(response.content.decode('gbk'))  # 整理文档对象
        content = "\n".join(html.xpath('//*[@id="content"]/text()'))
        file_name = tit + ".txt"
        print("正在保存文件:{}".format(file_name))
        with open(file_name, "a", encoding="utf-8") as f:
            f.write(content)

spider = Spider()
spider.detail_request()

爬取下来的数据

在这里插入图片描述

分析思路

首先利用requests库的强大能力,向目标url(https://www.biduo.cc/biquge/40_40847/)发起请求,拿到页面中的所有HTML数据。需要注意的是:请求太多次很容易被反爬,最好在请求时带上请求头(模拟浏览器发请求),每个人的浏览器的请求头都不同,不能直接使用我代码中的请求头,怎么获取自己的请求头可按如下图方式拿到:
在这里插入图片描述
拿到所有HTML数据后,利用正则库结合xpath语法(可以自己去学一下XPath 教程)从中抽取章名和每一章的链接,如下图 //*[@id=“list”]/dl/dd/a/text()//*[@id=“list”]/dl/dd/a/@href 即可拿到我们需要的章节名称和对应的链接地址
在这里插入图片描述
在这里插入图片描述
现在已经拿到我们需要的章节名称和对应每一章的链接地址了,这里得到的每一章的链接地址还不是一个完整的url地址,分析地址栏可知目标url(https://www.biduo.cc/biquge/40_40847/)与每一章的链接地址拼接,即可得到我们最终所需的URL

# 2. 请求文章拿到HTML数据,抽取文章内容并保存
response = requests.get(url + src,headers=headers)

得到最终URL后,层层递进,相同的方法:向最终的URL地址发起请求得到小说内容页的所有HTML数据,再从中抽取我们需要的小说文字内容,并保存到本地以我们抽取到的章名来命名文件

# 2. 请求文章拿到HTML数据,抽取文章内容并保存
response = requests.get(url + src,headers=headers)
html = etree.HTML(response.content.decode('gbk'))  # 整理文档对象
content = "\n".join(html.xpath('//*[@id="content"]/text()'))
file_name = tit + ".txt"
print("正在保存文件:{}".format(file_name))
with open(file_name, "a", encoding="utf-8") as f:
    f.write(content)

在这里插入图片描述

数据获取中

在这里插入图片描述
到这里就结束了,代码还可再改进一下,相同的方法增加一级请求爬取整个网站的所有小说,保存到本地的数据也可以在保存时增加一些格式控制,让数据看起来清晰整洁一些,当然,这些都是要自己花时间学的。

关于博主

我不是很喜欢看文字类的小说,相比起来更倾向于有声小说,听过的第一部完整有声小说就是周建龙演播的 《盗墓笔记》 很有代入感,当然本来是用来晚上催眠用的,不知怎的就误入坑中了。
所以,结合自己的兴趣,下期博客分享利用百度AI怎么把爬取到的小说文字数据转化为音频数据

发布了22 篇原创文章 · 获赞 28 · 访问量 5257

猜你喜欢

转载自blog.csdn.net/weixin_42365530/article/details/103854192