爬取qd免费小说
本帖最后由 nstar1221 于 2020-2-27 19:29 编辑爬取小说网站的免费小说。
分析过程就不写了,毕竟网络写手也挺苦逼的,尊重一下版权。
源码:
import re
import time
from threading import Thread
# 自己做的包,用于快速爬取
from dwspackage.crawlbug import CrawlBug
# 创建一个网站类,继承CrawlBug
class WebSource(CrawlBug):
def __init__(self, url):
super().__init__(url)
self.chapterTitle = None
self.comboLinks()
def comboLinks(self):
"""
根据网页页码规律重写
"""
# 分析网页:链接
print('开始解析')
chapters = self.analysisHtml('class', 'volume-wrap')
pattern = r'<li.*?data-rid="(.+?)"><a.*?data-cid="(.+?)".+?</li>'
links = re.findall(pattern, str(chapters), re.S)
count = 0
for i, link in links:
if not link.startswith('//vipreader'):
count += 1
tmpLink = "https:" + link
self.linkList.append(tmpLink)
print("共计解析%d章" % count)
self.pages = count
def getPages(self):
"""
获取全部的资源地址并合成资源列表。
:return: [章标题,正文]
"""
print("开始获取资源列表")
for chapter in range(self.pages):# self.pages
self.tmpHtml = self.getHtml(url=self.linkList)
# 获取章回标题
tmpTitle = self.analysisHtml('class', 'content-wrap')
pattern = '<span class="content-wrap">(.+?)</span>'
chapter_title = re.findall(pattern, str(tmpTitle))
self.chapterTitle = chapter_title
print(chapter_title)
# 得到每个页面的资源连接
tmpContent = self.analysisHtml('class', 'read-content j_readContent')
pattern = '<p>(.+?)</p>'
self.getInfo(pattern, tmpContent)
self.getSourceList(chapter)
pass
def getSourceList(self, chapter):
"""
获取资源并生成列表。
视具体情况,可能要在子类中重写。
:param chapter: 当前页码
:return: [序号,章标题,正文]
"""
tmpList = []
for source in self.info:
tmpList.append(source+'\n')
print("获取第%d章" % (chapter+1))
self.source_queue.put()
pass
def saveFile(self):
"""
单独开个线程用于保存文件
:return:
"""
index = 0
while True:
if self.pages == index:
print(self.pages)
break
if not self.source_queue.empty():
content = self.source_queue.get()
filePath = self.path + content + '.' + content + '.' + self.fileType
with open(filePath, 'w') as f:
f.writelines(content)
print('%s 写入文件完成' % content)
index += 1
pass
if __name__ == "__main__":
print('开始爬取免费小说')
start = time.time()
# 小说目录页面
url = 'https://book.qidian.com/info/1018152134'
tail = '#Catalog'
targetUrl = url + tail
# 创建一个CrawBug对象
myCrawl = CrawlBug(targetUrl)
# 分析网页:获取专辑名
folderTitle = myCrawl.analysisHtml('class', 'book-info')
targetPattern = '<em>(.+?)</em>'
folderTitle = myCrawl.getInfo(targetPattern, folderTitle)
print(folderTitle)
# 创建一个网页对象
qdzww = WebSource(targetUrl)
# 创建目录
qdzww.path = 'e:/download/source/'
# # 使用合集名作为文件夹名
qdzww.folder = str(folderTitle)
qdzww.fileType = 'txt'
qdzww.mkdir()
t1 = Thread(target=qdzww.getPages)
t2 = Thread(target=qdzww.saveFile)
t1.start()
t2.start()
t2.join()
end = time.time()
print("下载完成,用时{}秒".format(end - start))
模块源码:https://www.52pojie.cn/thread-1111968-1-1.html zhangxu888 发表于 2020-2-27 20:42
from dwspackage.crawlbug import CrawlBug错误如何解决?
下面有个链接,里面第二段代码是源码,把模块的源码做成成包导入,或者直接把源码直接赋值到文件里 顶一个看看好不好 看起来挺好的,只不过只能爬取一个网站就有点可惜了 看下代码, 谢谢楼主了 学习学习,如果可以适用同类型或者算法写法相似的就更棒了,感谢! 学习学习 看不懂 只能说666 这个可以看看 近来使用python的很多
页:
[1]
2