首页 > 编程语言 >手把手教你使用Python网络爬虫下载一本小说(附源码)

手把手教你使用Python网络爬虫下载一本小说(附源码)

时间:2024-08-06 13:18:00浏览次数:17  
标签:章节 bookid Python 手把手 page book 源码 booklist response

大家好,我是Python进阶者。

前言

前几天【磐奚鸟】大佬在群里分享了一个抓取小说的代码,感觉还是蛮不错的,这里分享给大家学习。

image.png

一、小说下载

如果你想下载该网站上的任意一本小说的话,直接点击链接进去,如下图所示。

image.png

只要将URL中的这个数字拿到就可以了,比方说这里是951,那么这个数字代表的就是这本书的书号,在后面的代码中可以用得到的。

二、具体实现

这里直接丢大佬的代码了,如下所示:

# coding: utf-8
'''
笔趣网小说下载
仅限用于研究代码
勿用于商业用途
请于24小时内删除
'''
import requests
import os
from bs4 import BeautifulSoup
import time


def book_page_list(book_id):
    '''
    通过传入的书号bookid,获取此书的所有章节目录
    :param book_id:
    :return: 章节目录及章节地址
    '''
    url = 'http://www.biquw.com/book/{}/'.format(book_id)
    headers = {
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36'}
    response = requests.get(url, headers)
    response.encoding = response.apparent_encoding
    response = BeautifulSoup(response.text, 'lxml')
    booklist = response.find('div', class_='book_list').find_all('a')
    return booklist


def book_page_text(bookid, booklist):
    '''
    通过书号、章节目录,抓取每一章的内容并存档
    :param bookid:str
    :param booklist:
    :return:None
    '''
    try:
        for book_page in booklist:
            page_name = book_page.text.replace('*', '')
            page_id = book_page['href']
            time.sleep(3)
            url = 'http://www.biquw.com/book/{}/{}'.format(bookid,page_id)
            headers = {
                'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36'}
            response_book = requests.get(url, headers)
            response_book.encoding = response_book.apparent_encoding
            response_book = BeautifulSoup(response_book.text, 'lxml')
            book_content = response_book.find('div', id="htmlContent")
            with open("./{}/{}.txt".format(bookid,page_name), 'a') as f:
                f.write(book_content.text.replace('\xa0', ''))
                print("当前下载章节:{}".format(page_name))
    except Exception as e:
        print(e)
        print("章节内容获取失败,请确保书号正确,及书本有正常内容。")


if __name__ == '__main__':
    bookid = input("请输入书号(数字):")
    # 如果书号对应的目录不存在,则新建目录,用于存放章节内容
    if not os.path.isdir('./{}'.format(bookid)):
        os.mkdir('./{}'.format(bookid))
    try:
        booklist = book_page_list(bookid)
        print("获取目录成功!")
        time.sleep(5)
        book_page_text(bookid, booklist)
    except Exception as e:
        print(e)
        print("获取目录失败,请确保书号输入正确!")

程序运行之后,在控制台输入书号,即可开始进行抓取了。

image.png

在本地也会自动新建一个书号命名的文件夹,在该文件夹下,会存放小说的章节,如下图所示。

image.png

三、常见问题

在运行过程中小伙伴们应该会经常遇到这个问题,如下图所示。

image.png

这个是因为访问太快,网站给你反爬了。可以设置随机的user-agent或者上代理等方法解决。

四、总结

我是Python进阶者。这篇文章主要给大家介绍了小说内容的获取方法,基于网络爬虫,通过requests爬虫库和bs4选择器进行实现,并且给大家例举了常见问题的处理方法。

小伙伴们,快快用实践一下吧!如果在学习过程中,有遇到任何问题,欢迎加我好友,我拉你进Python学习交流群共同探讨学习。

标签:章节,bookid,Python,手把手,page,book,源码,booklist,response
From: https://www.cnblogs.com/dcpeng/p/18344946

相关文章

  • Java计算机毕业设计家乐在线家装平台(开题报告+源码+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着互联网的普及和人们生活水平的提高,家装行业正经历着前所未有的变革。传统家装模式存在信息不对称、流程繁琐、效率低下等问题,难以满足消费者日益......
  • Java计算机毕业设计课程在线测评系统(开题报告+源码+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着信息技术的飞速发展,在线教育已成为教育领域的重要组成部分,其灵活性和便捷性受到广大师生的青睐。然而,如何有效评估在线教育的学习效果,确保教学质......
  • Java计算机毕业设计咖啡馆管理系统(开题报告+源码+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着咖啡文化的普及和消费者对品质生活追求的不断提升,咖啡馆作为休闲聚会、商务洽谈的重要场所,其数量与规模在全球范围内迅速增长。然而,传统的手工管......
  • Java计算机毕业设计家教服务网(开题报告+源码+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景在当今社会,随着教育竞争的日益激烈和家长对孩子教育质量的重视,家教服务已成为许多家庭提升孩子学习成绩、培养综合素质的重要途径。然而,传统的家教服......
  • 基于uniapp微信小程序+SpringBoot+Vue的礼品商城小程序系统设计和实现(源码+论文+部署
    博主介绍:✌全网粉丝50W+,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌技术范围:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、P......
  • 基于uniapp微信小程序+SpringBoot+Vue的生日福利管理系统设计和实现(源码+论文+部署讲
    博主介绍:✌全网粉丝50W+,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌技术范围:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、P......
  • 借助 Transformer 实现美股价格的预测(Python干货)
    作者:老余捞鱼原创不易,转载请标明出处及原作者。写在前面的话:      Transformer是一种在自然语言处理等领域广泛应用的深度学习架构,与传统的循环神经网络(RNN)相比,Transformer可以并行处理输入序列的各个位置,大大提高了计算效率。而且通过多层的深度堆叠,能够学习......
  • 将 Mojo 与 Python 结合使用
    Mojo允许您访问整个Python生态系统,但环境可能会因Python的安装方式而异。花些时间准确了解Python中的模块和包的工作原理是值得的,因为有一些复杂情况需要注意。如果您以前在调用Python代码时遇到困难,这将帮助您入门。Python中的模块和包让我们从Python开始,如......
  • Mojo和Python中的类型详解
    调用Python方法时,Mojo需要在原生Python对象和原生Mojo对象之间来回转换。大多数转换都是自动进行的,但也有一些情况Mojo尚未处理。在这些情况下,您可能需要进行显式转换,或调用额外的方法。Python中的Mojo类型Mojo基本类型隐式转换为Python对象。目前支持的......
  • python绘制圆柱体
     importosimportrandomimportnumpyasnpimportmatplotlib.pyplotasplt#合成管道数据集defplot_cylinder(center,radius,height,num_points=100):#生成圆柱体的侧面点坐标theta=np.linspace(0,2*np.pi,num_points)intervalZ=np.floor(h......