返回

畅享小说阅读,便捷爬虫助你一臂之力!

后端

踏上小说阅读的快车道:打造你的Python小说爬虫GUI

深入小说的海洋,尽享阅读之乐

徜徉于文学的浩瀚汪洋,尽情沉醉于小说世界的奇妙。然而,寻找心仪的小说并逐字逐句阅读的过程却往往耗时费力。现在,借助强大的Python 3,这一难题迎刃而解。本教程将手把手带你打造一个功能全面的小说爬虫GUI,让小说阅读之旅变得前所未有的便捷。

第一步:做好准备工作

  1. 安装Python 3及其相关库: BeautifulSoup4、requests、PyQt5、qtawesome
  2. 熟悉HTML和CSS基础知识: 了解网页结构和样式
  3. 准备好心仪小说的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,选择是否使用代理,点击“开始爬取”,就能尽情享受小说阅读的乐趣。探索更多精彩小说,让你的阅读时光更加丰富多彩!

常见问题解答

  1. 如何使用代理?
    在代理复选框中打勾,并输入代理服务器的地址和端口号。
  2. 爬虫是否支持所有小说网站?
    该爬虫针对笔趣阁等主流小说网站进行了优化,但可能不适用于所有网站。
  3. 小说内容如何保存?
    小说内容将保存到名为“小说.txt”的文本文件中。
  4. 爬虫的速度如何?
    爬虫速度取决于小说长度、网络连接速度和计算机性能。
  5. 爬虫是否可以自动更新小说?
    该爬虫不具备自动更新功能,需要手动重新爬取更新后的章节。