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中文编码那些事
Jun 25 Python
利用Python绘制数据的瀑布图的教程
Apr 07 Python
Python文件操作,open读写文件,追加文本内容实例
Dec 14 Python
简单了解OpenCV是个什么东西
Nov 10 Python
用python爬取租房网站信息的代码
Dec 14 Python
在Django中URL正则表达式匹配的方法
Dec 20 Python
Python实现的文轩网爬虫完整示例
May 16 Python
python set集合使用方法解析
Nov 05 Python
在Python IDLE 下调用anaconda中的库教程
Mar 09 Python
pandas中ix的使用详细讲解
Mar 09 Python
Jupyter notebook无法导入第三方模块的解决方式
Apr 15 Python
Python人工智能之混合高斯模型运动目标检测详解分析
Nov 07 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
PHP4实际应用经验篇(2)
2006/10/09 PHP
php中XMLHttpRequest(Ajax)不能设置自定义的Referer的解决方法
2011/11/26 PHP
由prototype_1.3.1进入javascript殿堂-类的初探
2006/11/06 Javascript
JS随机漂浮广告代码具体实例
2013/11/19 Javascript
28个常用JavaScript方法集锦
2015/01/14 Javascript
使用jquery实现鼠标滑过弹出更多相关信息层附源码下载
2015/11/23 Javascript
整理Javascript基础入门学习笔记
2015/11/29 Javascript
jQuery的Cookie封装,与PHP交互的简单实现
2016/10/05 Javascript
jQuery 插件封装的方法
2016/11/16 Javascript
node.js 抓取代理ip实例代码
2017/04/30 Javascript
详解如何在vscode里面调试js和node.js的方法步骤
2018/12/24 Javascript
VUE实现Studio管理后台之鼠标拖放改变窗口大小
2020/03/04 Javascript
原生JS封装拖动验证滑块的实现代码示例
2020/06/01 Javascript
Vue.js中使用Vuex实现组件数据共享案例
2020/07/31 Javascript
手把手教你如何编译打包video.js
2020/12/09 Javascript
[01:45]IMBATV TI4前线报道-选手到达
2014/07/07 DOTA
python3 与python2 异常处理的区别与联系
2016/06/19 Python
Python爬虫代理IP池实现方法
2017/01/05 Python
Django网络框架之创建虚拟开发环境操作示例
2019/06/06 Python
python flask框架实现重定向功能示例
2019/07/02 Python
基于python实现学生信息管理系统
2019/11/22 Python
用Python生成HTML表格的方法示例
2020/03/06 Python
浅谈python量化 双均线策略(金叉死叉)
2020/06/03 Python
Python confluent kafka客户端配置kerberos认证流程详解
2020/10/12 Python
Html5实现单张、多张图片上传功能
2019/04/28 HTML / CSS
戴尔美国官方折扣店:Dell Outlet
2018/02/13 全球购物
英国领先的男装设计师服装独立零售商:Repertoire Fashion
2020/10/19 全球购物
Set里的元素是不能重复的,那么用什么方法来区分重复与否呢?
2016/08/18 面试题
简短大学毕业感言
2014/01/18 职场文书
报关员个人职业生涯规划书
2014/03/12 职场文书
2014年“向国旗敬礼”网上签名寄语活动方案
2014/09/27 职场文书
实习证明格式范文
2014/10/14 职场文书
公司员工体检通知
2015/04/21 职场文书
生日赠语
2015/06/23 职场文书
2015年工会工作总结范文
2015/07/23 职场文书
解决golang 关于全局变量的坑
2021/05/06 Golang