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迭代和迭代器
Mar 28 Python
python创建文件备份的脚本
Sep 11 Python
python使用OpenCV模块实现图像的融合示例代码
Apr 10 Python
PyQt5实现简单的计算器
May 30 Python
Python基础教程之输入输出和运算符
Jul 26 Python
Python实现AES加密,解密的两种方法
Oct 03 Python
Python之字符串的遍历的4种方式
Dec 08 Python
matplotlib之多边形选区(PolygonSelector)的使用
Feb 24 Python
python实现MySQL指定表增量同步数据到clickhouse的脚本
Feb 26 Python
正确的理解和使用Django信号(Signals)
Apr 14 Python
Python连续赋值需要注意的一些问题
Jun 03 Python
python基础之类属性和实例属性
Oct 24 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 获取客户端真实IP地址多种方法小结
2010/05/15 PHP
php轻松实现中英文混排字符串截取
2014/05/28 PHP
php编写的一个E-mail验证类
2015/03/25 PHP
PHP小偷程序的设计与实现方法详解
2016/10/15 PHP
window.open的功能全解析
2006/10/10 Javascript
json格式化/压缩工具 Chrome插件扩展版
2010/05/25 Javascript
表单的焦点顺序tabindex和对应enter键提交
2013/01/04 Javascript
js获取html文件的思路及示例
2013/09/17 Javascript
js跨域请求的5中解决方式
2015/07/02 Javascript
jquery小火箭返回顶部代码分享
2015/08/19 Javascript
深入浅析JavaScript系列(13):This? Yes,this!
2016/01/05 Javascript
BootStrap Table后台分页时前台删除最后一页所有数据refresh刷新后无数据问题
2016/12/28 Javascript
JS高仿抛物线加入购物车特效实现代码
2017/02/20 Javascript
详解vue-loader在项目中是如何配置的
2018/06/04 Javascript
原生JS实现动态加载js文件并在加载成功后执行回调函数的方法
2020/12/30 Javascript
Vue动态路由缓存不相互影响的解决办法
2019/02/19 Javascript
vue+高德地图写地图选址组件的方法
2019/05/18 Javascript
详解JavaScript 异步编程
2020/07/13 Javascript
Openlayers3实现车辆轨迹回放功能
2020/09/29 Javascript
[03:59]DOTA2英雄梦之声_第07期_水晶室女
2014/06/23 DOTA
浅析Python中的序列化存储的方法
2015/04/28 Python
Python实现使用卷积提取图片轮廓功能示例
2018/05/12 Python
Django网络框架之HelloDjango项目创建教程
2019/06/06 Python
python实现读取excel文件中所有sheet操作示例
2019/08/09 Python
python中return如何写
2020/06/18 Python
汽车专业毕业生自荐信
2013/11/03 职场文书
结婚邀请函范文
2014/01/14 职场文书
党的群众路线教育实践活动心得体会
2014/03/03 职场文书
治庸问责心得体会
2014/09/12 职场文书
刑事附带民事上诉状
2015/05/23 职场文书
公司借条范本
2015/05/25 职场文书
开票证明
2015/06/23 职场文书
Python insert() / append() 用法 Leetcode实战演示
2021/03/31 Python
mysql多表查询-笔记七
2021/04/05 MySQL
nginx搭建NFS网络文件系统
2022/04/14 Servers
win sever 2022如何占用操作主机角色
2022/06/25 Servers