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文件操作整理汇总
Oct 21 Python
一些Python中的二维数组的操作方法
May 02 Python
Saltstack快速入门简单汇总
Mar 01 Python
python strip() 函数和 split() 函数的详解及实例
Feb 03 Python
python+selenium+autoit实现文件上传功能
Aug 23 Python
Python 使用PyQt5 完成选择文件或目录的对话框方法
Jun 27 Python
Python内存管理实例分析
Jul 10 Python
如何在windows下安装Pycham2020软件(方法步骤详解)
May 03 Python
通过实例解析Python RPC实现原理及方法
Jul 07 Python
python/golang 删除链表中的元素
Sep 14 Python
使用py-spy解决scrapy卡死的问题方法
Sep 29 Python
Python爬虫数据的分类及json数据使用小结
Mar 29 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 CKEditor 上传图片实现代码
2009/11/06 PHP
PHP is_dir() 判断给定文件名是否是一个目录
2010/05/10 PHP
基于php设计模式中单例模式的应用分析
2013/05/15 PHP
PHP禁止个别IP访问网站
2013/10/30 PHP
Codeigniter的一些优秀特性总结
2015/01/21 PHP
PHP使用缓存即时输出内容(output buffering)的方法
2015/08/03 PHP
Laravel学习笔记之Artisan命令生成自定义模板的方法
2018/11/22 PHP
jQuery 1.2.x 升? 1.3.x 注意事项
2009/05/06 Javascript
JS setCapture 区域外事件捕捉
2010/03/18 Javascript
jQuery AJAX 调用WebService实现代码
2010/03/24 Javascript
javascript简单事件处理和with用法介绍
2013/09/16 Javascript
前端弹出对话框 js实现ajax交互
2016/09/09 Javascript
vue.js指令v-for使用及索引获取
2016/11/03 Javascript
angularjs实现多张图片上传并预览功能
2017/02/24 Javascript
JavaScript实现两个select下拉框选项左移右移
2017/03/09 Javascript
vue loadmore组件上拉加载更多功能示例代码
2017/07/19 Javascript
Vue.js用法详解
2017/11/13 Javascript
微信小程序用户信息encryptedData详解
2018/08/24 Javascript
基于vue-cli搭建多模块且各模块独立打包的项目
2019/06/12 Javascript
js实现磁性吸附的示例
2020/10/26 Javascript
vue+elementui通用弹窗的实现(新增+编辑)
2021/01/07 Vue.js
jQuery实现购物车全功能
2021/01/11 jQuery
[01:08:00]Fnatic vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
[43:57]Liquid vs Mineski 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/19 DOTA
python 环境变量和import模块导入方法(详解)
2017/07/11 Python
python3大文件解压和基本操作
2017/12/15 Python
使用python获取电脑的磁盘信息方法
2018/11/01 Python
Python面向对象实现一个对象调用另一个对象操作示例
2019/04/08 Python
谈一谈基于python的面向对象编程基础
2019/05/21 Python
Django框架之登录后自定义跳转页面的实现方法
2019/07/18 Python
Python环境Pillow( PIL )图像处理工具使用解析
2019/09/12 Python
解决Pytorch训练过程中loss不下降的问题
2020/01/02 Python
Python实现列表索引批量删除的5种方法
2020/11/16 Python
python+opencv实现车道线检测
2021/02/19 Python
给定一个时间点,希望得到其他时间点
2013/11/07 面试题
2014年安全保卫工作总结
2014/11/13 职场文书