书包网是个很好的小说网站,提供了小说txt下载,并且网站后端高并发,不用担心随便抓一下把网站抓崩了

既然如此,何不拿来练手爬虫项目呢。

直接上代码把,此多线程爬虫支持爬取各种这样类似的网站,关键需要网站支持高并发,否则分分钟崩了。

毕竟5分钟一本18mb的小说,属于超级快的那种了

from lxml import etree
import requests
from threading import Thread,enumerate
import os
from time import sleep,timeheaders={
# ':authority':'www.bookbao8.com',
# ':method': 'GET',
# ':path': '/book/201506/04/id_XNDMyMjA1.html',
# ':scheme': 'https',
'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3',
'accept-encoding': 'gzip, deflate, br',
'accept-language': 'zh-CN,zh;q=0.9',
'cache-control': 'max-age=0',
'cookie': 'Hm_lvt_79d6c18dfed73a9524dc37b056df45ec=1577182135; Hm_lpvt_79d6c18dfed73a9524dc37b056df45ec=1577182135; Hm_lvt_9e424f40a62d01a6b9036c7d25ce9a05=1577182142; trustedsite_visit=1; bk_ad=2; __cm_warden_uid=840a745a752905060cd14982b4bbc922coo; __cm_warden_upi=MTE5LjQuMjI4LjE1Nw%3D%3D; Hm_lpvt_9e424f40a62d01a6b9036c7d25ce9a05=1577185720',
'referer': 'https://www.bookbao8.com/book/201506/04/id_XNDMyMjA1.html',
'sec-fetch-mode': 'navigate',
'sec-fetch-site': 'same-origin',
'sec-fetch-user': '?1',
'upgrade-insecure-requests': '1',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36'
}def thread_it(func,*args):t = Thread(target=func,args=args)t.setDaemon(True)t.start()def getAll(url = "https://www.bookbao8.com/book/201506/04/id_XNDMyMjA1.html"):r = requests.get(url,headers=headers)print(r.text)if r.status_code == 200:r.encoding = r.apparent_encodingret = r.textpage_source = etree.HTML(ret)name = page_source.xpath('//*[@id="info"]/h1/text()')author = page_source.xpath('//*[@id="info"]/p[1]/a/text()')novel_type = page_source.xpath('//*[@id="info"]/p[2]/a/text()')title = page_source.xpath('/html/body/div[7]/ul/li/a/text()')link = page_source.xpath('/html/body/div[7]/ul/li/a/@href')link = map(lambda x: 'https://www.bookbao8.com'+x, link)  #向列表中每个元素都加入前缀novel_list = list(zip(title,link))  #将两个列表用zip打包成新的zip对象并转为列表对象if len(novel_list) > 0:return name[0], author[0], novel_type[0], novel_listelse:return None,None,None,Nonedef getOne(link=('第0001章 绝地中走出的少年', 'https://www.bookbao8.com/views/201506/04/id_XNDMyMjA1_1.html')):r = requests.get(link[1], headers=headers)if r.status_code == 200:r.encoding = r.apparent_encodingret = r.textpage_source = etree.HTML(ret)node_title = link[0]node_content = page_source.xpath('//*[@id="contents"]/text()')node_content = "".join(node_content).replace("\n \xa0 \xa0","")if len(node_title) > 0:return node_title, node_contentelse:return None, None
def writeOne(title,content):txt = "\t\t"+title+"\n"+content+"\n\n"return txt
def runApp(novel_list,name,t1,cwd=''):article_num = len(novel_list)xc_num = article_num//20+1print(f"待开启线程数量为{xc_num}")def inter(link,f,i):try:title, content = getOne(link)txt = writeOne(title, content)f.write(txt)print(f"\r线程{i}正在写入 {title}", end="")except Exception as e:print("\n爬得太快被拒绝连接,等1s递归继续")sleep(1)inter(link,f,i)def inner(name,i,begin,end,cwd):f = open(f"{cwd}downloads/{name}/{i}.txt", mode='w+', encoding='utf-8')for link in novel_list[begin:end]:inter(link, f,i)if link == novel_list[end - 1]:print(f"\n线程{i}执行完毕")print(f"\n剩余线程数量{len(enumerate())}")base_xc = 2 if not cwd else 4if len(enumerate()) <= base_xc:print(enumerate())print("\n全本下载完毕")t2 = time()print(f"\n本次下载小说总共耗时{round(t2 - t1)}s")hebing(f"{cwd}downloads/{name}")f.close()for i in range(1,xc_num+1):begin = 20*(i-1)end = 20*i if i != xc_num else article_numif i == xc_num:print(f"\n全部线程开启完毕")thread_it(inner,name,i,begin,end,cwd)sleep(0.5)def paixuRule(elem):return int(elem.split(".")[0])def hebing(path):dirs = os.listdir(path)dirs.sort(key=paixuRule, reverse=False)f = open(path+".txt",mode='w+',encoding='utf-8')for file in dirs:with open(path+"/"+file,mode="r",encoding="utf-8") as f1:f.write(f1.read())f.close()print("小说合并完成")if __name__ == '__main__':t1 = time()name, _, _, novel_list = getAll(url="https://www.bookbao8.com/book/201506/04/id_XNDMyMjA1.html")print(name)if not os.path.exists("downloads/" + name):os.mkdir("downloads/" + name)runApp(novel_list, name, t1)while True:pass

书包网小说多线程爬虫相关推荐

  1. python多线程爬虫界面_Python实现贴吧多线程网盘爬虫

    \n 百度贴吧网盘多线程爬虫 \n 作者: {3} 贴吧名称: {1}吧 爬取深度: {2} 已爬取目录页数: {5} \ 已爬取主题帖数: {6} 已爬取帖子页数: {7} 已爬取网盘页数: {8} ...

  2. 数据分析与爬虫实战视频——学习笔记(二)(千图网图片爬虫、fiddler抓包分析、腾讯视频评论爬虫、多线程爬虫(糗百))

    网址:[数据挖掘]2019年最新python3 数据分析与数据爬虫实战 https://www.bilibili.com/video/av22571713/?p=26 第三周第二节课 1抓包分析实战 ...

  3. 多线程爬虫实战--彼岸图网壁纸爬取

    多线程爬虫实战–彼岸图网壁纸爬取 普通方法爬取 import requests from lxml import etree import os from urllib import requesth ...

  4. 【日常点滴016】python斗图网多线程爬虫

    (代码有点老了,怕丢失,发在csdn上,仅做多线程代码了解. 改改结构应该还能用到很多网站上) import requests 斗图网 多线程爬虫 from lxml import etree fro ...

  5. python爬取小说并下载_python爬取138看书网小说源码

    python爬取138看书网小说源码由论坛用户制作并分享,适用于138小说网,能够帮助用户爬取网站获取小说资源,软件提供分类搜索查找的功能,支持目录爬取,还附带书签功能,用户使用这款软件能够更加轻松地 ...

  6. Python爬取书包网文章实战总结

    python爬取书包网文章总结 今天闲来无事去看小说,但是发现没办法直接下载,所以呢就用python爬虫来下载一波了,哈哈- 爬取的是这篇小说:剑破九天(是不是很霸气,话不多说,开始-) 总体思路步骤 ...

  7. python爬取百度贴吧中的所有邮箱_使用 Python 编写多线程爬虫抓取百度贴吧邮箱与手机号...

    原标题:使用 Python 编写多线程爬虫抓取百度贴吧邮箱与手机号 不知道大家过年都是怎么过的,反正栏主是在家睡了一天,醒来的时候登QQ发现有人找我要一份贴吧爬虫的源代码,想起之前练手的时候写过一个抓 ...

  8. 关于网易云音乐爬虫的api接口?

    抓包能力有限,分析了一下网易云音乐的一些api接口,但是关于它很多post请求都是加了密,没有弄太明白.之前在知乎看到过一个豆瓣工程师写的教程,但是被投诉删掉了,请问有网友fork了的吗?因为我觉得他 ...

  9. python多线程爬虫实例-Python多线程爬虫简单示例

    python是支持多线程的,主要是通过thread和threading这两个模块来实现的.thread模块是比较底层的模块,threading模块是对thread做了一些包装的,可以更加方便的使用. ...

最新文章

  1. 狗年拜年php源码,2018狗年拜年词大全!再也不担心拜年没祝词啦~祝您新年快乐!...
  2. c语言生成随机坐标,C语言 文件的随机读写详解及示例代码
  3. 《塞洛特傳說》道具系统
  4. ASPNET登陆总结
  5. OJ题目细菌实验分组c语言,C语言
  6. 用Java将文件读入字节数组的7个示例
  7. 排序算法Java实现(基数排序)
  8. sap权限激活_sap角色权限设置手册V1.0
  9. 吴恩达深度学习2.1练习_Improving Deep Neural Networks_initialization
  10. Android开发笔记(十六)秋千摇摆动画SwingAnimation
  11. sqlserver 操作技巧
  12. 关闭Windows Defender保护
  13. C# MD5 加密算法
  14. catia保存成stp文件时部件丢失_超详细的分布式文件系统FastDFS磁盘恢复介绍
  15. CA系统(概念、结构和功能)和CA证书
  16. javassist使用
  17. imdisk虚拟光驱安装linux,ImDisk Virtual Disk Driver(虚拟光驱)
  18. 暴风影音 android 电视,暴风影音飞屏版电视端
  19. 今天,腾讯云总裁邱跃鹏表示,云计算发展要迈过三道关……
  20. 把握人类的八大本能,让你拥有“营销作弊器”

热门文章

  1. PhotoShop CC 2017软件工具面板使用---移动工具
  2. 基因数据处理56之bwa运行paird-end(1千万条100bp的reads).md
  3. 解决Windows 7下IE11无法卸载、无法重新安装,提示安装了更新的IE版本
  4. Win11怎么连接宽带?
  5. Personal views on domain change of several theorems and applications
  6. ImportError: cannot import name ‘ModelOutput‘ from ‘smplx.body_models‘
  7. 2020蓝天杯论文评比系统_获奖通报 | 铜山区在江苏省第十四届(2020年)“蓝天杯”中小学优秀教学设计评选中荣获佳绩...
  8. Adobe Premiere Pro快速入门教程
  9. SICP读书笔记 2.1
  10. TCP/IP协议十三:TTL