其他分享
首页 > 其他分享> > requests+bs4模块--简单爬虫实例--笔趣阁篇

requests+bs4模块--简单爬虫实例--笔趣阁篇

作者:互联网

requests+bs4模块–简单爬虫实例–笔趣阁篇

文章目录

section1:声明

1、该文章所爬取内容为免费下载内容
2、自己的学习笔记,不会用于商用
3、本文如有侵权,请联系我删除文章!!!

section2:想法

我在学习bs4的时候,找爬虫实例,在小说方面,我找到的大部分都是把爬取内容放在不同的txt文件中,于是,我在想能不能把所有章节放在一个txt文件夹中。于是写了这篇文章。(顺便找几本小说看,嘿嘿)

section3:下载链接分析:

首先进入笔趣阁网站页面,选一本想要爬取的小说,然后右击检查,寻找规律。
在这里插入图片描述

寻找第一章节的位置,发现想要获取的链接,但同时发现在它上面还有几个节点(图中蓝色框中圈出来的地方),其实这个就是前面的最新章节的对应,和后面重复了,也是后期需要去掉的地方。

找到链接之后,进入链接。

接着检查,会发现章节内容所在位置。同时发现idcontent
在这里插入图片描述
那我们把内容提取出来就好了。

但为了方便小说阅读,不需要一章一章地打开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