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 HTMLParser模块解析html获取url实例
Apr 08 Python
python代码 if not x: 和 if x is not None: 和 if not x is None:使用介绍
Sep 21 Python
Python 高级专用类方法的实例详解
Sep 11 Python
基于Django URL传参 FORM表单传数据 get post的用法实例
May 28 Python
python实现NB-IoT模块远程控制
Jun 20 Python
使用 Python 合并多个格式一致的 Excel 文件(推荐)
Dec 09 Python
在python中利用try..except来代替if..else的用法
Dec 19 Python
python GUI库图形界面开发之PyQt5信号与槽的高级使用技巧装饰器信号与槽详细使用方法与实例
Mar 06 Python
python读取图像矩阵文件并转换为向量实例
Jun 18 Python
python 下载文件的多种方法汇总
Nov 17 Python
Python监听键盘和鼠标事件的示例代码
Nov 18 Python
分享python函数常见关键字
Apr 26 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读取和编写XML DOM的实现代码
2011/02/03 PHP
PHP 图片上传代码
2011/09/13 PHP
PHP实现下载断点续传的方法
2014/11/12 PHP
PHP动态规划解决0-1背包问题实例分析
2015/03/23 PHP
OfflineSave离线保存代码再次发布使用说明
2007/05/23 Javascript
使用PHP+JQuery+Ajax分页的实现
2013/04/23 Javascript
jQuery仿Excel表格编辑功能的实现代码
2013/05/01 Javascript
JS和Jquery获取和修改label的值的示例代码
2014/01/15 Javascript
不使用jquery实现js打字效果示例分享
2014/01/19 Javascript
jquery插件锦集【推荐】
2016/12/16 Javascript
javascript实现循环广告条效果
2017/12/12 Javascript
JsChart组件使用详解
2018/03/04 Javascript
Nodejs异步回调之异常处理实例分析
2018/06/22 NodeJs
微信小程序实现弹出层效果
2020/05/26 Javascript
浅谈VueJS SSR 后端绘制内存泄漏的相关解决经验
2018/12/20 Javascript
浅谈python多线程和队列管理shell程序
2015/08/04 Python
Python3如何解决字符编码问题详解
2017/04/23 Python
分享一个可以生成各种进制格式IP的小工具实例代码
2017/07/28 Python
详解TensorFlow在windows上安装与简单示例
2018/03/05 Python
python使用tensorflow深度学习识别验证码
2018/04/03 Python
Python利用pandas计算多个CSV文件数据值的实例
2018/04/19 Python
python 获取指定文件夹下所有文件名称并写入列表的实例
2018/04/23 Python
python设置值及NaN值处理方法
2018/07/03 Python
调试Django时打印SQL语句的日志代码实例
2019/09/12 Python
Python requests模块安装及使用教程图解
2020/06/30 Python
Python钉钉报警及Zabbix集成钉钉报警的示例代码
2020/08/17 Python
python 将html转换为pdf的几种方法
2020/12/29 Python
HTML5 使用 sessionStorage 进行页面传值的方法
2018/07/02 HTML / CSS
自定义html标记替换html5新增元素
2008/10/17 HTML / CSS
澳大利亚手袋、珠宝和在线时尚精品店:The Way
2019/12/21 全球购物
物业客服专员岗位职责
2013/11/30 职场文书
确保工程质量承诺书
2015/04/29 职场文书
村党总支部公开承诺书2016
2016/03/25 职场文书
高考满分作文赏析(2篇)
2019/08/12 职场文书
MySQL 分页查询的优化技巧
2021/05/12 MySQL
nginx共享内存的机制详解
2022/03/21 Servers