返回
畅享小说阅读,便捷爬虫助你一臂之力!
后端
2024-01-18 08:36:09
踏上小说阅读的快车道:打造你的Python小说爬虫GUI
深入小说的海洋,尽享阅读之乐
徜徉于文学的浩瀚汪洋,尽情沉醉于小说世界的奇妙。然而,寻找心仪的小说并逐字逐句阅读的过程却往往耗时费力。现在,借助强大的Python 3,这一难题迎刃而解。本教程将手把手带你打造一个功能全面的小说爬虫GUI,让小说阅读之旅变得前所未有的便捷。
第一步:做好准备工作
- 安装Python 3及其相关库: BeautifulSoup4、requests、PyQt5、qtawesome
- 熟悉HTML和CSS基础知识: 了解网页结构和样式
- 准备好心仪小说的URL: 例如,来自笔趣阁等网站
第二步:打造用户界面(GUI)
1. 导入必要库:
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtCore import Qt
from qtawesome import icon
2. 设计主窗口布局:
class MainWindow(QtWidgets.QMainWindow):
def __init__(self):
super().__init__()
# 窗口设置
self.setWindowTitle("小说爬虫")
self.setFixedSize(600, 400)
# 中央部件布局
self.centralWidget = QtWidgets.QWidget()
self.setCentralWidget(self.centralWidget)
self.centralWidgetLayout = QtWidgets.QGridLayout()
self.centralWidget.setLayout(self.centralWidgetLayout)
3. 添加控件:
# 添加标签和输入框(小说 URL)
self.urlLabel = QtWidgets.QLabel("小说 URL:")
self.urlLineEdit = QtWidgets.QLineEdit()
self.centralWidgetLayout.addWidget(self.urlLabel, 0, 0)
self.centralWidgetLayout.addWidget(self.urlLineEdit, 0, 1)
# 添加多选框(是否使用代理)
self.proxyCheckBox = QtWidgets.QCheckBox("使用代理")
self.centralWidgetLayout.addWidget(self.proxyCheckBox, 1, 0)
# 添加按钮(开始爬取)
self.startButton = QtWidgets.QPushButton("开始爬取")
self.startButton.clicked.connect(self.start_crawling)
self.centralWidgetLayout.addWidget(self.startButton, 2, 0, 1, 2)
# 添加进度条
self.progressBar = QtWidgets.QProgressBar()
self.progressBar.setValue(0)
self.centralWidgetLayout.addWidget(self.progressBar, 3, 0, 1, 2)
第三步:爬虫逻辑
1. 定义爬虫类:
class Crawler:
def __init__(self, url, use_proxy=False):
self.url = url
self.use_proxy = use_proxy
self.headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36"
}
2. 爬取小说内容:
def crawl(self):
# 使用代理
if self.use_proxy:
proxy = {'http': 'http://127.0.0.1:1080'}
response = requests.get(self.url, headers=self.headers, proxies=proxy)
# 不使用代理
else:
response = requests.get(self.url, headers=self.headers)
soup = BeautifulSoup(response.text, 'html.parser')
# 获取章节列表
chapter_list = []
for chapter in soup.find('div', class_='box_con').find_all('dd'):
chapter_url = chapter.find('a')['href']
chapter_name = chapter.find('a').text
chapter_list.append((chapter_url, chapter_name))
# 获取小说内容
novel_content = []
for chapter_url, chapter_name in chapter_list:
chapter_response = requests.get(chapter_url, headers=self.headers)
chapter_soup = BeautifulSoup(chapter_response.text, 'html.parser')
novel_content.append((chapter_name, chapter_soup.find('div', class_='content').text.replace('\xa0', '')))
return novel_content
3. GUI中调用爬虫:
def start_crawling(self):
url = self.urlLineEdit.text()
use_proxy = self.proxyCheckBox.isChecked()
# 创建爬虫对象
crawler = Crawler(url, use_proxy)
# 获取小说内容
novel_content = crawler.crawl()
# 保存小说
with open("小说.txt", "w", encoding="utf-8") as f:
for chapter_name, chapter_content in novel_content:
f.write(chapter_name + '\n\n')
f.write(chapter_content + '\n\n')
# 更新进度条
self.progressBar.setValue(100)
第四步:运行程序
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
踏上小说阅读的快车道
现在,你已经打造了自己的小说爬虫GUI,小说阅读之旅将变得轻而易举。输入小说URL,选择是否使用代理,点击“开始爬取”,就能尽情享受小说阅读的乐趣。探索更多精彩小说,让你的阅读时光更加丰富多彩!
常见问题解答
- 如何使用代理?
在代理复选框中打勾,并输入代理服务器的地址和端口号。 - 爬虫是否支持所有小说网站?
该爬虫针对笔趣阁等主流小说网站进行了优化,但可能不适用于所有网站。 - 小说内容如何保存?
小说内容将保存到名为“小说.txt”的文本文件中。 - 爬虫的速度如何?
爬虫速度取决于小说长度、网络连接速度和计算机性能。 - 爬虫是否可以自动更新小说?
该爬虫不具备自动更新功能,需要手动重新爬取更新后的章节。