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的动态重新封装的教程
Apr 11 Python
Python的Bottle框架中返回静态文件和JSON对象的方法
Apr 30 Python
python smtplib模块自动收发邮件功能(二)
May 22 Python
python3.6使用pymysql连接Mysql数据库
May 25 Python
python中使用print输出中文的方法
Jul 16 Python
解决Python中list里的中文输出到html模板里的问题
Dec 17 Python
python pandas模块基础学习详解
Jul 03 Python
numpy.meshgrid()理解(小结)
Aug 01 Python
python中下标和切片的使用方法解析
Aug 27 Python
Python数据可视化:箱线图多种库画法
Nov 06 Python
详解pycharm连接不上mysql数据库的解决办法
Jan 10 Python
对python中 math模块下 atan 和 atan2的区别详解
Jan 17 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极大的增强功能和性能
2006/10/09 PHP
php数组函数序列之prev() - 移动数组内部指针到上一个元素的位置,并返回该元素值
2011/10/31 PHP
PHP数组 为文章加关键字连接 文章内容自动加链接
2011/12/29 PHP
php 修改、增加xml结点属性的实现代码
2013/10/22 PHP
php文件类型MIME对照表(比较全)
2016/10/07 PHP
laravel 模型查询按照whereIn排序的示例
2019/10/16 PHP
IE不出现Flash激活框的小发现的js实现方法
2007/09/07 Javascript
jQuery中fadeIn、fadeOut、fadeTo的使用方法(图片显示与隐藏)
2013/05/08 Javascript
返回上一页并自动刷新的JavaScript代码
2014/02/19 Javascript
文本框水印提示效果的简单实现代码
2014/02/22 Javascript
jQuery中not()方法用法实例
2015/01/06 Javascript
基于jQuery的Web上传插件Uploadify使用示例
2016/05/19 Javascript
AngularJS 简单应用实例
2016/07/28 Javascript
利用CSS、JavaScript及Ajax实现图片预加载的方法
2016/11/29 Javascript
JSON中key动态设置及JSON.parse和JSON.stringify()的区别
2016/12/29 Javascript
JS沙箱模式实例分析
2017/09/04 Javascript
基于vue-cli、elementUI的Vue超简单入门小例子(推荐)
2019/04/17 Javascript
es6 super关键字的理解与应用实例分析
2020/02/15 Javascript
JavaScript定时器使用方法详解
2020/03/26 Javascript
python共享引用(多个变量引用)示例代码
2013/12/04 Python
Python错误处理操作示例
2018/07/18 Python
Python Django给admin添加Action的方法实例详解
2019/04/29 Python
Python内置加密模块用法解析
2019/11/25 Python
Python + selenium + crontab实现每日定时自动打卡功能
2020/03/31 Python
在spyder IPython console中,运行代码加入参数的实例
2020/04/20 Python
马来西亚太阳镜、眼镜和隐形眼镜网上商店:Focus Point
2018/12/13 全球购物
2014年上半年工作自我评价
2014/01/18 职场文书
音乐专业自荐信
2014/02/07 职场文书
技校学生个人职业生涯规划范文
2014/03/03 职场文书
舞蹈专业大学生职业规划范文
2014/03/12 职场文书
政府门卫岗位职责
2014/04/29 职场文书
小学生学习雷锋倡议书
2014/05/15 职场文书
企业文化宣传标语
2014/06/09 职场文书
《七律·长征》教学反思
2016/02/16 职场文书
python程序的组织结构详解
2021/12/06 Python
CentOS 7安装mysql5.7使用XtraBackUp备份工具命令详解
2022/04/12 MySQL