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聊天室实现方法
Jun 28 Python
Django项目中包含多个应用时对url的配置方法
May 30 Python
Python实现手写一个类似django的web框架示例
Jul 20 Python
解决Python获取字典dict中不存在的值时出错问题
Oct 17 Python
python实现五子棋人机对战游戏
Mar 25 Python
Python实现最常见加密方式详解
Jul 13 Python
python之pexpect实现自动交互的例子
Jul 25 Python
python实现网站微信登录的示例代码
Sep 18 Python
flask 实现上传图片并缩放作为头像的例子
Jan 09 Python
python编写一个会算账的脚本的示例代码
Jun 02 Python
Selenium自动化测试工具使用方法汇总
Jun 12 Python
python产生模拟数据faker库的使用详解
Nov 04 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(3)
2006/10/09 PHP
自动分页的不完整解决方案
2007/01/12 PHP
php清空(删除)指定目录下的文件,不删除目录文件夹的实现代码
2014/09/04 PHP
PHP 的比较运算与逻辑运算详解
2016/05/12 PHP
PHP自定义多进制的方法
2016/11/03 PHP
PHP架构及原理知识点详解
2019/12/22 PHP
PHP 实现 WebSocket 协议原理与应用详解
2020/04/22 PHP
js控制的回到页面顶端goTop的代码实现
2013/03/20 Javascript
onkeypress字符按键兼容所有浏览器使用介绍
2013/04/24 Javascript
返回页面顶部top按钮通过锚点实现(自写)
2013/08/30 Javascript
AngularJs实现ng1.3+表单验证
2015/12/10 Javascript
javascript实现简易计算器的代码
2016/05/31 Javascript
jQuery实现判断控件是否显示的方法
2017/01/11 Javascript
详解vue 自定义组件使用v-model 及探究其中原理
2019/10/11 Javascript
Vue页面刷新记住页面状态的实现
2019/12/27 Javascript
es6函数name属性功能与用法实例分析
2020/04/18 Javascript
详解Vue3 Teleport 的实践及原理
2020/12/02 Vue.js
在Python中操作字典之clear()方法的使用
2015/05/21 Python
Python3中简单的文件操作及两个简单小实例分享
2017/06/18 Python
python SQLAlchemy 中的Engine详解
2019/07/04 Python
django的model操作汇整详解
2019/07/26 Python
Python 实现遥感影像波段组合的示例代码
2019/08/04 Python
Python 输出详细的异常信息(traceback)方式
2020/04/08 Python
使用Python Tkinter实现剪刀石头布小游戏功能
2020/10/23 Python
CSS3 linear-gradient线性渐变生成加号和减号的方法
2017/11/21 HTML / CSS
BIFFI美国站:意大利BIFFI BOUTIQUES豪华多品牌时装零售公司
2020/02/11 全球购物
大一新生军训时的自我评价分享
2013/12/05 职场文书
学生励志演讲稿
2014/01/06 职场文书
《争吵》教学反思
2014/02/15 职场文书
2014年学生会生活部工作总结
2014/11/07 职场文书
2014年技术工作总结范文
2014/11/20 职场文书
大学生求职自荐信
2015/03/24 职场文书
2015年社区环境卫生工作总结
2015/04/21 职场文书
2019年入党思想汇报格式与要求
2019/06/25 职场文书
星际争霸:毕姥爷vs解冻03
2022/04/01 星际争霸
解决MySQL报“too many connections“错误
2022/04/19 MySQL