首页 > 其他分享 >ibiquge 小说下载

ibiquge 小说下载

时间:2024-12-24 21:41:31浏览次数:2  
标签:章节 ibiquge self 爬虫 HTML requests 小说 下载

一、引言

在当今的网络文学世界中,ibiquge作为一个广为人知的平台,拥有着海量的小说资源,深受广大读者的喜爱。然而,对于一些读者来说,他们可能希望能够将自己喜欢的小说保存下来,以便在没有网络的情况下也能随时阅读。这时候,爬虫技术就可以派上用场了。通过编写爬虫程序,我们可以从ibiquge上抓取小说的文本内容,并将其保存为本地文件。本文将详细介绍如何使用 Python 编写一个简单的ibiquge爬虫程序,帮助读者实现这一需求。但需要注意的是,在进行爬虫操作时,要确保遵守法律法规和网站的使用规则,避免侵犯他人的权益。

二、ibiquge爬虫基础

(一)理解爬虫原理

爬虫的工作原理类似于我们使用浏览器访问网页的过程。当我们在浏览器中输入一个网址并按下回车键时,浏览器会向对应的服务器发送一个 HTTP 请求,服务器接收到请求后,会返回相应的 HTML 页面作为响应,浏览器再对这个 HTML 页面进行解析和渲染,将其展示给我们。爬虫也是如此,它通过代码模拟浏览器发送 HTTP 请求,获取服务器返回的 HTML 页面内容。 对于ibiquge这样的网站,我们可以通过分析其网页结构来确定需要抓取的数据所在的位置。一般来说,小说的标题、章节列表以及各章节的内容等信息都包含在 HTML 页面的特定标签中。例如,小说的章节列表可能位于<ul>或<ol>标签中,每个章节的链接和标题则可能通过<a>标签来呈现,而章节的具体内容则可能在<div>或<p>标签内。通过使用解析库,我们可以方便地从 HTML 中提取出这些数据,以便后续的处理和保存。

(二)爬虫工具与环境准备

在进行ibiquge爬虫开发时,Python 是一种非常常用且强大的编程语言。它拥有丰富的库和框架,可以大大简化爬虫的开发过程。 首先,我们需要安装 Python。可以从 Python 的官方网站(https://www.python.org/downloads/)下载适合你操作系统的 Python 版本,并按照安装向导进行安装。 接下来,我们需要安装一些必要的 Python 库。其中,requests库用于发送 HTTP 请求,获取网页的 HTML 内容;lxml库用于解析 HTML 页面,方便我们提取所需的数据。可以使用pip命令来安装这些库,在命令行中输入以下命令: pip install requests pip install lxml 以下是一个简单的示例代码,展示了如何使用requests库发送 HTTP 请求并获取网页内容,以及使用lxml库解析 HTML: import requests from lxml import etree   # 发送 HTTP 请求,获取网页内容 response = requests.get('https://www.ibiquge.la/') html = response.content.decode('utf-8')   # 使用 lxml 解析 HTML tree = etree.HTML(html) # 可以在这里使用 XPath 表达式来提取网页中的数据 在上述代码中,我们首先使用requests库发送了一个 GET 请求到ibiquge的首页,获取到了网页的 HTML 内容,并将其转换为字符串格式。然后,使用lxml库的etree.HTML函数将 HTML 字符串解析为一个ElementTree对象,这样我们就可以使用 XPath 表达式来方便地定位和提取网页中的各种元素和数据了。 通过以上的工具准备和示例代码,我们已经搭建好了进行ibiquge爬虫开发的基础环境,接下来就可以深入了解如何具体实现对ibiquge小说的抓取了。

三、实战:爬取ibiquge小说

(一)分析ibiquge网页结构

以ibiquge上的一本具体小说为例,比如《斗破苍穹》(https://www.ibiquge.la/0_1/)。我们打开该小说的页面,使用浏览器的开发者工具(一般在浏览器的菜单中可以找到 “开发者工具” 选项,如 Chrome 浏览器中右键点击页面元素选择 “检查” 即可打开)来查看网页的 HTML 结构。 通过开发者工具,我们可以发现小说的章节列表位于<div id="list">标签下的<dl>标签内,每个章节的链接在<dd>标签中的<a>标签的href属性中,章节标题则是<a>标签的文本内容。例如,对于第一章的链接和标题,其 HTML 代码可能如下: <div id="list"> <dl> <dd><a href="/0_1/1.html">第一章:陨落的天才</a></dd> <!-- 其他章节的代码 --> </dl> </div> 而小说的正文内容则在<div id="content">标签内,例如: <div id="content"> 萧炎,天才少年,四岁练气,十岁拥有九段斗之气,十一岁成功凝聚斗之气旋,一跃成为家族百年之内最年轻的斗者!然而在十二岁那年,他却“丧失”了修炼能力,只得以废物的身份在家族中过着得过且过的生活。 <!-- 后续的正文内容 --> </div> 以下是通过开发者工具查看网页结构的截图示例(此处假设截图为打开《斗破苍穹》小说页面后,开发者工具中显示章节列表和正文内容对应的 HTML 代码部分): [插入截图,展示上述提到的 HTML 代码在开发者工具中的位置和样式]

(二)编写爬虫代码

根据上述网页结构的分析,我们可以使用 Python 编写爬虫代码来实现小说的抓取。以下是一个简单的示例代码:
import requests
from lxml import etree
import os
import re
import ssl
class BiqugeBookFinder:
    mainUrl = ""
    allBookHtml = ""
    def sendRequestReturnEtreeHTML(self,url):
        headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko"}
        response = requests.get(url, headers=headers)
        str = response.content.decode('utf-8')
        # print(str)
        return etree.HTML(str)
    def getMenuFromHomePage(self):
        self.allBookHtml = self.sendRequestReturnEtreeHTML("https://www.ibiquge.la/xiaoshuodaquan/")
        self.mainUrl = "https://www.ibiquge.la/"
    def findBook(self,bookName):
        allBookUrl = self.allBookHtml.xpath('//div[@class="novellist"]/ul/li/a/@href')
        allBookTitle = self.allBookHtml.xpath('//div[@class="novellist"]/ul/li/a/text()')
        isFind = False
        i = 0
        for i in range(len(allBookTitle)):
            if allBookTitle[i] == bookName:#后期可以进行模糊匹配,但是这里先偷懒一波。
                isFind = True
                break
        if not isFind:
            print("未找到合适的小说")
            return
        bookHtml = self.sendRequestReturnEtreeHTML(allBookUrl[i])
        self.downloadBook(bookHtml)
    def downloadBook(self,bookHtml):
        bookTitle = bookHtml.xpath("/html/body/div[@id='wrapper']/div[@class='box_con'][1]/div[@id='maininfo']/div["
                                   "@id='info']/h1")[0].text
        bookTitle = re.sub(r"[\\/:*?<>|]","",bookTitle)
        if bookTitle == "":
            print("书籍名不合法,无法下载")
            return
        chapterUrl = bookHtml.xpath('//div[@id="list"]/dl/dd/a/@href')
        chapterTitle = bookHtml.xpath('//div[@id="list"]/dl/dd/a/text()')
        #获取全部章节

        # 判断该路径是否存在,存在则返回true,不存在则返回false
        folder = os.path.exists('./Downloads/%s' % str(bookTitle))
        # 判断judge是否为true,如果不是则创建该路径
        if not folder:
            os.makedirs('./Downloads/%s' % str(bookTitle))
        folder = './Downloads/%s' % str(bookTitle)

        for i in range(len(chapterUrl)):
            fileName = re.sub(r"[\\/:*?<>|]","",chapterTitle[i])
            if fileName == "":
                fileName = "第%s章" % (i+1)
            if os.path.exists("%s/%s.txt"%(folder,fileName)):
                print("第%s章已存在,跳过下载,如发现下载不完整请删除后重试" % (i+1))
                continue
            print("正在下载:%s" % fileName)

            chapterHtml = self.sendRequestReturnEtreeHTML(self.mainUrl + chapterUrl[i])
            content = chapterHtml.xpath('//div[@id="content"]/text()')
            allContent = ""
            for c in content:
                allContent+=c


            file = open("%s/%s.txt"%(folder,fileName), mode='w',encoding="utf-8")
            file.write(allContent)
            file.close()
    def start(self,bookName):
        self.getMenuFromHomePage()
        self.findBook(bookName)

if __name__ == "__main__":
    biqugeBookFinder = BiqugeBookFinder()
    bookName = input("请输入要下载的书名:")
    biqugeBookFinder.start(bookName)

 

在上述代码中:
  • sendRequestReturnEtreeHTML方法用于发送 HTTP 请求并获取网页的 HTML 内容,将其转换为etree.HTML对象,以便后续使用 XPath 进行解析。
  • getMenuFromHomePage方法获取ibiquge小说大全页面的 HTML,同时记录主 URL,用于后续章节链接的拼接。
  • findBook方法根据输入的小说名在小说大全页面中查找目标小说,找到后获取其 HTML 内容并调用downloadBook方法进行下载。
  • downloadBook方法负责下载小说的各个章节,包括创建保存文件夹、处理章节文件名、判断章节是否已下载、获取章节内容并保存为本地文件等操作。
通过运行这段代码,输入想要下载的ibiquge小说名称,就可以将该小说的所有章节内容下载到本地的Downloads文件夹中,每个章节保存为一个独立的 TXT 文件,方便读者在本地随时阅读。但需要再次强调的是,在进行爬虫操作时,请确保遵守相关法律法规和网站的使用规则,尊重作者和网站的权益,避免用于商业目的或大规模的非法数据抓取行为。

四、爬虫优化与问题解决

(一)提高爬虫效率

在实际的爬虫过程中,效率是一个重要的考量因素。如果爬虫的速度过慢,可能会花费大量的时间来获取数据,尤其是在面对大量小说资源时,这种情况会更加明显。为了提高爬虫的效率,我们可以采取以下几种方法:
  • 设置合理的请求头:在发送 HTTP 请求时,设置合适的请求头可以模拟浏览器的行为,降低被网站识别为爬虫的风险,从而避免被限制访问。例如,我们可以设置User-Agent、Referer等请求头信息,使其看起来更像是正常的浏览器请求。以下是一个设置请求头的示例代码:
headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko", "Referer": "https://www.ibiquge.la/" } response = requests.get(url, headers=headers)
  • 采用多线程或异步编程:利用多线程或异步编程技术,可以同时发送多个请求,加快数据的获取速度。Python 中的threading模块和asyncio库都可以实现这一功能。以下是一个使用threading模块实现多线程爬虫的简单示例:
import threading import requests from lxml import etree   def download_chapter(url): response = requests.get(url) # 解析章节内容并保存,这里省略具体的解析和保存代码   # 假设 chapter_urls 是一个包含所有章节链接的列表 threads = [] for url in chapter_urls: t = threading.Thread(target=download_chapter, args=(url,)) t.start() threads.append(t)   for t in threads: t.join() 通过以上的优化方法,可以显著提高爬虫的效率,节省数据获取的时间。但需要注意的是,在使用多线程或异步编程时,要合理控制并发数量,避免对目标网站造成过大的压力,以免引起网站的反制措施。

(二)应对反爬虫措施

随着网络安全意识的提高,许多网站都采取了各种反爬虫措施来保护自己的资源和数据安全。ibiquge也可能会采用一些反爬虫策略,例如限制 IP 访问频率、设置验证码验证等。为了应对这些反爬虫措施,我们可以采取以下方法:
  • 使用代理 IP:通过使用代理 IP,我们可以隐藏自己的真实 IP 地址,避免因频繁访问而被网站封禁。可以从一些免费或付费的代理 IP 提供商获取代理 IP 列表,并在爬虫中随机切换使用。以下是一个使用代理 IP 的示例代码:
import requests   proxies = { "http": "http://proxy_ip:proxy_port", "https": "https://proxy_ip:proxy_port" } response = requests.get(url, proxies=proxies) 需要注意的是,免费的代理 IP 可能存在不稳定、速度慢等问题,而且使用代理 IP 时也要遵守相关法律法规,确保使用的合法性。
  • 验证码识别:如果遇到验证码验证的情况,可以使用一些验证码识别库,如pytesseract(需要配合Tesseract OCR引擎使用)来自动识别验证码。但验证码识别的准确率可能会受到验证码的复杂程度、图片质量等因素的影响,而且有些网站的验证码可能专门针对识别技术进行了优化,增加了识别的难度。以下是一个使用pytesseract识别验证码的简单示例:
import pytesseract from PIL import Image   # 假设 captcha.jpg 是包含验证码的图片文件 image = Image.open('captcha.jpg') captcha_text = pytesseract.image_to_string(image) # 使用识别出的验证码进行后续的请求操作
  • 优化爬虫行为:尽量模拟真实用户的行为,例如在请求之间设置适当的时间间隔,避免短时间内大量请求;遵循网站的robots.txt规则,不爬取禁止访问的内容。这样可以降低被网站检测到是爬虫的风险,提高爬虫的稳定性和可持续性。

(三)常见错误处理

在爬虫开发过程中,可能会遇到各种各样的错误。以下是一些常见的错误及其处理方法:
  • 编码问题:当使用requests库获取网页内容时,可能会遇到编码不匹配的问题,导致中文乱码。可以通过设置response.encoding属性来解决,例如:
response = requests.get(url) response.encoding = 'utf-8' html = response.text
  • 网络连接超时:如果网络不稳定或者目标网站响应过慢,可能会导致网络连接超时错误。可以通过设置requests库的timeout参数来增加超时时间,例如:
response = requests.get(url, timeout=10)
  • 元素定位错误:在使用lxml或其他解析库进行元素定位时,如果 XPath 表达式不正确,可能会无法获取到预期的数据。这时需要仔细检查 XPath 表达式是否与网页的实际结构相匹配,可以通过在浏览器的开发者工具中手动验证 XPath 表达式的正确性来进行调试。
通过对这些常见错误的了解和掌握相应的处理方法,可以帮助我们更快地调试爬虫程序,确保其能够稳定、高效地运行,顺利获取到ibiquge上的小说数据。

六、总结与展望

通过本文的介绍,我们详细了解了ibiquge爬虫的实现过程,从基础的爬虫原理、工具和环境准备,到实战中的网页结构分析、代码编写,再到优化与问题解决的各个方面。在这个过程中,我们掌握了如何使用requests库发送 HTTP 请求获取网页内容,以及使用lxml库解析 HTML 并提取所需数据的方法,同时也学会了如何应对反爬虫措施和提高爬虫效率,以及处理常见的错误。 然而,爬虫技术的发展是一个不断演进的过程,随着网站技术的不断更新和反爬虫技术的日益加强,我们需要持续学习和探索新的方法和技术,以适应不断变化的网络环境。例如,深度学习技术在验证码识别和网页内容提取方面的应用逐渐增多,我们可以进一步研究如何将这些新技术应用到爬虫开发中,提高爬虫的智能化水平和适应性。 此外,爬虫技术的应用不仅仅局限于网络文学领域,在搜索引擎、数据分析、市场调研等多个领域都有着广泛的应用前景。希望读者能够以本文为基础,继续深入学习和实践,不断拓展爬虫技术的应用场景,为解决实际问题提供有力的支持,同时也要始终牢记遵守法律法规和道德规范,确保技术的合理、合法使用,共同推动网络技术的健康发展。 未来,随着互联网技术的进一步发展,我们期待看到爬虫技术能够更加高效、智能、合法地为人们获取和利用网络信息服务,在更多的领域发挥其独特的价值和作用,为人们的生活和工作带来更多的便利和创新。  

标签:章节,ibiquge,self,爬虫,HTML,requests,小说,下载
From: https://www.cnblogs.com/timmoc/p/18628757

相关文章

  • Github 如何下载仓库的部分文件
    https://stackoverflow.com/questions/7106012/download-a-single-folder-or-directory-from-a-github-repositoryUpdateApril2021:thereareafewtoolscreatedbythecommunitythatcandothisforyou:DownloadDirectory(Creditstofregante)Ithasalso......
  • helm从bitnami库下载chart包报错
    1.添加helmrepohelmrepoaddbitnamihttps://charts.bitnami.com/bitnami2.更新helm库helmrepoupdate3.查找包helmsearchrepokafka4.下载包helmpullbitnami/kafka--version31.1.1下载报错Error:failedtodorequest:Head"https://registry-1.do......
  • 2024年AI相关的论文写作经验(附实践资料下载)
    在撰写AI相关的论文时,以下是一些实用的经验和技巧:明确写作目标:在开始写作之前,明确你的论文类型(期刊论文、毕业论文等)和目标,这将影响你的写作方式和工具选择。AI辅助文献检索:利用AI驱动的文献检索工具,如GoogleScholar或SemanticScholar,快速找到相关领域的重要论文。自动......
  • 2025数字化人力资源战略规划(附资料下载)
    2025年数字化人力资源战略规划的关键点:人力资源管理能力模型:人力资源管理能力模型通常被细分为六个主要支柱,包括人力资源规划与策略、招聘与选拔、培训与发展、绩效管理等。数字化转型目标:企业需要明确数字化转型的目标,并将其与整体人力资源战略相结合。这包括提升招聘效率......
  • Maven导入依赖过程中下载极其慢导致下载失败的解决办法
    首先右键打开Maven像这样-——————》然后点击opensettings.xml如果之前没有这个文件那么这里会显示“createsettings.xml”直接点就好了新建之后直接到这个文件里面去在这个文件里面添加上镜像就行了,阿里云的镜像非常好用,在哪里都好用,尤其是在下载破python库的时候嘎嘎......
  • (2024最新毕设合集)基于SpringBoot的小说在线阅读网咖+86615|可做计算机毕业设计JAVA、P
    目 录摘要1绪论1.1 选题背景1.2研究内容1.3本文的组织结构2相关技术介绍2.1MySQL数据库2.2Java编程语言2.3SpringBoot框架介绍3 系统需求分析与设计3.1可行性分析3.1.1技术可行性分析3.1.2经济可行性分析3.1.3法律可行性分析3.2需......
  • XMind v24 免费版下载及安装教程
    前言XMind是一款专业的全球领先的商业思维导图软件,在国内使用广泛,拥有强大的功能、包括思维管理、商务演示、与办公软件协同工作等功能。它采用全球先进的EclipseRCP软件架构,是集思维导图与头脑风暴于一体的可视化思考工具,能用来捕捉想法、理清思路、管理复杂信息并促进团队协......
  • C#队列、多线程根据URL下载文件
    ///<summary>///下载辅助类///</summary>publicclassDownFileHelper{///<summary>///构造函数///</summary>staticDownFileHelper(){Start();}privatestaticobjectlockObject=newobject();......
  • 2024数据智能|大模型时代的数据管理策略和趋势(附实践资料下载)
    在大模型时代,数据管理面临着新的挑战和机遇。以下是一些关键的数据管理策略和趋势:数据治理:数据治理是确保数据安全、完整、可靠和合规性的关键。它包括数据管理、数据质量控制、数据流程管理等。企业需要建立数据治理框架,明确数据所有权、责任、质量标准及监控机制。数据......
  • 2024年AIGC与多模态最佳实践方案(附实践方案下载)
    在AIGC(人工智能生成内容)与多模态技术的最佳实践方案中,我们可以从以下几个方面进行探讨:1.多模态与AIGC的数据管理实践多模态技术能够处理和理解多种类型数据(如文本、图像、音频等),在数据模型管理中,多模态技术可以帮助构建更为复杂和丰富的数据模型,通过整合不同模态的数据来提......