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 socket网络编程步骤详解(socket套接字使用)
Dec 06 Python
python读写二进制文件的方法
May 09 Python
Python实现删除当前目录下除当前脚本以外的文件和文件夹实例
Jul 27 Python
python opencv 直方图反向投影的方法
Feb 24 Python
python实现自动网页截图并裁剪图片
Jul 30 Python
python将一个英文语句以单词为单位逆序排放的方法
Dec 20 Python
Python3.5面向对象与继承图文实例详解
Apr 24 Python
详解python和matlab的优势与区别
Jun 28 Python
python将字符串list写入excel和txt的实例
Jul 20 Python
Python线程指南分享
Nov 19 Python
python能否java成为主流语言吗
Jun 22 Python
用Python实现职工信息管理系统
Dec 30 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根据生日计算年龄的方法
2015/07/13 PHP
php pdo操作数据库示例
2017/03/10 PHP
jquery 常用操作方法
2010/01/28 Javascript
jQuery对象数据缓存Cache原理及jQuery.data方法区别介绍
2013/04/07 Javascript
jquery控制display属性为none或block
2014/03/31 Javascript
Nodejs Post请求报socket hang up错误的解决办法
2014/09/25 NodeJs
javascript基于DOM实现权限选择实例分析
2015/05/14 Javascript
在HTML中插入JavaScript代码的示例
2015/06/03 Javascript
jquery实现简单文字提示效果
2015/12/02 Javascript
JQuery给select添加/删除节点的实现代码
2016/04/26 Javascript
仅一个form表单 js实现注册信息依次填写提交功能
2016/06/12 Javascript
实例讲解JavaScript中的this指向错误解决方法
2016/06/13 Javascript
async/await与promise(nodejs中的异步操作问题)
2017/03/03 NodeJs
jQuery图片缩放插件smartZoom使用实例详解
2017/08/25 jQuery
JavaScript图片处理与合成总结
2018/03/04 Javascript
解决iview打包时UglifyJs报错的问题
2018/03/07 Javascript
Vue路由钩子之afterEach beforeEach的区别详解
2018/07/15 Javascript
javascript设计模式 ? 解释器模式原理与用法实例分析
2020/04/17 Javascript
简单了解前端渐进式框架VUE
2020/07/20 Javascript
python实现查询IP地址所在地
2015/03/29 Python
Python实现国外赌场热门游戏Craps(双骰子)
2015/03/31 Python
Python下的subprocess模块的入门指引
2015/04/16 Python
Python实现豆瓣图片下载的方法
2015/05/25 Python
Python解惑之True和False详解
2017/04/24 Python
Python利用splinter实现浏览器自动化操作方法
2018/05/11 Python
详解python中的模块及包导入
2019/08/30 Python
python爬虫爬取笔趣网小说网站过程图解
2019/11/18 Python
使用AJAX和Django获取数据的方法实例
2020/10/25 Python
全球领先的美容用品专卖店:Beauty Plus Salon
2018/09/04 全球购物
企业元宵节主持词
2014/03/25 职场文书
会计求职信怎么写
2015/03/20 职场文书
护士自我推荐信范文
2015/03/24 职场文书
2015年信访维稳工作总结
2015/04/07 职场文书
小学同学聚会感言
2015/07/30 职场文书
2016年十一促销广告语
2016/01/28 职场文书
Win11 Build 22000.829更新补丁KB5015882发布(附更新修复内容汇总)
2022/07/15 数码科技