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 相关文章推荐
Python3.0与2.X版本的区别实例分析
Aug 25 Python
解决Django的request.POST获取不到内容的问题
May 28 Python
Python多项式回归的实现方法
Mar 11 Python
Python 抓取微信公众号账号信息的方法
Jun 14 Python
用OpenCV将视频分解成单帧图片,图片合成视频示例
Dec 10 Python
python序列类型种类详解
Feb 26 Python
利用python画出AUC曲线的实例
Feb 28 Python
浅谈Tensorflow加载Vgg预训练模型的几个注意事项
May 26 Python
使用opencv识别图像红色区域,并输出红色区域中心点坐标
Jun 02 Python
在pycharm中关掉ipython console/PyDev操作
Jun 09 Python
python删除指定列或多列单个或多个内容实例
Jun 28 Python
Python实现冒泡排序算法的完整实例
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+MySql编写聊天室
2006/10/09 PHP
PHP写的加密函数,支持私人密钥(详细介绍)
2013/06/09 PHP
win7+apache+php+mysql环境配置操作详解
2013/06/10 PHP
destoon常用的安全设置概述
2014/06/21 PHP
PHP实现的比较完善的购物车类
2014/12/02 PHP
PHP实现的简单异常处理类示例
2017/05/04 PHP
php常用字符串长度函数strlen()与mb_strlen()用法实例分析
2019/06/25 PHP
Jquery操作radio的简单实例
2014/01/06 Javascript
webpack公共组件引用路径简化小技巧
2018/06/15 Javascript
配置node服务器并且链接微信公众号接口配置步骤详解
2019/06/21 Javascript
JS中的算法与数据结构之二叉查找树(Binary Sort Tree)实例详解
2019/08/16 Javascript
JavaScript如何借用构造函数继承
2019/11/06 Javascript
JS变量提升原理与用法实例浅析
2020/05/22 Javascript
浅谈JavaScript 声明提升
2020/09/14 Javascript
pip 错误unused-command-line-argument-hard-error-in-future解决办法
2014/06/01 Python
python正则表达式中的括号匹配问题
2014/12/14 Python
Python爬虫代理IP池实现方法
2017/01/05 Python
windows下Python实现将pdf文件转化为png格式图片的方法
2017/07/21 Python
基于Python 装饰器装饰类中的方法实例
2018/04/21 Python
使用Python快速制作可视化报表的方法
2019/02/03 Python
python中的反斜杠问题深入讲解
2019/08/12 Python
python shutil文件操作工具使用实例分析
2019/12/25 Python
python tqdm库的使用
2020/11/30 Python
CSS实现鼠标滑过鼠标点击代码写法
2016/12/26 HTML / CSS
html5 Canvas画图教程(3)—canvas出现1像素线条模糊不清的原因
2013/01/09 HTML / CSS
html5教程画矩形代码分享
2013/12/04 HTML / CSS
启动一个线程是用run()还是start()
2016/12/25 面试题
毕业生个人投资创业计划书
2014/01/04 职场文书
党支部承诺书范文
2014/03/28 职场文书
常务副总经理任命书
2014/06/05 职场文书
班级体育活动总结
2014/07/05 职场文书
公司合并协议书范本
2014/09/30 职场文书
幼师中班个人总结
2015/02/12 职场文书
同学聚会通知短信
2015/04/20 职场文书
跟班学习心得体会(共6篇)
2016/01/23 职场文书
原来实习报告是这样写的呀!
2019/07/03 职场文书