想要解放双手,让程序自动为你讲述精彩的故事吗? 本文将带你走进一个激动人心的Python网络爬虫项目,教你如何利用Python技术,从互联网上抓取短篇小说,并将其转化为悦耳的声音,打造你的专属故事讲述者。我们将一步步讲解代码实现,让你轻松掌握网络爬虫、文本处理和语音合成的关键技术,开启你的编程创造之旅。项目涉及Beautiful Soup用于网页解析,gTTS实现文本转语音,以及requests库用于网页请求,通过这些技术,可以抓取网站上的短篇故事,并将其转化为语音朗读出来。无论你是编程新手,还是有一定经验的开发者,都能从中受益。
关键要点
使用Python进行网络爬虫的基础知识。
如何使用Beautiful Soup解析HTML。
使用requests库发送HTTP请求。
利用gTTS库将文本转换为语音。
构建一个自动抓取和朗读网络短篇小说的完整项目。
项目概览与技术栈
项目目标与功能
该项目的核心目标是创建一个能够自动从特定网站(例如:americanliterature.com)抓取短篇小说,并将其转化为语音进行朗读的程序。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜

主要功能包括:
- 网络爬虫: 从目标网站抓取短篇小说的标题和链接。
- 文本提取: 从小说链接的页面提取正文内容。
- 语音合成: 将提取的小说文本转换为语音。
- 用户交互: 允许用户选择是否朗读当前故事,或者跳过选择新的故事。
- 可重复性: 用户可以选择是否继续听取其他故事,形成循环。
这个项目不仅能够让你在繁忙的生活中解放双眼,享受听故事的乐趣,还能让你深入了解Python在网络爬虫、文本处理和语音合成领域的应用。
技术栈详解
为了实现上述功能,我们将使用以下Python库:
立即学习“Python免费学习笔记(深入)”;
-
requests: 用于发送HTTP请求,获取网页内容。通过模拟浏览器行为,我们可以轻松地从网站获取HTML源码,为后续的解析工作奠定基础。requests 库能够模拟各种 HTTP 请求,例如 GET、POST 等,并处理 cookies、headers 等复杂情况,使爬虫程序更加健壮。

-
Beautiful Soup: 用于解析HTML和XML文档。它能够将复杂的HTML结构转化为易于操作的Python对象,方便我们提取所需的信息,如小说标题、链接和正文内容。通过CSS选择器或XPath,可以精准地定位到目标元素,极大地提高了爬虫效率。Beautiful Soup 提供了多种解析器,例如 html.parser、lxml 等,可以根据实际情况选择最合适的解析器。
-
gTTS (Google Text-to-Speech): 用于将文本转换为语音。只需简单的几行代码,就能将小说文本转化为自然流畅的语音,让程序为你朗读精彩的故事。gTTS 支持多种语言,并且可以调整语速、音调等参数,以满足不同用户的需求。此外,gTTS 还可以将语音保存为MP3文件,方便离线收听。
-
os: Python 的一个标准库,提供与操作系统交互的功能。在这个项目中,我们使用 os 模块来调用系统命令,播放生成的MP3文件。os 模块还提供了文件和目录操作、进程管理等功能,是 Python 开发中常用的工具。
-
random: 用于生成随机数。在项目中,我们使用 random 模块从抓取的故事列表中随机选择一个故事进行朗读,增加程序的趣味性和多样性。random 模块提供了多种随机数生成函数,例如 randint、choice 等,可以满足不同的随机需求。
这些库相互配合,共同构建起一个功能完善、易于使用的网络爬虫项目。在接下来的章节中,我们将详细讲解每个库的使用方法,并逐步实现项目的各个功能。
代码实现详解
导入必要的库
首先,我们需要导入项目所需的Python库。

确保你已经安装了这些库。如果没有安装,可以使用pip进行安装:
pip install requests beautifulsoup4 gTTS
导入代码如下:
import os import requests from bs4 import BeautifulSoup import random from gtts import gTTS
这段代码导入了我们需要的requests(网络请求), BeautifulSoup(网页解析), random(随机选择), gTTS(文本转语音)和 os (系统操作)模块,这是程序正确运行的基础。
设置基础URL和请求头
接下来,我们需要设置目标网站的基础URL和请求头。

基础URL指定了我们要爬取的网站地址,请求头则用于模拟浏览器行为,防止网站的反爬虫机制。
URL = "https://americanliterature.com/short-short-stories"
headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36'
}
这里,我们设置了基础URL为https://americanliterature.com/short-short-stories,并将User-Agent设置为常见的浏览器标识。你也可以根据需要修改User-Agent,使其更具迷惑性。
编写getStory函数
getStory函数是项目的核心函数,负责抓取和处理故事。

它包含了以下步骤:
-
获取页面内容: 使用requests库发送GET请求,获取网页内容。
page = requests.get(URL, headers=headers)
-
创建Beautiful Soup对象: 使用Beautiful Soup解析HTML内容。
soup = BeautifulSoup(page.content, 'html.parser')
-
提取故事标题: 从HTML中提取所有故事的标题,并将它们存储在一个列表中。我们使用
soup.find_all('a', class_='sslink', href=True)来定位到包含标题的标签,然后提取它们的文本内容。titles = [] titlesGot = soup.find_all('a', class_='sslink', href=True) for title in titlesGot: titles.append(title.text) -
随机选择一个故事: 从故事标题列表中随机选择一个故事。
story = random.choice(titles)
-
用户确认: 询问用户是否要朗读选择的故事。如果用户选择“y”,则继续执行;如果选择“n”,则重新选择一个故事。
storyOK = input(f"The story that you will be read is {story}. Is that Okay? y/n: ") if storyOK == 'y': # ... (后续步骤) elif storyOK == 'n': titles.clear() getStory() -
获取故事链接: 根据选择的故事标题,从HTML中找到对应的链接。
for a in titlesGot: if a.text == story: storyL = a['href'] listenStory(storyL) -
调用listenStory函数: 将故事链接传递给
listenStory函数,进行后续的处理。递归调用: 如果用户输入“n”,程序会清空
titles列表,然后递归调用getStory()函数,重新开始故事选择过程。这确保了用户可以不断地尝试,直到找到自己喜欢的故事。
getStory函数是整个项目的核心,它将网络爬虫、文本处理和用户交互等功能有机地结合在一起。通过这个函数,我们可以实现自动抓取和选择故事的功能,为后续的语音合成做好准备。
编写listenStory函数
listenStory函数负责从故事链接的页面提取正文内容,并将其转化为语音。

它包含了以下步骤:
-
构建完整的故事URL: 将基础URL和故事链接拼接在一起,得到完整的URL。
storyL = "https://americanliterature.com" + storyLink
-
获取故事页面内容: 使用requests库发送GET请求,获取故事页面的内容。
page = requests.get(storyL, headers=headers)
-
创建Beautiful Soup对象: 使用Beautiful Soup解析HTML内容。
soup = BeautifulSoup(page.content, 'html.parser')
-
提取故事文本: 从HTML中提取故事的文本内容。我们使用
soup.find_all('p')来定位到包含文本的标签,然后提取它们的文本内容。paragraphs = soup.find_all('p') story = "" for para in paragraphs: story += str(para.text) -
创建gTTS对象: 使用gTTS将故事文本转换为语音。
speech = gTTS(text=story, lang='en', slow=False)
-
保存语音: 将生成的语音保存为MP3文件。
speech.save("story.mp3") -
播放语音: 使用os模块调用系统命令,播放MP3文件。
os.system("mpg321 story.mp3")
listenStory函数是项目的另一个关键函数,它实现了从网页提取文本内容,并将其转化为语音进行播放的功能。通过这个函数,我们可以将抓取的故事转化为悦耳的声音,让程序真正地“讲述”故事。
如何使用项目
环境准备
-
安装Python: 确保你的计算机上安装了Python 3.6或更高版本。
-
安装必要的库: 使用pip安装requests、beautifulsoup4和gTTS库。
pip install requests beautifulsoup4 gTTS mpg321
注意: 如果你的系统没有安装mpg321,需要先安装它才能播放mp3文件。
-
安装mpg321:使用以下命令安装mpg321
sudo apt-get install mpg321










