书包网小说多线程爬虫
书包网是个很好的小说网站,提供了小说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
书包网小说多线程爬虫相关推荐
- python多线程爬虫界面_Python实现贴吧多线程网盘爬虫
\n 百度贴吧网盘多线程爬虫 \n 作者: {3} 贴吧名称: {1}吧 爬取深度: {2} 已爬取目录页数: {5} \ 已爬取主题帖数: {6} 已爬取帖子页数: {7} 已爬取网盘页数: {8} ...
- 数据分析与爬虫实战视频——学习笔记(二)(千图网图片爬虫、fiddler抓包分析、腾讯视频评论爬虫、多线程爬虫(糗百))
网址:[数据挖掘]2019年最新python3 数据分析与数据爬虫实战 https://www.bilibili.com/video/av22571713/?p=26 第三周第二节课 1抓包分析实战 ...
- 多线程爬虫实战--彼岸图网壁纸爬取
多线程爬虫实战–彼岸图网壁纸爬取 普通方法爬取 import requests from lxml import etree import os from urllib import requesth ...
- 【日常点滴016】python斗图网多线程爬虫
(代码有点老了,怕丢失,发在csdn上,仅做多线程代码了解. 改改结构应该还能用到很多网站上) import requests 斗图网 多线程爬虫 from lxml import etree fro ...
- python爬取小说并下载_python爬取138看书网小说源码
python爬取138看书网小说源码由论坛用户制作并分享,适用于138小说网,能够帮助用户爬取网站获取小说资源,软件提供分类搜索查找的功能,支持目录爬取,还附带书签功能,用户使用这款软件能够更加轻松地 ...
- Python爬取书包网文章实战总结
python爬取书包网文章总结 今天闲来无事去看小说,但是发现没办法直接下载,所以呢就用python爬虫来下载一波了,哈哈- 爬取的是这篇小说:剑破九天(是不是很霸气,话不多说,开始-) 总体思路步骤 ...
- python爬取百度贴吧中的所有邮箱_使用 Python 编写多线程爬虫抓取百度贴吧邮箱与手机号...
原标题:使用 Python 编写多线程爬虫抓取百度贴吧邮箱与手机号 不知道大家过年都是怎么过的,反正栏主是在家睡了一天,醒来的时候登QQ发现有人找我要一份贴吧爬虫的源代码,想起之前练手的时候写过一个抓 ...
- 关于网易云音乐爬虫的api接口?
抓包能力有限,分析了一下网易云音乐的一些api接口,但是关于它很多post请求都是加了密,没有弄太明白.之前在知乎看到过一个豆瓣工程师写的教程,但是被投诉删掉了,请问有网友fork了的吗?因为我觉得他 ...
- python多线程爬虫实例-Python多线程爬虫简单示例
python是支持多线程的,主要是通过thread和threading这两个模块来实现的.thread模块是比较底层的模块,threading模块是对thread做了一些包装的,可以更加方便的使用. ...
最新文章
- 狗年拜年php源码,2018狗年拜年词大全!再也不担心拜年没祝词啦~祝您新年快乐!...
- c语言生成随机坐标,C语言 文件的随机读写详解及示例代码
- 《塞洛特傳說》道具系统
- ASPNET登陆总结
- OJ题目细菌实验分组c语言,C语言
- 用Java将文件读入字节数组的7个示例
- 排序算法Java实现(基数排序)
- sap权限激活_sap角色权限设置手册V1.0
- 吴恩达深度学习2.1练习_Improving Deep Neural Networks_initialization
- Android开发笔记(十六)秋千摇摆动画SwingAnimation
- sqlserver 操作技巧
- 关闭Windows Defender保护
- C# MD5 加密算法
- catia保存成stp文件时部件丢失_超详细的分布式文件系统FastDFS磁盘恢复介绍
- CA系统(概念、结构和功能)和CA证书
- javassist使用
- imdisk虚拟光驱安装linux,ImDisk Virtual Disk Driver(虚拟光驱)
- 暴风影音 android 电视,暴风影音飞屏版电视端
- 今天,腾讯云总裁邱跃鹏表示,云计算发展要迈过三道关……
- 把握人类的八大本能,让你拥有“营销作弊器”
热门文章
- PhotoShop CC 2017软件工具面板使用---移动工具
- 基因数据处理56之bwa运行paird-end(1千万条100bp的reads).md
- 解决Windows 7下IE11无法卸载、无法重新安装,提示安装了更新的IE版本
- Win11怎么连接宽带?
- Personal views on domain change of several theorems and applications
- ImportError: cannot import name ‘ModelOutput‘ from ‘smplx.body_models‘
- 2020蓝天杯论文评比系统_获奖通报 | 铜山区在江苏省第十四届(2020年)“蓝天杯”中小学优秀教学设计评选中荣获佳绩...
- Adobe Premiere Pro快速入门教程
- SICP读书笔记 2.1
- TCP/IP协议十三:TTL