pyhon3爬虫爬取小说(仅供学习使用。爬虫项目小实践)
此代码实现了通过输入作者名查找小说,列出相似作者的小说,通过用户自行选择小说名下载,亦实现了通过输入小说名字查找小说。相关代码已上传至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
二、获取章节内容
获取文章内容不用多说,就这点东西
- 请求链接页面
- 返回内容
- 创建bs对象,lxml解析
- 利用find_all提取class为nove······的div标签,返回结果为列表
- 去除多余字符
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爬虫爬取小说(仅供学习使用。爬虫项目小实践)相关推荐
- Python selenium Boss直聘数据爬取(仅供学习使用)
写在前面,因为最近刚好需要分析行业数据,又在查询时,发现了许多博主写了一些东西,但很多都已经失效了,所以写了那么一篇文章,希望能够帮到大家 注:BOSS直聘数据为js加载数据,故使用selenium ...
- node爬虫爬取小说
node爬虫爬取小说 node爬虫爬取小说 直接上代码 node爬虫爬取小说 最近发现自己喜欢的一个小说无法下载,网页版广告太多,操作太难受,只能自己写个爬虫把内容爬下来放在阅读器里面看 项目下载地址 ...
- python 爬虫爬取小说信息
1.进入小说主页(以下示例是我在网上随便找的一片小说),获取该小说的名称.作者以及相关描述信息 2.获取该小说的所有章节列表信息(最重要的是每个章节的链接地址href) 3.根据每个章节的地址信息下载 ...
- Python爬虫—爬取小说名著
周末闲来无事,本来想看一看书的,结果也没看进去(RNG输的我真是糟心...) 于是就用python写了一个爬虫,来爬取小说来看,防止下次还要去网上找书看. 我们先找一个看名著的小说网 我们打开http ...
- python爬取晋江小说简介_python爬虫——爬取小说 | 探索白子画和花千骨的爱恨情仇...
知识就像碎布,记得"缝一缝",你才能华丽丽地亮相. 1.Beautiful Soup 1.Beautifulsoup 简介 此次实战从网上爬取小说,需要使用到Beautiful S ...
- python多线程爬虫 爬取多个网页_python多线程爬虫爬取顶点小说内容(BeautifulSoup+urllib)...
思路 之前写过python爬取起点中文网小说,多线程则是先把爬取的章节链接存到一个列表里,然后写一个函数get_text每次调用这个函数就传一个章节链接,那么就需要调用n次该函数来获取n章的内容,所以 ...
- python爬虫爬取小说网站并转换为语音文件
前言 作为一个技术宅,本着为眼睛着想的角度考虑,能少看屏幕就尽量少看屏幕,可是又是一个小说迷,那就开动脑筋爬一下小说转换成语音来听书吧 第一章:爬取小说文件 把目标定在小说存储量比较大的网站:起点中文 ...
- python爬虫爬取豆瓣电影信息城市_python爬虫,爬取豆瓣电影信息
hhhhh开心,搞了一整天,查了不少python基础资料,终于完成了第一个最简单的爬虫:爬取了豆瓣top250电影的名字.评分.评分人数以及短评. 代码实现如下:#第一个最简单的爬虫 #爬取了豆瓣to ...
- Python爬虫爬取小说
近来闲的无聊,天天逛CSDN看到python多火热多火热,就自己根据教程学习爬虫,参考了好几个博文,忘了地址是啥就不贴出来了 开发工具:PcCharm 开发环境:Python3.8 这次爬取的小说网站 ...
最新文章
- 2022-2028年中国抗肿瘤药物行业市场分析调研及发展趋势研究报告
- 可视化工具gephi源码探秘(二)---导入netbeans
- leetcode算法题--最长回文子序列★★
- SpringCloud-创建服务消费者-Ribbon方式(附代码下载)
- 跟老杨学java系列(一)前传
- javax.ws.rs.Path注解@Path的工作原理解析
- Java中sleep()与wait()的区别
- 如何提升鸿蒙战绩,蛰伏一年 鸿蒙系统2.0为我们带来了哪些升级?
- HTML/CSS 练习
- #笔记2021-08
- java(6) ArrayList源码
- airtest 多设备同时运行_AirTest多设备批量运行测试用例并自动生成测试报告
- ArcGIS制图之地形图制作
- 项目管理——时间、成本、范围的三重约束
- 使用Flying Saucer生成pdf
- 缺省(默认)端口参数
- 把软件装进U盘,真正做到即插即用
- 在已有公众号发布微信小程序
- 计算机网络离不开光缆,无线网络论文.doc
- Window下编译 64位ffmpeg 引入libx264及libmp3lame编码库