requests+bs4模块--简单爬虫实例--笔趣阁篇
作者:互联网
requests+bs4模块–简单爬虫实例–笔趣阁篇
文章目录
section1:声明
1、该文章所爬取内容为免费下载内容
2、自己的学习笔记,不会用于商用
3、本文如有侵权,请联系我删除文章!!!
section2:想法
我在学习bs4的时候,找爬虫实例,在小说方面,我找到的大部分都是把爬取内容放在不同的txt文件中,于是,我在想能不能把所有章节放在一个txt文件夹中。于是写了这篇文章。(顺便找几本小说看,嘿嘿)
section3:下载链接分析:
首先进入笔趣阁网站页面,选一本想要爬取的小说,然后右击检查,寻找规律。
寻找第一章节的位置,发现想要获取的链接,但同时发现在它上面还有几个节点(图中蓝色框中圈出来的地方),其实这个就是前面的最新章节的对应,和后面重复了,也是后期需要去掉的地方。
找到链接之后,进入链接。
接着检查,会发现章节内容所在位置。同时发现id是content
那我们把内容提取出来就好了。
但为了方便小说阅读,不需要一章一章地打开txt文件,我们可以用列表,把所有内容放在一起,然后再下载。
具体看下一步
section4:代码编写
(我在代码部分也有所注释,包括是在哪一步解决上面的问题)
1、导包
import requests
import bs4
import os
2、构建请求头
headers = {
'user - agent': 'Mozilla / 5.0(WindowsNT10.0;Win64;x64) AppleWebKit / 537.36(KHTML, likeGecko) Chrome / 80.0.3987.116Safari / 537.36'
}
3、创建保存小说的文件夹
# 创建文件夹
if not os.path.exists('D:/爬虫--笔趣阁'):
os.mkdir('D:/爬虫--笔趣阁')
4、构建获取小说名和章节链接的函数
def get_name_lists(url): # 得到小说名字和章节链接列表
response = requests.get(url=url, headers=headers)
html = response.text
soup = bs4.BeautifulSoup(html, 'html.parser')
novel_lists = soup.select('#list dd a') # 获取小说章节
novel_name = soup.select('#info h1')[0].string # 获得小说名
novel_lists = novel_lists[12:] # 去掉前面12节重复内容链接
return novel_name, novel_lists
5、构建获取章节名和章节内容的函数
def get_content(url): # 得到章节名和章节内容
response = requests.get(url=url, headers=headers)
html = response.text
soup = bs4.BeautifulSoup(html, 'html.parser')
name = soup.select(".bookname h1")[0].get_text() # 得到章节名
text = soup.select("#content")[0].get_text().replace('', "").replace(' ', '')
text = text.replace('笔趣阁 www.52bqg.net,最快更新万古第一神最新章节! ', '') # 得到章节内容,并利用替换,去掉广告和空格
return name, text
6、构建下载函数
def text_save(filename, data): # filename为写入的文件,data为要写入数据列表.
file = open(filename, 'w', encoding='utf-8')
for i in range(len(data)):
s = str(data[i]).replace('[', '').replace(']', '') # 去除[]
s = s.replace("'", '').replace(',', '') + '\n' # 去除单引号,逗号,每行末尾追加换行符
file.write(s) # 将列表中数据依次写入文件中
file.close()
7、构建主函数
def main():
list_all = list() # 先定义一个空列表,方便之后把内容放在里面
base_url = 'https://www.52bqg.net/book_126836/'
novel_name, novel_lists = get_name_lists(base_url) # 调用函数
text_name = 'D:/爬虫--笔趣阁/' + '{}.txt'.format(novel_name)
# for i in range(len(novel_lists)): # 这个循环是爬取整本小说
for i in range(0, 2): # 学习笔记,所以只爬了前两节
novel_url = base_url + novel_lists[i].get("href")
name, novel = get_content(novel_url) # 调用函数
list_all.append(name)
list_all.append(novel)
print(name, '下载成功啦!!!')
text_save(text_name, list_all) # 调用函数
print('本小说所有章节全部下载完毕!!!')
8、完整代码
import requests
import bs4
import os
headers = {
'user - agent': 'Mozilla / 5.0(WindowsNT10.0;Win64;x64) AppleWebKit / 537.36(KHTML, likeGecko) Chrome / 80.0.3987.116Safari / 537.36'
}
# 创建文件夹
if not os.path.exists('D:/爬虫--笔趣阁'):
os.mkdir('D:/爬虫--笔趣阁')
def get_name_lists(url): # 得到小说名字和章节链接列表
response = requests.get(url=url, headers=headers)
html = response.text
soup = bs4.BeautifulSoup(html, 'html.parser')
novel_lists = soup.select('#list dd a') # 获取小说章节
novel_name = soup.select('#info h1')[0].string # 获得小说名
novel_lists = novel_lists[12:] # 去掉前面12节重复内容链接
return novel_name, novel_lists
def get_content(url): # 得到章节名和章节内容
response = requests.get(url=url, headers=headers)
html = response.text
soup = bs4.BeautifulSoup(html, 'html.parser')
name = soup.select(".bookname h1")[0].get_text() # 得到章节名
text = soup.select("#content")[0].get_text().replace('', "").replace(' ', '')
text = text.replace('笔趣阁 www.52bqg.net,最快更新万古第一神最新章节! ', '') # 得到章节内容,并利用替换,去掉广告和空格
return name, text
def text_save(filename, data): # filename为写入的文件,data为要写入数据列表.
file = open(filename, 'w', encoding='utf-8')
for i in range(len(data)):
s = str(data[i]).replace('[', '').replace(']', '') # 去除[]
s = s.replace("'", '').replace(',', '') + '\n' # 去除单引号,逗号,每行末尾追加换行符
file.write(s) # 将列表中数据依次写入文件中
file.close()
def main():
list_all = list() # 先定义一个空列表,方便之后把内容放在里面
base_url = 'https://www.52bqg.net/book_126836/'
novel_name, novel_lists = get_name_lists(base_url) # 调用函数
text_name = 'D:/爬虫--笔趣阁/' + '{}.txt'.format(novel_name)
# for i in range(len(novel_lists)): # 这个循环是爬取整本小说
for i in range(0, 2): # 学习笔记,所以只爬了前两节
novel_url = base_url + novel_lists[i].get("href")
name, novel = get_content(novel_url) # 调用函数
list_all.append(name)
list_all.append(novel)
print(name, '下载成功啦!!!')
text_save(text_name, list_all) # 调用函数
print('本小说所有章节全部下载完毕!!!')
if __name__ == '__main__':
main()
section5:运行结果
因为是学习嘛,所以就只下载了两章,下载整本小说需要修改的地方,上一部分有说明的嗷。
section6:参考博文及学习链接
1、使用列表方法的思路来源
参考博文:点击此处获取
2、soup.select的一些学习方法
参考博文:点击此处获取
标签:章节,novel,name,get,--,text,bs4,url,requests 来源: https://blog.csdn.net/qq_44921056/article/details/113828803