python爬虫--小说爬取
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:下载链接分析:
首先进入网站页面,选一本想要爬取的小说,然后右击检查,寻找规律。
寻找第一章节的位置,发现想要获取的链接,但同时发现在它上面还有几个节点(图中蓝色框中圈出来的地方),其实这个就是前面的最新章节的对应,和后面重复了,也是后期需要去掉的地方。
找到链接之后,进入链接。
接着检查,会发现章节内容所在位置。同时发现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.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爬虫--小说爬取相关推荐
- python爬虫之爬取起点中文网小说
python爬虫之爬取起点中文网小说 hello大家好,这篇文章带大家来制作一个python爬虫爬取阅文集团旗下产品起点中文网的程序,这篇文章的灵感来源于本人制作的一个项目:电脑助手 启帆助手 ⬆是项 ...
- python爬虫下载小说_用PYTHON爬虫简单爬取网络小说
用PYTHON爬虫简单爬取网络小说. 这里是17K小说网上,随便找了一本小说,名字是<千万大奖>. 里面主要是三个函数: 1.get_download_url() 用于获取该小说的所有章节 ...
- Python爬虫之爬取网络小说并在本地保存为txt文件
Python爬虫之爬取网络小说并在本地保存为txt文件 注:本文使用软件为Sublime Text,浏览器为谷歌浏览器 (新手小白第一次写,写得不好请见谅) **1.**首先找到想要爬取的小说章节目录 ...
- 用PYTHON爬虫简单爬取网络小说
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取 python免费学习资 ...
- python爬取ajax动态内容肯德基门店,Python爬虫如何爬取KFC地址
随着人们生活水平的提高,肯德基这类的快餐消费的十分火爆,成为小朋友和年轻人的最爱,我们到一个地方想要找到肯德基店面,会根据导航获取肯德基地址,那你知道我们也可以使用python爬虫获取KFC地址吗?我 ...
- python爬取网页表格数据匹配,python爬虫——数据爬取和具体解析
标签:pattern div mat txt 保存 关于 json result with open 关于正则表达式的更多用法,可参考链接:https://blog.c ...
- Python爬虫:爬取instagram,破解js加密参数
Python爬虫:爬取instagram,破解js加密参数 instagram 是国外非常流行的一款社交网站,类似的还有像facebook.twitter,这些社交网站对于掌握时事热点.电商数据来源和 ...
- python爬取豆瓣电影top250_用Python爬虫实现爬取豆瓣电影Top250
用Python爬虫实现爬取豆瓣电影Top250 #爬取 豆瓣电影Top250 #250个电影 ,分为10个页显示,1页有25个电影 import urllib.request from bs4 imp ...
- python爬取b站视频封面_学习笔记(4)[Python爬虫]:爬取B站搜索界面的所有视频的封面...
学习笔记(4)[Python爬虫]:爬取B站搜索界面的所有视频的封面 import os import requests import re import json from bs4 import B ...
最新文章
- 构建安全的 ASP.NET 网页和控件
- vue-video-player有画面没声音_电视盒子没声音?问题都在这了!
- 蓝牙设备探测工具blueranger
- activemq - 浅析消息确认模式
- hdu4772 水模拟
- oracle linux rdac,redhat 6.4 安装RDAC
- 2020年11月DB-Engines排行:Oracle归零年内涨幅 PostgreSQL增长第一独秀
- 图书管理系统C语言程序设计课程,vs c语言图书管理平台课程设计_图书管理平台c语言程序设计_c语言课程设计 图书管理系统...
- 【NOI2014】魔法森林
- python识别文字并且提示_python识别图像并提取文字的实现方法
- 不能访问共享-The network location cannot be reached
- 软件测试系统性总结思维导图
- 计算机冯诺依曼原理及应用,冯·诺依曼计算机工作原理的核心是( )和“程序控制...
- 实验十四 水下无线传感网协议仿真实验
- android加速度传感器 源码,Android项目源码利用加速度传感器实现计步
- html和css基础知识recap(含大量链接参考)
- 软考数据库考试有题库吗_网络工程师真的像大家说的那么容易考吗?
- js学习笔记----JavaScript中DOM扩展的那些事
- iOS经典错误library not found for -lXXX
- Moblin V2活动映像安装详解