作为一个小说迷,斗破苍穹是我第一部看的小说,而且我阅读的数量十几遍,所有的故事情节倒背如流。有一天突发奇想利用Python爬取这部小说,于是便利用一中午的时间写下了代码哈!我将这个过程总结成了一份博客分享给大家,让大家也可以尝试使用Python爬虫技术获取自己想要的数据。
1.小说及其作者
斗破苍穹是天蚕土豆所著的玄幻小说,讲述了少年林动在斗气大陆上的经历。作者天蚕土豆是中国热门网络小说作家之一,曾获得多个文学奖项。
我选择爬取这部小说是因为它对我影响深刻,同时也是很多小说迷喜欢的作品之一。通过爬取小说,我可以更方便地阅读和回忆,同时也可以帮助其他小说迷方便地获取小说内容。
2.前期准备工作
在开始爬取小说前,我需要对小说网站进行分析和了解,包括该网站的页面结构、小说链接、小说内容等。此外,我需要安装好Python环境并安装必要的库,包括requests、BeautifulSoup和re等。
3.爬取小说的具体方法和实现过程
我先确定了小说网站-
斗破小说网
,使用requests库发送HTTP请求获取小说网页源代码。然后,使用BeautifulSoup库解析源代码,获取小说的章节列表和每一章节的链接。使用正则表达式提取小说内容,并保存到本地文本文件中。
具体实现过程如下:
python复制代码
import requests
from bs4 import BeautifulSoup
import re
import time
import os
# 加入请求头
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36'
}
# 检查指定目录是否存在,不存在则创建文件夹
folder_path = r'D:\斗破苍穹'
if not os.path.exists(folder_path):
os.mkdir(folder_path)
def get_info(url):
res = requests.get(url, headers=headers)
res.encoding = "utf-8"
# 解析网页数据
soup = BeautifulSoup(res.text, 'html.parser')
# 获取到标题
title = soup.select("body > div.main > div.entry-tit > h1")[0].get_text().strip()
print(title)
# 利用正则表达式匹配到内容
contents = re.findall('<p>(.*?)</p>', res.content.decode('utf-8'), re.S)
# 删除每章节从括号开始后的内容
if contents:
contents = [re.sub(r'\(|\)|(|).*', '', content) for content in contents]
# 删除第一句话和最后一句话
if contents and len(contents) > 2:
contents = contents[1:-2]
# 在开头增加文章标题
contents.insert(0, title)
# 将章节内容写入到指定文件夹中,按照章节序号排序,并按文章标题命名文件
file_name = "{:0>4d}_{}.txt".format(int(url.split("/")[-1].split(".")[0]), title)
file_path = os.path.join(folder_path, file_name)
with open(file_path, "w", encoding='utf-8') as f:
for content in contents:
f.write(content + "\n")
# 程序主入口
if __name__ == '__main__':
urls = ['http://www.doupoxs.com/doupocangqiong/{}.html'.format(i) for i in range(1, 500)]
for url in urls:
get_info(url)
print("本章url:" + url)
# 设置每次循环一次的休眠时间
time.sleep(1)
4.遇到的问题和解决方法
在爬取小说的过程中,我遇到了几个问题,包括网站反爬措施、HTML标签和特殊字符的处理等。针对这些问题,我采取了以下的解决方法:
- 防反爬措施:添加headers模拟浏览器发送请求,使用IP代理等;
- HTML标签和特殊字符:使用正则表达式处理字符串;
- 其他问题:使用try...except语句捕获异常,保证程序正常运行。
5.结果截图以及结论
通过本文介绍的方法,我成功爬取了斗破苍穹的全部章节内容,并将其保存到本地文件中。我们可以按照自己的需要对数据进行分析和处理,例如进行情节分析、可视化呈现或者使用机器学习算法进行情节推荐。
在未来的工作中,我计划加入一些新的功能,例如用户可以输入起始和终止章节,只爬取某些章节等,同时也可以使用更加先进的爬虫技术,提高爬取效率和质量。
6.总结
本文介绍了使用Python爬取斗破苍穹小说的具体方法和实现过程,同样适用于其他小说的爬取。在实现过程中,我们需要分析网站结构、了解常用的爬虫库和正则表达式应用等知识点,通过不断的尝试和改进,逐步提高编程能力和解决问题的能力。