三國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])