网易首页 > 网易号 > 正文 申请入驻

python爬虫系列(5)- 看了这篇文章你也可以一键下载网络小说

0
分享至

实例讲解request库、bs4库的使用方法

之前写过一篇文章:分享|在线小说一键下载

文章里面简要的介绍一下使用python一键下载小说,该程序就是使用request库、bs4库完成的,比较适合入门的伙伴来学习。

运行效果.gif

正好之前介绍了python爬虫的一些知识,今天就来详细的说一下这个实例。

需求

爬取网页上小说的名字以及所有章节的内容,保存到txt文件。

以下面这篇
https://www.hongxiu.com/book/14088898305054404#Catalog
为例

思路

1、requests请求网页获得源代码;
2、bs4解析,从源代码中提取两个内容,一是作品的名字,二是提取各个章节的名字、链接;
3、再依次使用requests各个章节链接,bs4解析,提取每一章的内容;
4、将上面提取的数据保存到txt文件中。

代码实操

def get_url_info(url):#request请求网页,bs4解析网页
def get_name(url):#获取小说名字
def get_catalog(url):#获取小说章节目录信息,包括1、章节名字,2、章节
def get_text(url):#获取小说章节正文

2、 get_url_info() 函数负责请求网页,解析网页,因为请求的次数比较多,专门编写一个调用,代码在python爬虫系列(3)- 网页数据解析(bs4、lxml、Json库)里面介绍过。

def get_url_info(url):#request请求网页,bs4解析网页
res = requests.get(url)
html = res.text
soup = bs(html, "lxml")
return soup

3、 get_name(url) 函数负责获取小说名字

小说名字的源代码如下获取,可以看到是包裹在 <h1>标签 下的 <em>标签
通过 .find_all("h1")[1].find("em").text 即可提取到。

标题的源代码

def get_name(url):#获取小说名字
soup = get_url_info(url)
name = soup.find_all("h1")[1].find("em").text
#获取小说名字,类型为list,取第二个后就转为str类型,此时获得的小说名字包含作者,如“一个人的外贸江湖 Tessly 著”
return name

因为上面定义了 get_url_info()函数,所以可以直接调用而不需要再写request那些代码。

4、 get_catalog() 函数负责获取小说章节目录信息,包括章节名字和章节链接。根据上面的方法,同样可以查看到关于章节名字、链接的代码,如下:

章节名字、链接的代码

包裹在 <ul>标签 下的 <li>标签 ,通过
.find_all('ul')[3].find_all('li') 将所有章节的信息先筛选出来,然后再用for循环,将每一章的名字、链接都提取出来,保存在catalog列表当中。

def get_catalog(url):#
soup = get_url_info(url)
catalog_data = soup.find_all('ul')[3].find_all('li') #所有章节的信息
catalog = []
for i in catalog_data:
data = {
"title":i.text,#章节名字
"link":"http:"+i.find('a').get('href')#章节链接
}
catalog.append(data)
return catalog

5、 get_text() 函数负责获取小说章节正文,通过步骤4获取到了每一章节的链接后,就可以提取里面的文章内容了。

文章代码如下:

文章代码

正文是包裹在 class_="read-content j_readContent"<div>标签 下,用 .find_all('div',class_="read-content j_readContent")[0].text 方法直接获取。

def get_text(url):#获取小说章节正文
soup = get_url_info(url)
novel = soup.find_all('div',class_="read-content j_readContent")[0].text
novel = '\n '+'\n\n '.join(novel.split()) #为了美观排版用
return novel

6、最后主程序直接调用上面的函数,就可以提取到所需要的文章信息,再直接写入txt文件就大功告成了。

写入文件用 with open .write 方法。

try...except... 是目的是用来防止程序出错就挂掉而不运行下去了。

if __name__ == '__main__':
name = get_name(start_url)#小说名字
print("稍等,正在准备下载...")
print("保存路径为下载程序所在的目录:"+name+'.txt')
for chapter in get_catalog(start_url):
try:
with open(name+'.txt','a+') as f:#写入本地txt,文件名就是小说的名字
print("正在下载:"+chapter["title"])
f.write(get_name(start_url)+'\n\n')#写入小说名字
f.write(chapter["title"]+'\n')#写入章节名字
f.write(get_text(chapter["link"])+'\n') #写入章节内容
f.write('\n=====================分割线====================\n\n')
except:
pass
print("下载完成")

把上面步骤1-6组合起来就可以实现一键下载小说的效果了:

最终效果

1、request请求网页,主要就是 requests.get() 方法;
2、bs4解析网页,提取网页数据,主要运用了 .find_all() 方法;
3、网页的基本结构,如标签、属性等;
4、定义函数、for循环、列表、字典等python基本知识。

完整代码

import requests
from bs4 import BeautifulSoup as bs
start_url = input("请输入你要下载的文章链接:")+"#Catalog"
def get_url_info(url):#request请求网页,bs4解析网页
res = requests.get(url)
html = res.text
soup = bs(html, "lxml")
return soup
def get_name(url):#获取小说名字
soup = get_url_info(url)
name = soup.find_all("h1")[1].find("em").text
#获取小说名字,类型为list,取第二个后就转为str类型,此时获得的小说名字包含作者,如“一个人的外贸江湖 Tessly 著”
return name
def get_catalog(url):#获取小说章节目录信息,包括1、章节名字,2、章节链接
soup = get_url_info(url)
catalog_data = soup.find_all('ul')[3].find_all('li')
catalog = []
for i in catalog_data:
data = {
"title":i.text,#章节名字
"link":"http:"+i.find('a').get('href')#章节链接
}
catalog.append(data)
return catalog
def get_text(url):#获取小说章节正文
soup = get_url_info(url)
novel = soup.find_all('div',class_="read-content j_readContent")[0].text
novel = '\n '+'\n\n '.join(novel.split())
return novel
if __name__ == '__main__':
name = get_name(start_url)#小说名字
print("稍等,正在准备下载...")
print("保存路径为下载程序所在的目录:"+name+'.txt')
for chapter in get_catalog(start_url):
try:
with open(name+'.txt','a+') as f:#写入本地txt,文件名就是小说的名字
print("正在下载:"+chapter["title"])
f.write(get_name(start_url)+'\n\n')
f.write(chapter["title"]+'\n')
f.write(get_text(chapter["link"])+'\n')
f.write('\n=====================分割线====================\n\n')
except:
pass
print("下载完成")
input("按任意键退出")

「小说」 即可!

欢迎交流!
你可能还会想看:
爬虫系列:

python爬虫系列(4)- 提取网页数据(正则表达式、bs4、xpath)

python爬虫系列(3)- 网页数据解析(bs4、lxml、Json库)

python爬虫系列(2)- requests库基本使用

python爬虫系列(1)- 概述

python实例:

python帮你定制批量获取你想要的信息

python帮你定制批量获取智联招聘的信息

用python定制网页跟踪神器,有信息更新第一时间通知你(附视频演示)

用python助你一键下载在线小说

Google图片搜索出了大量满意图片,批量下载它们!

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
19年湖人为得到戴维斯送出了六位球员,他们是谁,后来表现如何?

19年湖人为得到戴维斯送出了六位球员,他们是谁,后来表现如何?

刺头体育
2024-04-25 21:56:57
上海“洗房”事件曝光,让人后怕:人的心机可以深到什么程度

上海“洗房”事件曝光,让人后怕:人的心机可以深到什么程度

飞花文史
2024-04-11 10:39:11
限期180天,美要求中国军工企业退出俄市场,否则就全面封锁制裁

限期180天,美要求中国军工企业退出俄市场,否则就全面封锁制裁

环球Talk
2024-04-23 23:47:26
缅甸公判大会多人被执行死刑,罪犯罗飞因超高颜惹网友心疼

缅甸公判大会多人被执行死刑,罪犯罗飞因超高颜惹网友心疼

映射生活的身影
2024-04-25 20:47:59
合同到期!孙铭徽有意离开广厦,3个下家浮出水面,联手00后新星

合同到期!孙铭徽有意离开广厦,3个下家浮出水面,联手00后新星

体坛大事记
2024-04-26 12:19:56
王志文出山,王劲松入局,倪大红回归,这部央视待播谍战剧要火了

王志文出山,王劲松入局,倪大红回归,这部央视待播谍战剧要火了

喵喵娱乐团
2024-04-26 17:44:15
中山楼市片甲不留,中山南朗镇房价从14000元降至11000元

中山楼市片甲不留,中山南朗镇房价从14000元降至11000元

有事问彭叔
2024-04-26 15:25:24
菲律宾也装上天了?准备强行向我国出口大量榴莲,哪里来的底气?

菲律宾也装上天了?准备强行向我国出口大量榴莲,哪里来的底气?

王姐懒人家常菜
2024-04-26 17:58:14
天空预测英超:利物浦1-1铁锤帮,曼城枪手皆2-0,蓝军输球曼联赢

天空预测英超:利物浦1-1铁锤帮,曼城枪手皆2-0,蓝军输球曼联赢

直播吧
2024-04-26 17:08:11
干部阻拦春耕最新进展:让敛钱人被扒出,纪云浩部队照惹质疑

干部阻拦春耕最新进展:让敛钱人被扒出,纪云浩部队照惹质疑

180°视角
2024-04-25 11:07:23
越南0-1不敌西亚劲旅,无缘亚洲杯四强,依然值得中国队好好学学

越南0-1不敌西亚劲旅,无缘亚洲杯四强,依然值得中国队好好学学

侧身凌空斩
2024-04-27 03:37:53
80后河北小伙网恋娶到美国媳妇,婚后发现对方身份:是我高攀了

80后河北小伙网恋娶到美国媳妇,婚后发现对方身份:是我高攀了

冰痕迹
2024-04-26 23:52:35
泰山梦幻开局!廖力生轰世界波,全华班不惧4外援,崔康熙神用兵

泰山梦幻开局!廖力生轰世界波,全华班不惧4外援,崔康熙神用兵

奥拜尔
2024-04-26 20:23:20
郑铮:上半场防守做得非常好;廖力生表现满分

郑铮:上半场防守做得非常好;廖力生表现满分

懂球帝
2024-04-27 00:13:08
不用担心卸任后待遇了,总统尹锡悦选举大败,3件事说明错得离谱

不用担心卸任后待遇了,总统尹锡悦选举大败,3件事说明错得离谱

历史有些冷
2024-04-25 18:00:08
核废水即将进入中国!这七种鱼尽量不吃,每一种都别大意!

核废水即将进入中国!这七种鱼尽量不吃,每一种都别大意!

南风西洲
2024-04-26 22:23:36
比亚迪跟联想合作,巨婴震怒!

比亚迪跟联想合作,巨婴震怒!

魅力无限娱乐y
2024-04-27 02:13:48
北京国际电影节“天坛奖”揭晓!范伟、梅尔策分获最佳男女主角奖

北京国际电影节“天坛奖”揭晓!范伟、梅尔策分获最佳男女主角奖

极目新闻
2024-04-26 21:40:09
古天乐近照被指面相大变!自曝不吃新鲜宰杀食物,每天只吃一顿饭

古天乐近照被指面相大变!自曝不吃新鲜宰杀食物,每天只吃一顿饭

小咪侃娱圈
2024-04-25 14:47:11
30年官司,百亿损失,内斗如何毁掉中国最具潜力民族品牌?

30年官司,百亿损失,内斗如何毁掉中国最具潜力民族品牌?

燕梳楼2021
2024-04-25 15:06:28
2024-04-27 04:26:44
永恒君的百宝箱
永恒君的百宝箱
分享生活工作中实用的工具技巧
174文章数 2176关注度
往期回顾 全部

科技要闻

车展观察|德系日系绝不能放弃中国市场

头条要闻

官方回应环卫工用电子秤测灰尘:正常作业达标有奖励

头条要闻

官方回应环卫工用电子秤测灰尘:正常作业达标有奖励

体育要闻

首次先发就进球居勒尔破门,卡瓦哈尔横传送助攻

娱乐要闻

金靖回应不官宣恋情结婚的原因

财经要闻

贾跃亭,真他娘是个人才

汽车要闻

2024北京车展 比亚迪的自驱力让对手紧追猛赶

态度原创

亲子
房产
时尚
家居
手机

亲子要闻

台湾性治疗师田雅筑:女生在夫妻生活里恐惧逃避该怎么办?

房产要闻

海南最新房价出炉,三亚跌价最猛!

近五年最好笑打脸事件,繁殖狂富豪被捞女骗了?

家居要闻

光影之间 空间暖意打造生活律动

手机要闻

塑料就是Low?我用回11年前的iPhone 5c:手感绝了

无障碍浏览 进入关怀版