三国flash(Flash动画的没落)
三国flash文章列表:
- 1、Flash动画的没落
- 2、从国民IP到万人唾骂,三国杀做错了什么?
- 3、Flash彻底退役,我的黄金矿工还能继续玩吗?
- 4、点歌台看过的大话三国,你是否还有印象
- 5、Python 三国人物数据快速采集极简方法汇总
Flash动画的没落
Flash动画制作
2001年到2006年,接触过计算机的同学,尤其是动画、设计领域的同学,一定接触过Flash这个软件,而由这个软件制作的动画,被称为矢量(补间)动画,而制作动画的这些人,被称为闪客。
在那个年代,Flash主要应用在网页、网络广告、MTV制作、娱乐、教育制作、PPT幻灯片、宣传片制作等领域,这个软件学习起来简单,制作动画也相对比较简单,只要是有一定绘画基础的同学,用心学习这个软件一段时间,可以将自己的动画上传到闪吧、闪客帝国、TOM FLASH等网站,供大家分享。
那些优质的国内闪客动画
国内的,比较出名的动画制作团队,例如B&T、ShowGood、中华轩、创梦等;还有优秀的个人,例如白丁、卜华等;都制作出了一批优良的动画。
B&T制作的大鱼FLASH动画
如果你也曾经是一名闪客,相信你一定看过B&T制作的动画,这部动画的色调及风格,比较接近宫崎骏的《千与千寻》。
B&T海棠FLASH动画
多年后,这部动画有了一个电影版本,还获得了不错的票房,大家猜猜是哪一部?
PS:欢迎评论区留言。
还有一些机构用FLASH制作了系列主题动画,例如三国系列,李白系列,典故系列和成语等系列,比如知名的有“大话三国”、“大话李白”、“小兵的故事”等。
小兵的故事
大话三国
女孩,你的一分钟有多长
类似于上图所示的动画,还有许多。如果当时,大家经常逛一些闪客站点,可以常常看到不经意的更新动画。
国外闪客动画代表
说到国外,小编接触的不是很多,大多时间看到的,集中在教学视频,网络广告这些个领域,有时候,也会找到一些优秀的闪客动画,下面给大家分享一下。
国外动画NinJai,当时,大家都在学习这个动画,当时一直不敢相信,这么流畅的动画,竟然是FLASH做出来的。
当然,也有不少的闪客,制作了一些以音乐为主,个人叙事故事为主的动画。
优秀的叙事动画
向左走向右走
这部FLASH动画,改编自几米的漫画书《向左走向右走》。
失落的梦境
“失落的梦境”FLASH动画,是由白丁老师于03年创作,是小编非常喜欢的一种动画风格。
冷眼系列动画
冷眼系列动画,包括姐姐、不能束发的美女、新比比巴等,是优秀FLASH动画的代表。
07年之后的Flash动画
闪客帝国网站
在06年、07年左右,闪客动画,不像之前那么火了,从大家的创作热情就可以看出。小编最后一次制作FLASH动画,是在09年,那时候,小编深深的感受到,这些闪客网站动画的更新频率,就不那么高了。
我对闪客动画有着特殊的情感,小编上大学的时候,以致于后来工作的时候,做着都是一些设计、动画和视频相关的艺术创作工作,只不过,后来经历了一些事情,慢慢的放下了这些,但是这些动画制作的经历,难以忘记。
今天的FLASH闪客动画
即使是在今天,这种动画形式也以另外的一种方式存在着。但是不得不面对的,就是它不太可能再有之前的辉煌。在2000年至2010年间,短视频受流量、网速以及移动终端智能设备的限制,不像今天这样流行;而现在,这些方面都已经成熟,这些动画的制作成本,包括时间、物质等,付出与回报难成正比,同时,受到某些安全问题的影响,FLASH在诸多主流浏览器上,也不再受到支持。
感慨一个时代结束,只不过,有时候,那些美好的回忆,永远属于我们。
从国民IP到万人唾骂,三国杀做错了什么?
作者丨令狐
原创丨游戏猎
只能说这是个奇迹。
根据Steam数据显示,截至2022年2月20日晚22:50,“三国杀”Steam版的评测总数为11691条,其中好评875条,好评率约为7.48%。
这么说吧,上一个好评率冲到个位数,且荣获差评如潮成就的游戏是2020年推出的“杀手13”,创造的历史纪录为总数546篇评价中有9%好评。
毕竟在Steam要获得差评如潮是有门槛的,需要游戏的好评率低于20%,评测的数量还必须足够多,绝大多数被嫌弃的游戏,终其一生不过拿到个“褒贬不一”、“多半差评”。
创下世界新纪录的“三国杀”,却一举凭实力登顶Steam差评榜榜首,就连在全球范围内被玩家讨伐的“实况足球2022”,也难望其项背。
遥想游卡当年,公司初建了,雄姿英发。彼时“三国杀”的作者黄恺曾言,“三国杀成为中国第一桌游,是诸多因素叠加的结果,很多因素不会重现。我的目标不是超越某个具体的产品,而是尽全力超越自己”。
如今大江东去,英雄末路矣。
“微氪十周年,巨氪手杀,不氪别玩”
“三国杀”是一个神奇的IP。
2020年,杭州游卡“三国杀OL”制作人欧耿鑫做了场演讲,给出过一组惊人的数据——从2018年开始,“三国杀”的每年用户仍在持续增长,流水增长超过50%。
这是什么概念?以2019年的数据为例,单是“三国杀手机版”(手杀)的单日流水,就已突破了千万,如果将三国杀IP延伸出来的各种产品算在内的话,三国杀系列的月流水早已过亿,对于一个早在2008年就面世的老国产IP,这个数据非常可观。
要知道,拥有“秦时明月”“天行九歌”“武庚纪”等高质量IP,产品覆盖动画、游戏等领域的玄机科技,在这一年的总收入也才2亿元。
在商业策略上,游卡很有一套。除了桌游这个基本盘不断扩张外,游卡还在不断拓宽“三国杀”IP的边界,先后孵化出《三国杀Online》《三国杀移动版》《新三国杀》《怒焰·三国杀》《三国杀名将传》等一系列产品。
至于为什么同一个卡牌类IP,可以衍生出那么多个不同的游戏APP,欧耿鑫的解释是,这些不同的APP可以用来划分客群,让玩家们获得更好的感受。
按他的说法,玩家应该先去玩类似微信小游戏的快节奏版本,了解游戏的机制和基础技能。在充分接受这款游戏的核心机制以后,再接触核心的《三国杀Online》《三国杀移动版》《新三国杀》,“三个产品线的三管齐下,除了能有一个循序渐进的过程,还能加大三国杀IP的曝光量”。
这其中,在十周年的特殊节点推出的《新三国杀》具有重要的历史意义,不仅加入了3D、AR、宠物等传统游戏的玩法,还加入了“武将技能突破模式”——为武将设置一个类似关卡目标的任务,玩家完成后,会提升武将的技能或解锁新的技能。
很不幸,玩家们并没能理解策划们的良苦用心,反而将不同版本最大的区别概括为氪金程度。在百度三国杀吧里,有网友提问三个版本,该选哪个?
下面的回答中对不同版本的评价简单粗暴:
“微氪十周年,巨氪手杀,不氪别玩。”
盯紧大学生们
“三国杀”系列的用户构成很有意思。
2021年的China Joy上,游卡网络副总裁、“三国杀”创始人之一杜彬称,“三国杀”的主力玩家在18-28岁之间,占比达69%,“年龄构成来看,这么多年整体并没有大变化”。
在游戏行业内,5年是公认的游戏代际替换年限,喜欢《传奇》和喜欢《阴阳师》的两代人,很难在游戏偏好上玩到一起,但“三国杀”打破了这个代际之间的界限。
从系列之初的纸质版卡牌,再到如今桌游、PC网游、手游全覆盖的庞大产品线,时代不管如何变化,为“三国杀”提供流量的一直是年轻人。
时间回到2006年,黄恺在西直门附近的吧里体验过桌游的魅力后,借鉴“Bang”的核心机制和部分卡牌规则,设计出了最初的“三国杀”雏形——由于角色参考了游戏“三国无双”系列,这款桌游被他命名为“三国无双杀”。
那时,他还是中国传媒大学的大二学生,没有做生意的经验和启动资金,在打印店做好的卡牌,只能放到淘宝上去卖。
正在清华读博士的杜彬,是黄恺的第8个或第9个客户。
杜彬读的是计算机系,但商业嗅觉却极其敏锐,他主动找到黄恺,提出要入伙一起把生意做大,后来回忆起这段往事,杜彬说“我可能是国内第一千个或者第一千零一个知道桌游的人,这并不重要,但是我是第一个把它的价值挖掘出来的人。”
在他提议下,“三国无双杀”更名为“三国杀”,也开始推出小规模试水的“推广版”。2008年1月,游卡桌游公司正式成立,杜彬任CEO,首先发售的5000套几乎都靠手工制作,为了节省人力,他把退休的母亲喊来帮忙切纸牌。
公司成立一个月后,他们展开了第一次地推活动,到清华隔壁的北大卖了3天三国杀纸牌,总销量130多副,直接影响了那年北大数学系学生们的考试——当时数学系一位老师很爱玩三国杀,考试的时候出了一道题,要求写出三国杀的数理模型。
杜彬知道以后很兴奋,第一件事就是“让我们的团队赶紧做出一个数学模型来。”
从那时起,游卡就始终对高校情有独钟。
截至2021年,游卡已与全国500多所高校的桌游社团达成合作,有的学校甚至还会开展和“三国杀”有关的选修课。
铁打的“三国杀”,流水的年轻人。
老而不死
但游卡靠年轻人赚钱的套路,正在失灵。
大的层面来看,国内的桌游市场在这十几年间井喷式发展。艾媒咨询数据显示,其市场规模将从2019年的破百亿元,增长至2021年的170.2亿元。而创享投资的投资人结合艾媒数据的相关报告和业内访谈综合测算,得出的结论是截至2021年5月,国内的桌游市场达200亿元。
这个数据,在2014年才刚刚突破10亿。
但细分到不同品类上,刨除近年爆火的剧本杀,剩下的所有桌游们加起来,也只占这块市场的15%,也就是30亿左右。
当初“三国杀”桌游能快速进入高校,除了游戏本身确实不错,有很强的社交性、重复可玩,也占了诸多不可复现的时代红利——桌游市场缺乏产品,许多高校禁止大一新生带电脑,手游的社交属性还不够强。
天时地利有时尽。
2017年狼人杀出圈爆火,三国杀的桌游霸主地位开始遭受威胁,2019年在资本助推下剧本杀快速形成风口,沉浸式的游戏体验很快成为年轻人新的社交选择,桌游行业迎来剧烈的变化。
在移动游戏的战场上,“三国杀”面临的挑战只多不少。2016年,网易的《阴阳师》掀起移动卡牌游戏的新篇章,更简化的战斗系统,更美观的立绘和更广泛的玩家市场,直接带动大批厂商跟风模仿。
飞驰的后辈们擦身而过,“三国杀”踽踽独行。
实际上,游卡的网游化和手游化尝试非常早,2009年,杭州边锋就开始和游卡合作推进“三国杀”的网游化工作,并在该年末推出《三国杀online》。2011年,边锋收购游卡桌游,同年基于JAVA系统的《三国杀手机版》上线。
那两年,“三国杀”风光无限,桌游版一年就卖了5000万,俱乐部联赛、王者之战、全国高校联赛等赛事也四处开花,热度不输腾讯的两大王牌游戏DNF和CF。
可随着后起之秀们不断崛起,这个昔日被当作桌游代名词的名字,越来越沉寂、遥远。
三个平台加起来过亿的月流水,听起来唬人,但放在如今的游戏市场不过平平——运营五年,老玩家大量流失之后,《阴阳师》2022年1月也依然有2.2亿的月流水,至于手游领域的怪物级选手《原神》,拉出来和老前辈们比数据就有点欺负人了。
虽然游卡不断强调“三国杀”还只是青年,在少年人们面前,终究还是老了。
蒸蒸日上
虽然产品线越铺越广,但“三国杀”系列的核心机制十来年来并没有发生变化。
无论《三国杀Online》《三国杀移动版》还是《新三国杀》,游卡只是不断在原有的基础上增加新的东西——比如翻了十倍的武将,越来越长的技能说明,以及越来越复杂的游戏系统。
《三国杀Online》几乎每个版本都有版本神将,成为玩家们主要使用的阵容,而随后的版本,则会延续继续造神,顺便猛砍老版本神将的无限循环,庞大的武将库,能频繁出场的武将却只有寥寥数十个。
有媒体研究过,在三国杀中,最强武将和最弱武将的胜率差有25%,而一个非常优秀的玩家胜率是46%左右,即所有身份加起来是46%。可见,最强与最弱的胜差会极大地影响到游戏体验。
在被差评攻陷的“三国杀”Steam版测评区,平衡性差这个卡牌类游戏最大的忌讳,却只占玩家们控诉的很小一部分,更多的怒火指向策划,甚至游卡这家公司本身。
玩家和游卡之间的第一次大规模冲突,发生于2018年,也是游卡和“三国杀”的十周年。彼时,游卡推出了《新三国杀》,并宣布这款游戏与过往的《三国杀Online》数据不互通,这就意味着,不论老玩家在《三国杀OL》里有多少武将、道具,花了多少真金白银,在十周年新服中,都只能从头来过,再“氪”一遍。
另外,当时游卡计划《三国杀OL》将和Flash引擎一同停止运营,无论动机如何,结果上都会逼着玩家换服,有玩家担心关服向客服咨询,只换来客服一句“我们的游戏正在蒸蒸日上哦”的敷衍。
在官方论坛发起的《三国杀新区意见建议收集贴》中,愤怒的老玩家们写了足足53页的长贴,其中一位ID为“游离比我小4岁”的玩家直接指出了问题的核心:
“数据不互通表示玩家花钱买的所谓‘永久的’道具都是假的、收集到的‘永久的’战功/秀/皮肤/包裹道具也都是假的,到新服还会有人充钱?还会有人认真玩?当玩家都是睿智吗?”
这场风波,以游卡处罚相应策划,并保证不会停止《三国杀Online》运营告一段落。冲突的种子已经种下,随后的“50万阴兵”“天牢令”和2021年11月的“长衫门”,加剧了玩家对游卡的不信任,也让双方之间的关系越发紧张。
“三国杀”Steam版的差评狂潮,只不过是玩家们又一次集体表态的窗口,如果游卡不能突破运营上的傲慢,以及单一IP带来的“吃老本”心态,被时代和玩家们抛弃只是时间问题。
《人物》2011年第2期刊登过一篇文章,标题叫《杜彬与黄恺的“三国杀”奇缘》,文章末尾,作者动情地写道:
桌游这条路,杜彬和黄恺会用一生去热爱。
如今,三个人的小作坊,经历过和边锋的合作、被吞并,又独立出走,已经生长为2000多号员工的大公司。黄恺和游卡草创之初的另一位功臣李由,都悄然隐退已久,只剩下杜彬还在四处奔走。
一切都变了。
Flash彻底退役,我的黄金矿工还能继续玩吗?
再忆游戏点滴,重拾昨日纯粹~
本文为游文杂谈社《4399夕拾录》专题的第七篇,每周五更新。
感谢小伙伴们的关注和支持,日后会更加努力哒!
今天,在火狐等浏览器中搜索4399打开一款Flash游戏时,突然弹出个界面跟我说:“当前浏览器已经无法运行Flash”。
经火狐的“仙人指路”,我们在360浏览器的极速模式下才找到了一点熟悉的感觉。而且不知是不是我电脑的问题,像《黄金矿工》这样操作简单的小游戏还能正常玩,但换成个操作稍微复杂些的就不能很好的控制了。
比如在玩《炎龙传说》时,角色会莫名其妙的卡在某个操作内不能进行其它操作。
先抛开这些,要问火狐突然不支持Flash插件的原因,其实三年前就有了答案——2017年7月份,Adobe就正式宣布Flash将于三年内逐步退出苹果、Facebook、谷歌、微软和Mozilla的合作。
而截至在今天的零点,Flash已经彻底退出舞台。
创作热潮
较早用到电脑的人们应该会很眼熟这个红色的“F”,即使没有从事于Flash开发的用户,也一定不会对《哐哐日记》感到陌生。
那个幽默搞笑又极具讽刺意味的短片系列,一经播出就得到了70、80后青年们疯狂的追捧和喜爱。《哐哐日记》、《喜洋洋与灰太狼》等经典动画的创作平台都是Flash。
Flash早在1997年就进入了中国,在那个拨号上网、网费按MB计算的时代,Flash绝对是神一般的存在。Flash一出现就用图片矢量储存的方式将原需要几MB的大图浓缩成一张小图,大幅降低了流量计费并提高了传输效率,人们也可以进行无损放大。
此外,极低的创作门槛也吸引不少业余爱好者入门开始了Flash动画的制作,为Flash登基奠定了基础。
真正掀起国内Flash动画创作热潮的是“边城浪子”,1999年一个ID为“边城浪子”的网友提出了“闪客”(“Flash”直译为“闪光、闪耀”,“客”是当时常用的后缀)的概念,创办了“闪客帝国”网站促进创作者们学习交流。
《闪客快打》的游戏名正源于此。按时间来推,《哐哐日记》的创作者皮三应该也是这个时期的创作者之一。在“闪客帝国”创办之后Flash动画被玩出了花,《小小》系列、《新长征路上的摇滚》、《大话三国》等优秀作品如雨后春笋般涌现。
看着他们在小小的互联网世界闪闪发光,越来越多的业余爱好者也转身转身投入到创作行列中,Flash的题材也不再限于动画或是MV开始创新出游戏,一时间《黄金矿工》、《魔塔》、《梦游先生》等经典游戏一个接一个的冒出来。
在当时,设计师们多以能做得一手好的Flash引以自傲,即使该职位完全没有相关内容面试者们也要带一句“会做Flash”。
2005年,Flash落入Adobe之手,Adobe在Flash创立十周年时骄傲的宣布“Adobe Flash 已经安装在近98%的互联网台式机上”。无疑,这颗巨星已然迈入了全盛时期。
巨星陨落
2008年乔布斯推出了手机3G时代,Adobe看准了这个时机想要重现电脑端的成功。但Flash时钟是PC端的产物,进入手机端不久就暴露出越来越多的弊端,更重要的是还要强行分苹果一杯羹——用户每通过Falsh进行播放,苹果都要交一份钱。
这苹果自然不能忍,很快就进行了“封杀”:2010年乔布斯向Flash提交了一份公开信,指责其存在太多性能和安全问题,宣布IOS不再支持Flash。乔布斯的“封杀”给了Flash致命一击,一年后Flash也直接宣布退出了移动市场。
另一方面,Adobe Flash与重庆重橙网络科技合作后也为国人用户添了不少堵。打开电脑时弹出的“FF新鲜事”或“FF新推荐”几乎烦透了绝大多数用户,败坏了Flash留给玩家们的最后一点好感。
与此同时,Flash的替代品HTML5也逐步开始推进,其全新功能和跨平台开源特色得到了诸多厂商的喜爱。越来越多平台开始转换为HTML5,Flash下台已是大势所趋。
2016年4月,“2015年十大最危险漏洞全部出自Adobe Flash”的报告给了 Adobe Flash 最后一击,不得不尽快宣布退役。
还能从哪回忆这些Flash小游戏?
现如今Flash已经不再更新彻底退役,如果在未来某天的360浏览器版本也不能支持最后版本的Flash插件了的话,我们还有什么方法可以玩到这些小游戏呢?
就笔者目前能找到的有以下三个方法,应该是可以满足玩家们90%以上的需求了。
游戏原网站
虽然4399也将一部分小游戏进行了HTML5转码,但小游戏数量实属庞大实在是难以瓦全,一些不盈利的他们也懒得浪费精力。所以我们可以尝试去找一些游戏的原网站,比如Nitrome,自今年五月份,Nitrome就开始将原有的Flash游戏进行HTML5移植了。
Nitrome一直被称为“Flash游戏之神”,我们小时侯玩的《坏蛋冰淇淋》系列、《肥猫天使》系列、《双箭头》系列、《入侵怪兽公司》等经典Flash游戏均是出自这家公司。目前他们已经成功移植了7款经典游戏,玩家们还可以在手机网页上体验他们(亲测按键有点不舒服,如果改成轮盘应该会更好~)。
此外,《炎龙传说》系列的作者也于2018年开始了最新版的开发,玩不到旧版本我们还可以等等新版本嘛~
BlueMaxima's Flashpoint
Flashpoint是BlueMaxima于2018年1月启动的一个项目,旨在于保留Flash消失之前的经典内容。后来逐渐发展成为一个国际项目,加入了100多个参与者。目前已经保存了70000多个经典Flash游戏和8000多个动画。
玩家进入下载选择界面时会出现四个下载项目,选四个里面中右上角的那个即可。内容量达532G,非常丰富。
Flash大厅
Adobe 宣布退役的并不是 Flash 而是 Flash player(只是前者的一部分),所以Flash并没有真正的退役。玩家可以从Flash Player下载界面选择“大厅版”,将4399上不能玩的Flash游戏网址复制到大厅中就可以玩了。
这是一种傻瓜式玩法,操作非常简单,但要注意的是它们的合作方仍然会给你投入大量广告。
结语
尽管现在Flash因为安全、广告、不实用等问题遭到网友们的唾骂,但在当年对那些“闪客”们来说这就是全部的精力投入。夜幕降临时,他们便开始了闪光,为没有历史的互联网创造了历史。
我们不必过多担心那些曾带给我们激动、快乐的东西会消失不见,技术被淘汰了,但那些的作品和历史却永远留香。指不定哪天,你又会从新的作品里嗅到似曾相识的清香。
点歌台看过的大话三国,你是否还有印象
2000年一部《大话三国》风靡整个网络
作为一名90后,小编甚是惭愧,那时连一台电脑也没有
当时的《大话三国》是通过【点歌台】看的
它的作者是SHOWGOOD,现在已转行做幼教产品
说道showgood不得不提到的还有《小兵的故事》,以后也会写道
动画里时常会听到潮汕话旁白,听起来也很有味道
刘备专属口头禅:一人一次,人人有份,永不落空
蟑螂头吕布,小胡子刘备,大胡子曹操
每个角色都非常的有意思,逗人发笑
在当年flash盛行一时,大话三国一路陪伴着我们度过了美好的童年
致敬青春!致敬童年!
以上纯属瞎搞。。。。。。。。
喜欢的点赞哦,或者在下方评论
Python 三国人物数据快速采集极简方法汇总
作为一名数据分析师而并非开发工程师,需要掌握的爬虫必备的知识内容,能获取需要的数据即可,如果需要更专业的基于爬虫工程师的内容请浏览 『Scrapy 爬虫框架』部分内容。
以最最最基础的《三国志 13》人物数据采集举例了解和掌握基础的爬虫技能和数据整理技巧。
整套学习自学教程中应用的数据都是《三國志》、《真·三國無雙》系列游戏中的内容。
数据目标
武将一覧 - 三国志13 攻略 WIKI
我们要获取该页面中全部的武将数据信息。
爬虫 Requests 几种方式
基本使用方法
"""例"""from urllib import requestresponse = request.urlopen(r'https://sangokushi13wiki.wiki.fc2.com/wiki/武将一覧') #返回状态 200证明访问成功print("返回状态码: " str(response.status))返回状态码: 200
Request 静态页面数据获取
静态网页 的网址形式通常是以 .htm、.html、.shtml、.xml 等为后缀。一般来说是最简单的HTML网页,服务器端和客户端是一样的。在 HTML 格式的网页上也可以出现各种动态的效果,如 GIF 格式的动画、FLASH、滚动字母等,这些动态效果只是视觉上的。
我们本地抓取的目标就是静态页面。
使用 request() 来包装请求,再通过 urlopen() 获取页面,俗称伪装。让服务器知道我们是通过浏览器来访问的页面,有些情况可能会被直接毙掉。
# 加载第三方使用插件和基础配置import requestsfrom bs4 import BeautifulSoupimport pandas as pdimport randomimport warningswarnings.filterwarnings("ignore")# 浏览器 header USER_AGENT_LIST = [ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1", "Mozilla/5.0 (X11; CrOS i686 2268.111.0) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11",]# 使用本地代理 可以使用也可以不使用proxies = { "http": "http://127.0.0.1:19180", "https": "https://127.0.0.1:19180"}headers = { "User-Agent":random.choice(USER_AGENT_LIST),}# https://sangokushi13wiki.wiki.fc2.com/wiki/武将一覧url = "https://sangokushi13wiki.wiki.fc2.com/wiki/武将一覧"html = requests.get(url,headers=headers,proxies=proxies,verify=False)soup = BeautifulSoup(html.text,"lxml")soup
Request 动态页面数据获取
动态网页是以 .asp、.jsp、.php、.perl、.cgi 等形式为后缀。动态网页与网页上的各种动画、滚动字幕等视觉上的动态效果没有直接关系,动态网页也可以是纯文字内容的,也可以是包含各种动画的内容,这些只是网页具体内容的表现形式,无论网页是否具有动态效果,采用动态网站技术生成的网页都称为动态网页。动态网站也可以采用静动结合的原则,适合采用动态网页的地方用动态网页,如果必要使用静态网页,则可以考虑用静态网页的方法来实现,在同一个网站上,动态网页内容和静态网页内容同时存在也是很常见的事情。
import requestsfrom bs4 import BeautifulSoupurl = "http://news.cqcoal.com/blank/nl.jsp?tid=238"html = requests.get(url)soup = BeautifulSoup(html.text,"lxml")soup.text
抓取该网页看不到任何的信息证明是动态网页,正确抓取方法如下。
import urllibimport urllib.requestimport requestsurl = "http://news.cqcoal.com/manage/newsaction.do?method:webListPageNewsArchivesByTypeid"post_param = {'pageNum':'1', 'pageSize':'20', 'jsonStr':'{"typeid":"238"}'}return_data = requests.post(url,data =post_param)content=return_data.textcontent
总结来说:页面内容变了网址也会跟着变基本都是静态网页,反之是动态网页。
Request 异常处理
from urllib.request import Request, urlopenfrom urllib.error import URLError, HTTPErrorreq = Request("http://www.111cn.net/")try: response = urlopen(req)except HTTPError as e: print('服务器无法满足请求.') print('错误代码: ', e.code)except URLError as e: print('不能访问服务器.') print('原因: ', e.reason)else: print("OK!") print(response.read().decode("utf8"))不能访问服务器.原因: [Errno 11001] getaddrinfo failed
Request HTTP认证
import urllib.request# 私密代理授权的账户user = "user_name"# 私密代理授权的密码passwd = "uesr_password"# 代理IP地址 比如可以使用百度西刺代理随便选择即可proxyserver = "177.87.168.97:53281"# 1. 构建一个密码管理对象,用来保存需要处理的用户名和密码passwdmgr = urllib.request.HTTPPasswordMgrWithDefaultRealm()# 2. 添加账户信息,第一个参数realm是与远程服务器相关的域信息,一般没人管它都是写None,后面三个参数分别是 代理服务器、用户名、密码passwdmgr.add_password(None, proxyserver, user, passwd)# 3. 构建一个代理基础用户名/密码验证的ProxyBasicAuthHandler处理器对象,参数是创建的密码管理对象# 注意,这里不再使用普通ProxyHandler类了proxyauth_handler = urllib.request.ProxyBasicAuthHandler(passwdmgr)# 4. 通过 build_opener()方法使用这些代理Handler对象,创建自定义opener对象,参数包括构建的 proxy_handler 和 proxyauth_handleropener = urllib.request.build_opener(proxyauth_handler)# 5. 构造Request 请求request = urllib.request.Request("http://bbs.pinggu.org/")# 6. 使用自定义opener发送请求response = opener.open(request)# 7. 打印响应内容print (response.read())
ROBOT协议
目标网址后加/robots.txt,例如:京东官网机器人协议
第一个的意思就是说对于所有的爬虫,不能爬取在/?开头的路径,也不能访问和/pop/*.html 匹配的路径。 后面四个用户代理的爬虫不允许访问任何资源。
所以Robots协议的基本语法如下: - User-agent: 这里是爬虫的名字。 - Disallow: /该爬虫不允许访问的内容。
爬虫的网页抓取
爬虫的用途
实现浏览器的功能,通过制定的URL,直接返回用户所需要的数据。
一般步骤:
查找域名对应的IP地址 (比如:119.75.217.109是哪个网站?)。
向对应的IP地址发送get或者post请求。
服务器相应结果200,返回网页内容。
开始抓你想要的东西吧。
网页分析
获取对应内容之后进行分析,其实就需要对一个文本进行处理,把你需要的内容从网页中的代码中提取出来的过程。BeautifulSoup 可实现惯用的文档导航、查找、修改文档功能。如果 lib 文件夹下没有 BeautifulSoup 的使用命令行安装即可。
pip install BeautifulSoup
数据提取
# 想要抓取我们需要的东西需要进行定位,寻找到标志from bs4 import BeautifulSoupsoup = BeautifulSoup('<meta content="all" name="robots" />',"html.parser")tag=soup.meta# tag的类别type(tag)bs4.element.Tag# tag的name属性tag.name'meta'# attributes属性tag.attrs{'content': 'all', 'name': 'robots'}# BeautifulSoup属性type(soup)>>> bs4.BeautifulSoupsoup.name'[document]'# 字符串的提取markup='<b><a href="http://house.people.com.cn/" target="_blank">房产</a></b>'soup=BeautifulSoup(markup,"lxml")text=soup.b.stringtext'房产'type(text)bs4.element.NavigableString
人物列表数据解析
# 加载第三方使用插件和基础配置import requestsfrom bs4 import BeautifulSoupimport pandas as pdimport randomimport warningswarnings.filterwarnings("ignore")# 浏览器 header USER_AGENT_LIST = [ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1", "Mozilla/5.0 (X11; CrOS i686 2268.111.0) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11",]headers = { "User-Agent":random.choice(USER_AGENT_LIST),}# https://sangokushi13wiki.wiki.fc2.com/wiki/武将一覧url = "https://sangokushi13wiki.wiki.fc2.com/wiki/武将一覧"html = requests.get(url,headers=headers,verify=False)soup = BeautifulSoup(html.text,"lxml")soup
# 由于是多个表格要一个一个处理,将数据填进列表data_list = []for data in soup.find_all("table",class_="table"): data_list.append(data)# 遍历循环页面数据提取result_data_list = []for num in range(len(data_list)): for i in data_list[num].find_all("tr"): try: one_data = [d.text for d in i.find_all("td")] one_url = ["https://sangokushi13wiki.wiki.fc2.com" i.find_all("td")[1].a["href"]] result_data = one_data one_url result_data_list.append(result_data) except: pass# 数据写入表格df = pd.DataFrame(result_data_list)df.columns = ["相性","名前","読み","性別","生年","登場","没年","統率","武力","知力","政治","槍兵","騎兵","弓兵","伝授特技","重臣特性","戦法","理想威名","url"]# 删除首行数据,重置索引df.drop(index=0,inplace=True)df.reset_index(drop=True,inplace=True)df
人物详情数据解析
根据刚抓取的人物列表数据,提取人物详情数据信息,从而构建完整的人物数据。
# 构建一个空的df数据框df_info = pd.DataFrame()for num in range(len(df)): # 获取每个人物的详情数据完整信息 url = df["url"][num] html = requests.get(url,headers=headers,proxies=proxies,verify=False) soup = BeautifulSoup(html.text,"lxml") # 由于是多个表格要一个一个处理,将数据填进列表 data_list = [] for data in soup.find_all("table",class_="table"): data_list.append(data) # 处理第一个表格数据 基本信息补全 title_list = [] for i in data_list[0].find_all("tr"): one_data = [d.text for d in i.find_all("th")] title_list.append(one_data) content_list = [] for i in data_list[0].find_all("tr"): one_data = [d.text for d in i.find_all("td")] content_list.append(one_data) # 补全人物基本信息 df_temp1_col = [i for i in title_list[0] if i != ""] # 获取字段信息 df_temp1_content = ["-"] content_list[1] if len(content_list[1])<11 else content_list[1] # 判断数据不足不全信息 df_temp_1 = pd.DataFrame(df_temp1_content).T df_temp_1.columns = df_temp1_col # 补全人物列传信息 df_temp2_col = [i for i in title_list[4] if i != ""] # 获取字段信息 df_temp2_content = content_list[5] # 获取列传信息 df_temp_2 = pd.DataFrame(df_temp2_content).T df_temp_2.columns = df_temp2_col # 处理第三个表格数据 特技数据 title_list = [] for i in data_list[2].find_all("tr"): one_data = [d.text for d in i.find_all("th")] title_list.append(one_data) content_list = [] for i in data_list[2].find_all("tr"): one_data = [d.text for d in i.find_all("td")] content_list.append(one_data) # 不抓取最后3个统计选项数据 df_temp3_col = title_list[0][:-3] df_temp3_content = content_list[1][:-3] df_temp_3 = pd.DataFrame(df_temp3_content).T df_temp_3.columns = df_temp3_col # 处理第四个表格数据 性格・嗜好 title_list = [] for i in data_list[3].find_all("tr"): one_data = [d.text for d in i.find_all("th")] title_list.append(one_data) content_list = [] for i in data_list[3].find_all("tr"): one_data = [d.text for d in i.find_all("td")] content_list.append(one_data) # 不抓取最后3个统计选项数据 df_temp4_col = title_list[0] df_temp4_content = content_list[1] df_temp_4 = pd.DataFrame(df_temp4_content).T df_temp_4.columns = df_temp4_col # 横向拼接 result_temp_1 = pd.concat([ df_temp_1,df_temp_2,df_temp_3,df_temp_4 ], axis=1) result_temp_1["名前"] = df["名前"][num] df_info = df_info.append(result_temp_1)df_info
Xpath 应用举例
XPath 是一门在 XML 文档中查找信息的语言。XPath 可用来在 XML 文档中对元素和属性进行遍历。XPath 是 W3C XSLT 标准的主要元素,并且 XQuery 和 XPointer 都构建于 XPath 表达之上。
四种标签的使用方法
// 双斜杠 定位根节点,会对全文进行扫描,在文档中选取所有符合条件的内容,以列表的形式返回。
/ 单斜杠 寻找当前标签路径的下一层路径标签或者对当前路标签内容进行操作
/text() 获取当前路径下的文本内容
/@xxxx 提取当前路径下标签的属性值
| 可选符 使用|可选取若干个路径 如//p | //div 即在当前路径下选取所有符合条件的p标签和div标签。
. 点 用来选取当前节点
.. 双点 选取当前节点的父节点
from lxml import etreehtml="""<!DOCTYPE html><html><head lang="en"> <title>test</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/></head><body><div id="content"> <ul id="ul"> <li>NO.1</li> <li>NO.2</li> <li>NO.3</li> </ul> <ul id="ul2"> <li>one</li> <li>two</li> </ul></div><div id="url"> <a href="http://www.crossgate.com" title="crossgate">crossgate</a> <a href="http://www.pinggu.org" title="pinggu">pinggu</a></div></body></html>"""#这里使用id属性来定位哪个div和ul被匹配 使用text()获取文本内容selector=etree.HTML(html)content=selector.xpath('//div[@id="content"]/ul[@id="ul"]/li/text()') for i in content: print (i)
#这里使用//从全文中定位符合条件的a标签,使用“@标签属性”获取a便签的href属性值con=selector.xpath('//a/@href') for i in con: print (i)
#使用绝对路径 #使用相对路径定位 两者效果是一样的con=selector.xpath('/html/body/div/a/@title') print (len(con))print (con[0],con[1])