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中使用glob和rmtree删除目录子目录及所有文件的例子
Nov 21 Python
详解JavaScript编程中的window与window.screen对象
Oct 26 Python
图文详解WinPE下安装Python
May 17 Python
windows上安装Anaconda和python的教程详解
Mar 28 Python
Django项目中用JS实现加载子页面并传值的方法
May 28 Python
Flask web开发处理POST请求实现(登录案例)
Jul 26 Python
Python操作excel的方法总结(xlrd、xlwt、openpyxl)
Sep 02 Python
Pytorch Tensor 输出为txt和mat格式方式
Jan 03 Python
python sorted函数原理解析及练习
Feb 10 Python
python开发实例之Python的Twisted框架中Deferred对象的详细用法与实例
Mar 19 Python
python中shell执行知识点
May 06 Python
解决python便携版无法直接运行py文件的问题
Sep 01 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
1982年日本摄影师镜头下的中国孩子 那无忧无虑的童年
2020/03/12 杂记
php array_map array_multisort 高效处理多维数组排序
2009/06/11 PHP
php 获取可变函数参数的函数
2009/08/26 PHP
PHP内核探索:哈希表碰撞攻击原理
2015/07/31 PHP
JS如何将UTC格式时间转本地格式
2013/09/04 Javascript
Jquery promise实现一张一张加载图片
2015/11/13 Javascript
jQuery选择器用法实例详解
2015/12/17 Javascript
AngularJS 单元测试(二)详解
2016/09/21 Javascript
正则表达式,替换所有HTML标签的简单实例
2016/11/28 Javascript
详解javascript表单的Ajax提交插件的使用
2016/12/29 Javascript
轻松学习Javascript闭包
2017/03/01 Javascript
微信小程序 setData使用方法及常用错误解决办法
2017/05/11 Javascript
微信小程序 action-sheet 反馈上拉菜单简单实例
2017/05/11 Javascript
详解JavaScript中的六种错误类型
2017/09/21 Javascript
解决vue-cli项目打包出现空白页和路径错误的问题
2018/09/04 Javascript
Vue使用watch监听一个对象中的属性的实现方法
2019/05/10 Javascript
[38:38]完美世界DOTA2联赛PWL S3 access vs Rebirth 第二场 12.17
2020/12/18 DOTA
python监控文件并且发送告警邮件
2018/06/21 Python
Django 表单模型选择框如何使用分组
2019/05/16 Python
Python如何实现动态数组
2019/11/02 Python
python系统指定文件的查找只输出目录下所有文件及文件夹
2020/01/19 Python
Python3 元组tuple入门基础
2020/02/09 Python
python新手学习使用库
2020/06/11 Python
Pytorch框架实现mnist手写库识别(与tensorflow对比)
2020/07/20 Python
Python Opencv轮廓常用操作代码实例解析
2020/09/01 Python
CSS3制作ajax loader icon实现思路及代码
2013/08/25 HTML / CSS
英国时尚运动品牌的合集:The Sports Edit
2017/12/20 全球购物
shell程序中如何注释
2012/01/28 面试题
物流创业计划书
2014/02/01 职场文书
难忘的一天教学反思
2014/04/30 职场文书
街道务虚会发言材料
2014/10/20 职场文书
岗位聘任报告
2015/03/02 职场文书
2015年新农村建设工作总结
2015/05/22 职场文书
男方家长婚礼致辞
2015/07/27 职场文书
交通事故协议书范本
2016/03/19 职场文书
SQL Server携程核心系统无感迁移到MySQL实战
2022/06/01 SQL Server