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 相关文章推荐
详解supervisor使用教程
Nov 21 Python
对numpy Array [: ,] 的取值方法详解
Jul 02 Python
基于随机梯度下降的矩阵分解推荐算法(python)
Aug 31 Python
Pandas 按索引合并数据集的方法
Nov 15 Python
Python判断对象是否为文件对象(file object)的三种方法示例
Apr 26 Python
python 反编译exe文件为py文件的实例代码
Jun 27 Python
在cmd中查看python的安装路径方法
Jul 03 Python
使用pytorch实现可视化中间层的结果
Dec 30 Python
pytorch的batch normalize使用详解
Jan 15 Python
Python使用lambda抛出异常实现方法解析
Aug 20 Python
如何利用pycharm进行代码更新比较
Nov 04 Python
仅用几行Python代码就能复制她的U盘文件?
Jun 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批量去除文件UTF8 BOM信息
2013/08/05 PHP
CI(CodeIgniter)框架配置
2014/06/10 PHP
PHP数据库表操作的封装类及用法实例详解
2016/07/12 PHP
jQuery动态改变图片显示大小(修改版)的实现思路及代码
2013/12/24 Javascript
火狐下input焦点无法重复获取问题的解决方法
2014/06/16 Javascript
javascript实现根据函数名称字符串动态执行函数的方法示例
2016/12/28 Javascript
js实现登录框鼠标拖拽效果
2017/03/09 Javascript
基于JavaScript实现瀑布流效果
2017/03/29 Javascript
jquery仿京东商品放大浏览页面
2017/06/06 jQuery
解决vue数组中对象属性变化页面不渲染问题
2018/08/09 Javascript
angularjs实现对表单输入改变的监控(ng-change和watch两种方式)
2018/08/29 Javascript
新手简单了解vue
2019/05/29 Javascript
ES6顶层对象、global对象实例分析
2019/06/14 Javascript
Vue的编码技巧与规范使用详解
2019/08/28 Javascript
微信小程序下拉加载和上拉刷新两种实现方法详解
2019/09/05 Javascript
Vue实现可移动水平时间轴
2020/06/29 Javascript
详解Vue中的自定义指令
2020/12/07 Vue.js
Win7上搭建Cocos2d-x 3.1.1开发环境
2014/07/03 Python
Centos5.x下升级python到python2.7版本教程
2015/02/14 Python
深入解析Python设计模式编程中建造者模式的使用
2016/03/02 Python
python如何获取服务器硬件信息
2017/05/11 Python
13个最常用的Python深度学习库介绍
2017/10/28 Python
pycharm 2019 最新激活方式(pycharm破解、激活)
2020/09/22 Python
如何使用PyCharm将代码上传到GitHub上(图文详解)
2020/04/27 Python
马来西亚最热门的在线时尚商店:FashionValet
2018/11/11 全球购物
德国户外装备、登山运动和攀岩商店:tapir store
2020/02/12 全球购物
校班主任推荐信范文
2013/12/03 职场文书
八项规定整改措施
2014/02/12 职场文书
校长竞聘演讲稿
2014/05/16 职场文书
保护环境倡议书100字
2014/05/19 职场文书
护士节活动总结
2014/08/29 职场文书
红领巾广播站广播稿(3篇)
2014/09/20 职场文书
2015年预防青少年违法犯罪工作总结
2015/05/22 职场文书
学籍证明模板
2015/06/18 职场文书
劳务派遣管理制度(样本)
2019/08/23 职场文书
python 自动化偷懒的四个实用操作
2021/04/11 Python