python 爬取小说并下载的示例


Posted in Python onDecember 07, 2020

代码

import requests
import time
from tqdm import tqdm
from bs4 import BeautifulSoup

"""
  Author:
    Jack Cui
  Wechat:
    https://mp.weixin.qq.com/s/OCWwRVDFNslIuKyiCVUoTA
"""

def get_content(target):
  req = requests.get(url = target)
  req.encoding = 'utf-8'
  html = req.text
  bf = BeautifulSoup(html, 'lxml')
  texts = bf.find('div', id='content')
  content = texts.text.strip().split('\xa0'*4)
  return content

if __name__ == '__main__':
  server = 'https://www.xsbiquge.com'
  book_name = '诡秘之主.txt'
  target = 'https://www.xsbiquge.com/15_15338/'
  req = requests.get(url = target)
  req.encoding = 'utf-8'
  html = req.text
  chapter_bs = BeautifulSoup(html, 'lxml')
  chapters = chapter_bs.find('div', id='list')
  chapters = chapters.find_all('a')
  for chapter in tqdm(chapters):
    chapter_name = chapter.string
    url = server + chapter.get('href')
    content = get_content(url)
    with open(book_name, 'a', encoding='utf-8') as f:
      f.write(chapter_name)
      f.write('\n')
      f.write('\n'.join(content))
      f.write('\n')

下载效果:

python 爬取小说并下载的示例

可以看到,小说内容保存到“诡秘之主.txt”中,小说一共 1416 章,下载需要大约 20 分钟,每秒钟大约下载 1 个章节。

下载完成,实际花费了 27 分钟。

20 多分钟下载一本小说,你可能感觉太慢了。想提速,可以使用多进程,大幅提高下载速度。如果使用分布式,甚至可以1秒钟内下载完毕。

但是,我不建议这样做。

我们要做一个友好的爬虫,如果我们去提速,那么我们访问的服务器也会面临更大的压力。

以我们这次下载小说的代码为例,每秒钟下载 1 个章节,服务器承受的压力大约 1qps,意思就是,一秒钟请求一次。

如果我们 1 秒同时下载 1416 个章节,那么服务器将承受大约 1416 qps 的压力,这还是仅仅你发出的并发请求数,再算上其他的用户的请求,并发量可能更多。

如果服务器资源不足,这个并发量足以一瞬间将服务器“打死”,特别是一些小网站,都很脆弱。

过大并发量的爬虫程序,相当于发起了一次 CC 攻击,并不是所有网站都能承受百万级别并发量的。

所以,写爬虫,一定要谨慎,勿给服务器增加过多的压力,满足我们的获取数据的需求,这就够了。

你好,我也好,大家好才是真的好。

以上就是python 爬取小说并下载的示例的详细内容,更多关于python 爬取小说下载的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
python中将阿拉伯数字转换成中文的实现代码
May 19 Python
Python实现简单的可逆加密程序实例
Mar 05 Python
python实现二维码扫码自动登录淘宝
Dec 27 Python
解决出现Incorrect integer value: '' for column 'id' at row 1的问题
Oct 29 Python
PyTorch上搭建简单神经网络实现回归和分类的示例
Apr 28 Python
Python中判断输入是否为数字的实现代码
May 26 Python
Python实现的IP端口扫描工具类示例
Feb 15 Python
树莓派3 搭建 django 服务器的实例
Aug 29 Python
python自动识别文本编码格式代码
Dec 26 Python
浅谈Python描述数据结构之KMP篇
Sep 06 Python
python爬虫中采集中遇到的问题整理
Nov 27 Python
python 解决函数返回return的问题
Dec 05 Python
Python常用GUI框架原理解析汇总
Dec 07 #Python
pycharm中leetcode插件使用图文详解
Dec 07 #Python
使用Python爬取Json数据的示例代码
Dec 07 #Python
如何利用python生成MD5并去重
Dec 07 #Python
解决python3.6用cx_Oracle库连接Oracle的问题
Dec 07 #Python
python selenium 获取接口数据的实现
Dec 07 #Python
C++和python实现阿姆斯特朗数字查找实例代码
Dec 07 #Python
You might like
PHP的FTP学习(一)
2006/10/09 PHP
PHP-Fcgi下PHP的执行时间设置方法
2013/08/02 PHP
实例介绍PHP的Reflection反射机制
2014/08/05 PHP
JavaScript 核心参考教程 内置对象
2009/10/13 Javascript
为JavaScript类型增加方法的实现代码(增加功能)
2011/12/29 Javascript
使用CSS样式position:fixed水平滚动的方法
2014/02/19 Javascript
JavaScript实现获取dom中class的方法
2015/02/09 Javascript
javascript设计简单的秒表计时器
2020/09/05 Javascript
基于BootStrap Metronic开发框架经验小结【一】框架总览及菜单模块的处理
2016/05/12 Javascript
yarn与npm的命令行小结
2016/10/20 Javascript
防止重复发送 Ajax 请求
2017/02/15 Javascript
Angular2 路由问题修复详解
2017/03/01 Javascript
.net MVC+Bootstrap下使用localResizeIMG上传图片
2017/04/21 Javascript
浅谈React Native Flexbox布局(小结)
2018/01/08 Javascript
Vue中的scoped实现原理及穿透方法
2018/05/15 Javascript
详解基于vue-cli3.0如何构建功能完善的前端架子
2018/10/09 Javascript
Angular使用ControlValueAccessor创建自定义表单控件
2019/03/08 Javascript
详解关于JSON.parse()和JSON.stringify()的性能小测试
2019/03/14 Javascript
nodejs一个简单的文件服务器的创建方法
2019/09/13 NodeJs
javascript 数组精简技巧小结
2020/02/26 Javascript
python网络编程学习笔记(八):XML生成与解析(DOM、ElementTree)
2014/06/09 Python
Python处理字符串之isspace()方法的使用
2015/05/19 Python
python3中str(字符串)的使用教程
2017/03/23 Python
使用sklearn之LabelEncoder将Label标准化的方法
2018/07/11 Python
python argparser的具体使用
2019/11/10 Python
浅谈keras的深度模型训练过程及结果记录方式
2020/01/24 Python
django rest framework serializers序列化实例
2020/05/13 Python
英国度假别墅预订:Sykes Cottages
2017/06/12 全球购物
几个MySql的面试题
2013/04/22 面试题
大学生村官承诺书
2014/03/28 职场文书
初一学生期末评语
2014/04/24 职场文书
运输企业安全生产责任书
2014/07/28 职场文书
平面设计专业求职信
2014/08/09 职场文书
2014国庆65周年领导讲话稿(3篇)
2014/09/21 职场文书
建筑工程催款函
2015/06/24 职场文书
讲座新闻稿
2015/07/18 职场文书