此代码实现了通过输入作者名查找小说,列出相似作者的小说,通过用户自行选择小说名下载,亦实现了通过输入小说名字查找小说。相关代码已上传至github:https://github.com/qazhw/paFeiLuXS

使用工具

python3  ,BeautifulSoup库,requests库

网页分析

随便找一本小说

以此为例

我们发现所有章节都存放在class="DivTd"的div便签中,这里我直接提取的div标签,

效果如下:

[<div class="DivTd">
<a href="//b.faloo.com/965864_1.html" target="_self" title="洪荒:诸天打手群,开局平定黑暗动乱!:第1章 诸天万界打手群">第1章 诸天万界打手群</a>
</div>, <div class="DivTd">
<a href="//b.faloo.com/965864_2.html" target="_self" title="洪荒:诸天打手群,开局平定黑暗动乱!:第2章 邀请十位洪荒大能入群">第2章 邀请十位洪荒大能入群</a>
</div>, <div class="DivTd">
<a href="//b.faloo.com/965864_3.html" target="_self" title="洪荒:诸天打手群,开局平定黑暗动乱!:第3章 来自北斗世界叶黑的四星任务">第3章 来自北斗世界叶黑的四星任务</a>
</div>,   ···]

再通过遍历这个列表来提取出a标签的字符串文本href

naurl = {} # 在for循环里建一个空字典 实现列表嵌套多个字典 形式上面给出naurl['章节名'] = i.a.string  # 获取a标签的章节名
naurl['章节链接'] = servers + i.a.get('href') # 获取a标签的内容

爬虫实现

一、获取章节名、章节链接

直接用beautifulsoup的 find_all() 方法获取a标签 相关注释已在程序给出


def get_download_url(target):print(target)  # 输出返回的链接headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.106 Safari/537.36 Edg/91.0.864.53'}req = requests.get(url=target, headers=headers)html = req.text  # 获取页面html文本bf = BeautifulSoup(html, "lxml")  # 解析htmlprint('-----------------------')# print(bf)alist = bf.find_all('a', class_='c_con_li_detail')  # 匹配print(alist)if not alist:alist = bf.find_all('div', attrs={'class': 'DivTd'})print(alist)l = []# print(html)book_name = bf.find('h1')  # 获取 h1 小说名字# 异常 搜索小说 若小说不存在则返回异常输出异常信息 ,反之小说存在则显示搜索成功try:book_name = book_name.getText()  # 请求url 获取响应文本if book_name:print('小说已搜索成功')  # 若book_name成功获取文本,则输出搜索成功print(book_name)except Exception as e:print('小说不存在')print(e)sys.exit()finally:time.sleep(2)book_name = book_name.strip("\r\n目录")  # 书名去除首尾换行符# book_name = book_name.replace("\n", "--")  # 将标题内的换行符以--代替# 如果磁盘中存在book_name(书名)文件夹,则不创建,如果不存在,则创建{书名}文件夹if not os.path.exists(book_name):os.makedirs(book_name)print(f'《{book_name}》开始下载:')k = int(input("请输入要下载的章节数"))for i in len(alist[:k]):print(i)naurl = {}# 异常 目录存在空章节 剔除掉try:naurl['章节名'] = i.a.stringnaurl['章节链接'] = servers + i.a.get('href')l.append(naurl)except Exception as e:print(e)del alist[i]k-=1# naurl['章节名'] = i.a.string# naurl['章节链接'] = servers + i.a.get('href')print('ddd***************************', l)for j in tqdm(range(k), bar_format='{l_bar}%s{bar}%s{r_bar}' % (Fore.LIGHTGREEN_EX, Fore.RESET)):# print(l[i]['章节链接'])wjm = str(j + 1) + '- ' + l[j]['章节名']  #文件名称wjm=re.sub('(\d/\d)','',wjm)  # 删掉(1/2)等不合法命名字符writer(wjm, book_name, get_contents(l[j]['章节链接']))return book_name

 二、获取章节内容

获取文章内容不用多说,就这点东西 

  1. 请求链接页面
  2. 返回内容
  3. 创建bs对象,lxml解析
  4. 利用find_all提取class为nove······的div标签,返回结果为列表
  5. 去除多余字符

def get_contents(target):req = requests.get(url=target) # 请求每一章页面html = req.text # 获取html文本# print(html)bf = BeautifulSoup(html, "lxml") # lxml解析 创建bs对象texts = bf.find_all('div', class_='noveContent') # 获取小说文本内容texts = texts[0].text.replace('\u3000' * 2, '\n\n') # 去除全角空白符# print(texts)return texts # 返回文本

 三、写入文件

def writer(name, path, text):savePath = path + "\\" + str(name) + ".txt"  # 文件命名 路径为pathwith open(savePath, 'a+', encoding='utf-8') as f:f.write(name.center(50) + '\n')print('正在下载' +name)f.writelines(text)  # 每写完一次加个换行f.write('\n\n')

 程序执行过程效果图:

另外我加了弹窗功能 ,下载完毕就会通知

toaster = ToastNotifier()
toaster.show_toast("爬取完毕",k,icon_path="D:/suiji/image.ico",duration=10)

pyhon3爬虫爬取小说(仅供学习使用。爬虫项目小实践)相关推荐

  1. Python selenium Boss直聘数据爬取(仅供学习使用)

    写在前面,因为最近刚好需要分析行业数据,又在查询时,发现了许多博主写了一些东西,但很多都已经失效了,所以写了那么一篇文章,希望能够帮到大家 注:BOSS直聘数据为js加载数据,故使用selenium ...

  2. node爬虫爬取小说

    node爬虫爬取小说 node爬虫爬取小说 直接上代码 node爬虫爬取小说 最近发现自己喜欢的一个小说无法下载,网页版广告太多,操作太难受,只能自己写个爬虫把内容爬下来放在阅读器里面看 项目下载地址 ...

  3. python 爬虫爬取小说信息

    1.进入小说主页(以下示例是我在网上随便找的一片小说),获取该小说的名称.作者以及相关描述信息 2.获取该小说的所有章节列表信息(最重要的是每个章节的链接地址href) 3.根据每个章节的地址信息下载 ...

  4. Python爬虫—爬取小说名著

    周末闲来无事,本来想看一看书的,结果也没看进去(RNG输的我真是糟心...) 于是就用python写了一个爬虫,来爬取小说来看,防止下次还要去网上找书看. 我们先找一个看名著的小说网 我们打开http ...

  5. python爬取晋江小说简介_python爬虫——爬取小说 | 探索白子画和花千骨的爱恨情仇...

    知识就像碎布,记得"缝一缝",你才能华丽丽地亮相. 1.Beautiful Soup 1.Beautifulsoup 简介 此次实战从网上爬取小说,需要使用到Beautiful S ...

  6. python多线程爬虫 爬取多个网页_python多线程爬虫爬取顶点小说内容(BeautifulSoup+urllib)...

    思路 之前写过python爬取起点中文网小说,多线程则是先把爬取的章节链接存到一个列表里,然后写一个函数get_text每次调用这个函数就传一个章节链接,那么就需要调用n次该函数来获取n章的内容,所以 ...

  7. python爬虫爬取小说网站并转换为语音文件

    前言 作为一个技术宅,本着为眼睛着想的角度考虑,能少看屏幕就尽量少看屏幕,可是又是一个小说迷,那就开动脑筋爬一下小说转换成语音来听书吧 第一章:爬取小说文件 把目标定在小说存储量比较大的网站:起点中文 ...

  8. python爬虫爬取豆瓣电影信息城市_python爬虫,爬取豆瓣电影信息

    hhhhh开心,搞了一整天,查了不少python基础资料,终于完成了第一个最简单的爬虫:爬取了豆瓣top250电影的名字.评分.评分人数以及短评. 代码实现如下:#第一个最简单的爬虫 #爬取了豆瓣to ...

  9. Python爬虫爬取小说

    近来闲的无聊,天天逛CSDN看到python多火热多火热,就自己根据教程学习爬虫,参考了好几个博文,忘了地址是啥就不贴出来了 开发工具:PcCharm 开发环境:Python3.8 这次爬取的小说网站 ...

最新文章

  1. 2022-2028年中国抗肿瘤药物行业市场分析调研及发展趋势研究报告
  2. 可视化工具gephi源码探秘(二)---导入netbeans
  3. leetcode算法题--最长回文子序列★★
  4. SpringCloud-创建服务消费者-Ribbon方式(附代码下载)
  5. 跟老杨学java系列(一)前传
  6. javax.ws.rs.Path注解@Path的工作原理解析
  7. Java中sleep()与wait()的区别
  8. 如何提升鸿蒙战绩,蛰伏一年 鸿蒙系统2.0为我们带来了哪些升级?
  9. HTML/CSS 练习
  10. #笔记2021-08
  11. java(6) ArrayList源码
  12. airtest 多设备同时运行_AirTest多设备批量运行测试用例并自动生成测试报告
  13. ArcGIS制图之地形图制作
  14. 项目管理——时间、成本、范围的三重约束
  15. 使用Flying Saucer生成pdf
  16. 缺省(默认)端口参数
  17. 把软件装进U盘,真正做到即插即用
  18. 在已有公众号发布微信小程序
  19. 计算机网络离不开光缆,无线网络论文.doc
  20. Window下编译 64位ffmpeg 引入libx264及libmp3lame编码库

热门文章

  1. 【Octave】柱面投影简析
  2. Linux命令之修改文件权限chmod
  3. 2020 Top10计算机视觉论文总结:论文,代码,解读,还有demo视频!
  4. 盛世国庆,七度银饰32店齐开
  5. U盘修复 请将磁盘插入驱动器 短接修复
  6. windows 安装nvidia p102显卡驱动
  7. Vue:router的beforeEach是什么
  8. 最小镜像文件制作【树莓派镜像】,简单有效,已经制作多次。使用Linux系统,只有Win系统的不适合。及再次烧录后启动可能出现的问题解决办法。
  9. 如何关闭微信朋友圈个性化广告?
  10. pyzbar+uiautomation(实现扫码进入微信大学习)