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网络编程之读取网站根目录实例
Sep 30 Python
使用Python实现BT种子和磁力链接的相互转换
Nov 09 Python
Python中str.format()详解
Mar 12 Python
Selenium的使用详解
Oct 19 Python
python批量下载网站马拉松照片的完整步骤
Dec 05 Python
python实现树的深度优先遍历与广度优先遍历详解
Oct 26 Python
Python字典中的值为列表或字典的构造实例
Dec 16 Python
对tensorflow中的strides参数使用详解
Jan 04 Python
python中如何写类
Jun 29 Python
浅谈django框架集成swagger以及自定义参数问题
Jul 07 Python
python给list排序的简单方法
Dec 10 Python
Python中基础数据类型 set集合知识点总结
Aug 02 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.ini中的php-5.2.0配置指令详解
2008/03/27 PHP
php 代码优化之经典示例
2011/03/24 PHP
PHP常用技巧总结(附函数代码)
2012/02/04 PHP
ThinkPHP3.1新特性之对分组支持的改进与完善概述
2014/06/19 PHP
CodeIgniter针对lighttpd服务器URL重写的方法
2015/06/10 PHP
php 访问oracle 存储过程实例详解
2017/01/08 PHP
解决PHP使用CURL发送GET请求时传递参数的问题
2019/10/11 PHP
javascript(jquery)利用函数修改全局变量的代码
2009/11/02 Javascript
JavaScript中json对象和string对象之间相互转化
2012/12/26 Javascript
input输入框的自动匹配(原生代码)
2013/03/19 Javascript
IE的事件传递-event.cancelBubble示例介绍
2014/01/12 Javascript
JavaScript代码复用模式详解
2014/11/07 Javascript
网页从弹窗页面单选框传值至父页面代码分享
2015/09/29 Javascript
AngularJS 作用域详解及示例代码
2016/08/17 Javascript
纯JS打造网页中checkbox和radio的美化效果
2016/10/13 Javascript
JavaScript 深层克隆对象详解及实例
2016/11/03 Javascript
three.js加载obj模型的实例代码
2017/11/10 Javascript
在angularJs中进行数据遍历的2种方法
2018/10/08 Javascript
微信小程序 网络通信实现详解
2019/07/23 Javascript
在vue中利用v-html按分号将文本换行的例子
2019/11/14 Javascript
JavaScript将数组转换为链表的方法
2020/02/16 Javascript
jQuery 移除事件的方法
2020/06/20 jQuery
[00:34]拔城逐梦,热血永恒!2020(秋)完美世界城市挑战赛报名开启
2020/10/09 DOTA
详解Python中 sys.argv[]的用法简明解释
2017/12/20 Python
tensorflow实现tensor中满足某一条件的数值取出组成新的tensor
2020/01/04 Python
python的sys.path模块路径添加方式
2020/03/09 Python
python argparse模块通过后台传递参数实例
2020/04/20 Python
美国首屈一指的礼品篮供应商:GiftTree
2018/01/06 全球购物
Camper鞋西班牙官方网上商店:西班牙马略卡岛的鞋类品牌
2019/03/14 全球购物
计算机求职信
2013/12/01 职场文书
写自荐信的注意事项
2014/03/09 职场文书
领导干部学习“三严三实”思想汇报
2014/09/15 职场文书
丧事答谢词
2015/01/05 职场文书
大学生个人学年总结
2015/02/15 职场文书
安全教育培训心得体会
2016/01/15 职场文书
2016年公务员六五普法心得体会
2016/01/21 职场文书