requests+bs4模块–简单爬虫实例–小说爬取

文章目录

  • section1:声明
  • section2:想法
  • section3:下载链接分析:
  • section4:代码编写
    • 1、导包
    • 2、构建请求头
    • 3、创建保存小说的文件夹
    • 4、构建获取小说名和章节链接的函数
    • 5、构建获取章节名和章节内容的函数
    • 6、构建下载函数
    • 7、构建主函数
    • 8、完整代码
  • section5:运行结果
  • section6:参考博文及学习链接
    • 1、使用列表方法的思路来源
    • 2、soup.select的一些学习方法

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.textsoup = 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.textsoup = 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.textsoup = 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_listsdef get_content(url):  # 得到章节名和章节内容response = requests.get(url=url, headers=headers)html = response.textsoup = 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, textdef 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的一些学习方法

参考博文:点击此处获取

python爬虫--小说爬取相关推荐

  1. python爬虫之爬取起点中文网小说

    python爬虫之爬取起点中文网小说 hello大家好,这篇文章带大家来制作一个python爬虫爬取阅文集团旗下产品起点中文网的程序,这篇文章的灵感来源于本人制作的一个项目:电脑助手 启帆助手 ⬆是项 ...

  2. python爬虫下载小说_用PYTHON爬虫简单爬取网络小说

    用PYTHON爬虫简单爬取网络小说. 这里是17K小说网上,随便找了一本小说,名字是<千万大奖>. 里面主要是三个函数: 1.get_download_url() 用于获取该小说的所有章节 ...

  3. Python爬虫之爬取网络小说并在本地保存为txt文件

    Python爬虫之爬取网络小说并在本地保存为txt文件 注:本文使用软件为Sublime Text,浏览器为谷歌浏览器 (新手小白第一次写,写得不好请见谅) **1.**首先找到想要爬取的小说章节目录 ...

  4. 用PYTHON爬虫简单爬取网络小说

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取 python免费学习资 ...

  5. python爬取ajax动态内容肯德基门店,Python爬虫如何爬取KFC地址

    随着人们生活水平的提高,肯德基这类的快餐消费的十分火爆,成为小朋友和年轻人的最爱,我们到一个地方想要找到肯德基店面,会根据导航获取肯德基地址,那你知道我们也可以使用python爬虫获取KFC地址吗?我 ...

  6. python爬取网页表格数据匹配,python爬虫——数据爬取和具体解析

    标签:pattern   div   mat   txt   保存   关于   json   result   with open 关于正则表达式的更多用法,可参考链接:https://blog.c ...

  7. Python爬虫:爬取instagram,破解js加密参数

    Python爬虫:爬取instagram,破解js加密参数 instagram 是国外非常流行的一款社交网站,类似的还有像facebook.twitter,这些社交网站对于掌握时事热点.电商数据来源和 ...

  8. python爬取豆瓣电影top250_用Python爬虫实现爬取豆瓣电影Top250

    用Python爬虫实现爬取豆瓣电影Top250 #爬取 豆瓣电影Top250 #250个电影 ,分为10个页显示,1页有25个电影 import urllib.request from bs4 imp ...

  9. python爬取b站视频封面_学习笔记(4)[Python爬虫]:爬取B站搜索界面的所有视频的封面...

    学习笔记(4)[Python爬虫]:爬取B站搜索界面的所有视频的封面 import os import requests import re import json from bs4 import B ...

最新文章

  1. 构建安全的 ASP.NET 网页和控件
  2. vue-video-player有画面没声音_电视盒子没声音?问题都在这了!
  3. 蓝牙设备探测工具blueranger
  4. activemq - 浅析消息确认模式
  5. hdu4772 水模拟
  6. oracle linux rdac,redhat 6.4 安装RDAC
  7. 2020年11月DB-Engines排行:Oracle归零年内涨幅 PostgreSQL增长第一独秀
  8. 图书管理系统C语言程序设计课程,vs c语言图书管理平台课程设计_图书管理平台c语言程序设计_c语言课程设计 图书管理系统...
  9. 【NOI2014】魔法森林
  10. python识别文字并且提示_python识别图像并提取文字的实现方法
  11. 不能访问共享-The network location cannot be reached
  12. 软件测试系统性总结思维导图
  13. 计算机冯诺依曼原理及应用,冯·诺依曼计算机工作原理的核心是( )和“程序控制...
  14. 实验十四 水下无线传感网协议仿真实验
  15. android加速度传感器 源码,Android项目源码利用加速度传感器实现计步
  16. html和css基础知识recap(含大量链接参考)
  17. 软考数据库考试有题库吗_网络工程师真的像大家说的那么容易考吗?
  18. js学习笔记----JavaScript中DOM扩展的那些事
  19. iOS经典错误library not found for -lXXX
  20. Moblin V2活动映像安装详解

热门文章

  1. Python常见问题之单双引号使用错误
  2. Linux下,复制文件或移动文件失败:无法创建普通文件,权限不够。
  3. zzuli OJ 1088: 手机短号 (多实例)
  4. [U盘] 如何恢复U盘容量
  5. Libuv源码解析 - uv_loop整个初始化模块
  6. ajax、php、json异步数据处理
  7. frame和iframe的使用与总结
  8. 10 款优秀的在线 JavaScript 工具推荐
  9. 世上没有免费午餐:谈谈网络广告与节操
  10. 华为智慧屏SE55通过FTP远程文件管理-实简FTP v1.6.30