我想打火影忍者能退钱吗漫画得多少钱?

忍者学校,课堂上。
在最后一排的角落,一个男孩低着头,手拿画笔,在一张白纸上迅速画着图案。
没一会儿,这一张画完成了。
黑白图案,分割得恰好的几个画面,讲述着一小段剧情。
“赤羽,给我看给我看!”
“别打扰他,等画完一起看。”
“自来也你个蠢货,再吵放学打死你。”
随着这一页画完,他周围几个小孩迅速争执起来。
当然……
最后的结果是,随着白色头发的男孩被另一个女孩狠狠揍了一拳,最后两排重新陷入安静。
过一会儿,第一节课结束。
赤羽咳嗽了几声,把这一页扔给他们说:“你们先看,我歇一会儿。”
随后,他又剧烈咳嗽了一阵。
“赤羽你的身体太差了,要努力锻炼啊,这样才能画更多的画。”
自来说着迅速伸手,然而画稿被另外一只洁白得不像男孩的男生先一步拿走。
“哈哈哈,自来也你这白痴……”
于是,教室里响起了欢快的笑声。
赤羽靠在墙上,连喘了几口气,眼神涣散。
在他眼前,一个半透明的面板浮现。
——————
姓名:鞍马赤羽
忍者等级:未达到下忍
体魄:3(+)
精神力:34(+)
擅长查克拉属性:阴
装备:画笔、画板
技能:无
积分:27
——————
“辛辛苦苦画完一卷,结果才得到这么点积分。”
半个月前,他从21世纪一个绘画专业生,穿越成了火影世界的鞍马赤羽。
虽说无聊画火影忍者漫画的时候激活了漫画系统,但都半个月了,才攒了27点积分……
赤羽忍不住有点心塞。
这也没办法,他一个小孩,而漫画这玩意儿在火影世界压根没有,新生事物想为人所接受,总得需要过程。
好在而今第一次忍界大战刚结束,木叶拥有一小段的和平时期,足以让赤羽慢慢发展。
不过……
话虽这么说,可看着只有3点的体魄,他还是忍不住想骂娘。
鞍马一族血继限界觉醒者的特性——精神力极强,身体极差。
这两点在他身上全数应验,然而不同的是,他强大的精神力源自穿越而非本身,可身体差却是真的差。
简单说,他没得到血继限界,却得到了鞍马一族的臭毛病,好在再凑一些积分,他就能使用系统能力觉醒‘五感操控’。
五感操控:宿主家族传承的血继限界,需30点积分觉醒。
正是为了觉醒血继限界,他到现在都舍不得花积分。
“咦,兑换列表多了几个……”
他刚翻开兑换列表,立马发现里头多了好几种之前没有的忍术。
变身术:D级忍术,需5点积分。
分身术:D级忍术,需5点积分。
替身术:D级忍术,需要5点积分
色诱之术:由变身术变化而来,需5点积分。
影分身之术:B级忍术,需100点积分。
“这几种好像是第一卷里出现的忍术……难道说,我漫画里出现的忍术都能兑换?”
是的。
赤羽刚刚画的,正是火影忍者的第一卷。
穿越前他是绘画专业,原创漫画可能做不到,但抄还是很容易的。
不过他最初只是想试试画画能不能激活鞍马一族的血继限界,结果无意中觉醒了这个漫画系统。
对他而言,漫画系统无异于雪中送炭,可问题是,为什么一定要画火影忍者?
老子就在火影世界好吗!
要不是穿越时间是木叶19年,赤羽觉得自己这系统大概就废了。
好在现如今,漫画初期绝大多数角色都远未出生,没人会认为这里头画的就是未来。
大家想的,最多也只是——
“赤羽,你这故事太有趣了。”
“哈哈哈,里边的火影大人好老。”
“这是未来吗?”
没错,在大家眼中,这些不过赤羽脑中幻想,只是用画笔将它们绘画出来而已。
包括老师猿飞念一。
“赤羽,你用这种形式写故事很不错,不过我希望你课上能认真一些。”
猿飞念一刚下课,就走到这边找赤羽谈话。
这种相似的话,他已经说过十几遍了……嗯,从开始课堂上画火影忍者的第一天他就这么说,不过从来没缴过赤羽的画笔和画板。
“知道了老师,我会注意的。”
赤羽一脸“疲惫”地笑了笑。
“嗯,快上课了,大家别看了,把稿子给我,放学后我还给你们。”
随后,猿飞念一无情的收走了一沓画稿。
“猿飞叔叔,我才刚拿到手……”
手中被缴走漫画的女孩憋着嘴,眼珠子水汪汪的都快哭出来了。
女孩一头金发,棕色眼睛,看上去非常可爱。
不过她的身份很恐怖。
千手一族公主,纲手。
“小纲手,叔叔就拿一会儿,等你下课一定先给你。”
猿飞念一嘿嘿笑着,拿上画稿回到讲台,从第一页开始看起来。
赤羽观察到,自己的积分又涨了一点。
不过……
猿飞念一之前不是贡献了一点吗,咋这次还给了一点积分?
不止如此。
几分钟后,他陆续又收获2点积分。
等猿飞念一看完第一卷,赤羽的积分总额已经达到了31点。
前前后后加起来,这位中忍教师看第一卷时给赤羽带来了5点积分。
“难道忍者等级越高,给的积分越多?”
赤羽盯着面板,内心暗想道。
回家可以拿族人试试……
鞍马一族好些年没出新的血继限界觉醒者,但族中上忍、中忍却不在少数。
如果真的忍者等级越高,给的积分越多,那把漫画推销给全族能到得多少积分?
想想就激动!
上课了,但猿飞念一似乎没意识到这一点。
他看了一遍,坐在那儿一脸回味,随后……又翻到第一页开始看起来。
底下还没看的小伙伴气的牙痒痒,特别是纲手,小脸上满是愤恨。
第二遍看到一半,猿飞念一忽地反应过来——淦,上课了!
“不过我现在已经可以觉醒血继限界了,要不要兑换呢?”
赤羽有点犹豫。
兑换后,很可能会立马觉醒。
鞍马一族的血继限界觉醒,好像没有其他家族那么大动静?
赤羽思索片刻,终究没忍住,兑换了“五感操控”。
积分-30。
“兑换成功。”
“你体内的血继限界正在觉醒……”
谁年少没有个漫画梦,犹记当初,网络还没有现在这么方便,想看漫画只能节衣缩食,攒到5毛钱租一本漫画,就可以在幽暗的个人漫画租阅室里就能度过一个快乐的下午,现在想起来真是回忆满满。 现在有了网络,看漫变成了一件不再困难的事,但是最近常去的漫画网突然关停,让我意识到网上有的东西,还是放在硬盘里最安全。但是漫画一张一张另存为图片,不是我们好青年所为,于是乎,就以一代人的记忆漫画《火影忍者》为例,编写了一个下载爬虫,实现自动下载并按章节自动建立文件夹的功能,在此向《风之动漫》网站致敬。 首先我们打开网页,进入到《火影忍者》漫画目录页,如图1-1:
图1-1 漫画目录页
总体来说,本漫画的爬虫,分为两个部分:一是对目录页的爬取,获得所有详情页的跳转链接; 二是进入详情页后,对其中每一页的图片进行保存。 先把需要的库列出来:
要实现对目录页的爬取,我们需要用到的requests及lxml库,那么为了方便,在这里我把该爬虫所需要的所有库都列出来。一、导入库:#第一部分目录页解析主要使用库:
import requests
from lxml import etree
#第二部分详情页解析主要使用库:
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as ec
#其他辅助库
import time
import os
import re二、实现目录页面爬取:#要爬取的网页网址
URL= 'https://manhua.fzdm.com/1/'
这一部分在浏览器打开网页后—F12—F5刷新—Network—name中读取的网址(一般来说是第一项)—Headers选项——Request Headers中。加入headers是最为基础的掩盖爬虫手段的方法,根据网站反爬虫机制的程度,决定添加项目的多少,一般来说有此三项足够。如图2-1。
图2-1 Request Headrest样式
#建立用于伪装的header:包括User-Agent、referer和cookie。
HEADER = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36',
'referer': 'https://www.fzdm.com/',
'cookie': '_ga=GA1.1.2099399557.1574420824; picHost=www-mipengine-org.mipcdn.com/i/p1.manhuapan.com; _ga_1FZE0C2L80=GS1.1.1574833839.2.1.1574833854.0'
} 建立 分析目录页、提取详情页网址的函数parse_catalogue(),这里需要给定参数url。def parse_catalogue(url):
#调用requests库中的get命令,获取要爬取的目录页内容
req = requests.get(url=url, headers=HEADER)
#通过lxml库中etree.HTML将解析字符串格式的HTML文档对象,注意:使用req.content获取的是网页的bytes型也就是二进制的数据。
html = etree.HTML(req.content)
图2-2 目录页源码
#在这里我们通过分析网页源代码,使用xpath命令进行定位,可以看出其中的href就是我们的要获得的网页地址(……的一部分)。如图2-2。
href = html.xpath("//div[@id='content']/li/a/@href")
#在我们得到了所有的href后,通过for循环将其取出,通过字符串的组合我们我们就能得到详情页的真是网址,即content_url。例:“https://manhua.fzdm.com/1/ + brc25/ ”
for x in href:
content_url = URL + x
#打印组合完成的新网址,这样在爬取的时候,我们就可以看到下载到了哪里。
print(content_url)
#将content_url得到的网址传入到parse_content函数,这里使用的parse_content函数是下面要建立的详情页解析函数。
parse_content(content_url)
#使用time函数,每次解析一个网页后停滞2秒。
time.sleep(2) 到这里,我们完成了爬虫功能的一半,实现了对所有详情页的网址的获取及将详情页网址导入详情页解析函数的操作。这样我们在启动爬虫的的时候,只需要调用一个函数(parse_catalogue)就能实现完整解析下载功能。三、详情页解析,下载漫画 那么我们接下来就要实现对详情页的处理了。在这里我们同样建立一个函数,就是我们刚刚提到的parse_content函数,从而实现对详情页解析,并正式下载漫画。 进入到详情页中,我们首先来对详情页进行分析,这里该网站采用的是一个页面显示一张漫画的方法,想看下一页漫画,只能通过点击下一页或者点击可见到的数字来跳转到相关页面。如图3-1.。
图3-1 详情页跳转方式
同样在源码中,我们也可以看到,该网页只呈现了当前网页的中可见的少量漫画页面跳转地址,并没有呈现出该回漫画总共的页面数。图3-2.
图3-2 详情页跳转方式源码
因此,我这里采用selenium+chromedriver模拟Chrome浏览器的方式进行让它不断点击下一页,从而实现网页的跳转。 开始建立selenium的driver:#chromedriver的地址,根据个人不同进行修改。
Driver_path = r'C:/Chrome/chromedriver.exe'
#设置ChromeOptions,实现不显示页面自动执行。
Option = webdriver.ChromeOptions()
Option.add_argument('headless')
#导入设置,建立Driver。
Driver = webdriver.Chrome(Driver_path, options=Option) 建立parse_content函数,这里的url需要把从parse_ catalogueh函数中解析组合得到的url(也就是真正的详情页地址)传入进来。def parse_content(url):
#使用Driver.get打开详情页
Driver.get(url)
#获取详情页中该回漫画的名称,find_element_by_xpath是使用xpath语法的形式进行定位,注意这里虽然定位的方式使用的是xpath,但是该方法是用来定位element的,不能直接获得text,所以需要在获取到的element最后使用“.text”方法获得其中文本内容。
title = Driver.find_element_by_xpath('//div[@id="pjax-container"]/h1').text
#打印标题
print(title)
#使用os函数建立多层目录,我把目录建立都在e盘的comic文件夹下,按照漫画章节标题单独建立目录。
if os.path.isdir('e:/comic/' + title):
pass
else:
os.makedirs('e:/comic/' + title)
#因为在网页中,我们没有办法一目了然地看到该回漫画总计页数,所以在这里使用while True循环,让他不断遍历,直到达到相应的条件,则终止循环。
while True:
#显式等待,每次进入新网页img标签出现再进行下一步
WebDriverWait(Driver, 10).until(ec.presence_of_element_located((By.XPATH, "//div[@id='mhimg0']//img")))
#获取每一个页面中,漫画图片的真实地址。
img = Driver.find_element_by_xpath("//div[@id='mhimg0']//img")
src = img.get_attribute("src")
#在这里,获得的src中的网址,不是真正的漫画图片地址,例:“http://www-mipengine-org.mipcdn.com/i/p1.manhuapan.com/2018/12/17021845640584.jpg”,真实的地址是“p1.manhuapan.com/2018/12/17021845640584.jpg”,这里使用正则表达式就可以取出来,再拼合头部就可以得到真正的漫画图片地址。
顺便说一句,如此清新脱俗的反爬,让我感动不已,天知道我第一次下载时看到一文件夹打不开的jpg是什么表情。
src1 = 'http://' + re.search('wd.+.jpg', src).group()
print(src1)
#使用requests.get请求图片的网址
comic_content = requests.get(url=src1, headers=HEADER)
#将图片保存到对应文件夹中,文件名按照下载的图片名定义
with open('e:/comic/' + title + '/' + re.search('w+.jpg', src).group(), 'wb') as f:
f.write(comic_content.content)
#这里,需要注意:该网站共每一次打开新的漫画页面的时候,右下角都会出现一个弹窗的广告,这个弹窗广告的位置刚好遮住了下一页的位置,所以使用selenium时需要先关闭这个广告,才能点击下一页。关闭的按键在源代码里显示在<a href=’ javascript:void();’>中,如图3-3.
图3-3 广告关闭按键的源码
这种形式的element不能直接进行定位然后单击,只有使用find_elements取出所有的a标签,然后for循环配合条件语句进行查找,实现点击。#等待a标签的出现。
WebDriverWait(Driver, 10).until(ec.presence_of_element_located((By.TAG_NAME, 'a')))
#定位全部的a标签,根据条件查找对应a标签,进行点击。
a = Driver.find_elements_by_tag_name('a')
for x in a:
if 'javascript:void()' in x.get_attribute("href"):
x.click()
#当该回漫画到最后一页,会在网页最后出现“最后一页了”的字样,在这里当出现最后一页了的字样后,循环停止跳出,否则只要出现“下一页”字样,就重复循环。
end_story = ec.text_to_be_present_in_element((By.XPATH, '//div[@class="navigation"]'), "最后一页了")(Driver)
if end_story is True:
break
else:
next_page = Driver.find_element_by_link_text('下一页')
WebDriverWait(Driver, 10).until(
ec.presence_of_element_located((By.XPATH, '//a[@class="pure-button pure-button-primary"]')))
next_page.click() 爬取结果如图3-4,图3-5。
图3-4 漫画下载目录
图3-5漫画内容下载样例
四、结语: 这是一个非常简单的爬虫,但其实用性和通用性均比较强(比如,更换漫画的url可以获取该网站所有漫画),对于其他网站的图片批量获取也有着借鉴意义。 本代码开源,本文也仅供技术交流,不承担其他人使用责任,望大家秉中正之心,持守正之器。在这里还是要感谢《风之动漫》网站,给了我和很多喜爱漫画的同好们一个休闲的地方,望越做越好。 突发奇想,如果把爬下来的漫画打印出来,然后开一个小时候的漫画出租屋,是不是很快就可以走上人生巅峰了啊。哈哈。

我要回帖

更多关于 火影忍者能退钱吗 的文章

 

随机推荐