復(fù)制一個維基百科!—— 維基技術(shù)梳理

復(fù)制一個維基百科!—— 維基技術(shù)梳理

了解 WikiMedia

說到維基百科 不得談到一個組織 — 維基媒體wikimedia。

企業(yè)家吉米·威爾士和軟件設(shè)計師拉里·桑格創(chuàng)立了維基百科(wikipedia),于2001年1月15日發(fā)布,目標(biāo)是向全人類提供自由的百科全書。最初資助的維基百科是由企業(yè)家威爾士的一家個人公司提供資助,隨著維基百科的人氣直線上升,需要消耗的資金越來越多,已經(jīng)無法提供足夠的錢維持維基百科的發(fā)展。創(chuàng)始人們決定以慈善模式運營維基百科。于是 維基媒體基金會(wikimedia foundation)應(yīng)運而生。時間點-2003年6月20日。

維基媒體基金會托管了維基百科,并發(fā)布了維基媒體運動(wikimedia movement)即:一系列組織和活動基于共享價值觀圍繞維基媒體的網(wǎng)站和項目進行運轉(zhuǎn)。獲得了眾多有情懷的公司以及個人的資助,包括,谷歌,亞馬遜,巴菲特等等。

wikimedia擁有眾多項目,包括維基百科,維基新聞,維基圖書館,維基物種等等。其中一個是維基百科所使用的基礎(chǔ)軟件 mediawiki。

1537173621224.png

MediaWiki

介紹

MediaWiki采用PHP編程語言寫成,使用MySQL、MariaDB等關(guān)系數(shù)據(jù)庫管理系統(tǒng)。MediaWiki軟件最初是為維基百科開發(fā)的,目前維基媒體基金會的所有項目乃至眾多wiki網(wǎng)站皆采用了這一軟件。我們復(fù)制維基百科的關(guān)鍵。

安裝

最好采用最新1.31 否則擴展插件安裝比較麻煩

https://www.mediawiki.org/wiki/Manual:Installation_guide

記得勾選上擴展程序和圖像和文件上傳-啟用即時共享資源

要求

web server:apache or iis

PHP version 7.0.0 or later

Database Server, one of the following:

步驟

  1. 下載 MediaWiki并將其解壓到服務(wù)器上可被Web服務(wù)器的目錄
  2. 訪問http://domain/directory/mw-config/index.php根據(jù)提示完成配置
  3. 將配置文件 LocalSettings.php放到wiki根目錄,所有的配置都在這個文件中配置

配置

文件 LocalSettings.php包括用戶權(quán)限,網(wǎng)站名稱,標(biāo)志,數(shù)據(jù)庫配置,文件上傳路徑,網(wǎng)站語言 等默認(rèn)配置,插件相關(guān)配置加在LocalSettings.php 末尾。

重要配置:

  1. $wgUseInstantCommons = true; 允許使用https://commons.wikimedia.org(維基圖片集),不開會導(dǎo)致圖片連接轉(zhuǎn)為內(nèi)聯(lián)。
  2. $wgLanguageCode = "ja";ja為對應(yīng)wiki語言,如果英語(en)wgLanguageCode為日語(ja),會導(dǎo)致腳本出錯。

導(dǎo)入導(dǎo)出

/maintenance/exportDump.php

/maintenance/importDump.php

插件

查看已經(jīng)安裝插件:https://yourwiki/wiki/Special:Version

個別插件需要使用到數(shù)據(jù)庫創(chuàng)建表,運行update.php 會讀取配置問文件,更新表結(jié)構(gòu)

Wiki Family

維基百科各個語言是單獨的一個mediawiki實例,為了能協(xié)同工作,提出了wiki family 的概念。

Multiple wikis sharing common resources

可以共享插件

https://www.mediawiki.org/wiki/Manual:Wiki_family

WikiText

介紹

WikiText是一種輕量級標(biāo)記語言,類似于markdown,用于撰寫Wiki網(wǎng)頁,它在HTML基礎(chǔ)上進行簡化,使不會使用html的人也能寫出格式清晰好看的頁面,最終是由mediawiki轉(zhuǎn)換成HTML,由瀏覽器進行渲染。

基本語法

https://meta.wikimedia.org/wiki/Help:Wikitext_examples

數(shù)據(jù)結(jié)構(gòu)

mediawiki提供管理組織公共內(nèi)容的基本結(jié)構(gòu),為了區(qū)分詞條,用命名空間加冒號:來區(qū)分。

查看方式Help:Namespaces

(Main/Article) namespaces 編號為0,搜索的時候不必輸入任何命名空間,也就是我們正常所說的詞條

Template:{{templateName|arguments}}https://www.mediawiki.org/wiki/Help:Templates/zh

Category:類別 是一個集合(類似于月份)https://commons.wikimedia.org/wiki/Category:Months

Module:lua腳本,增強Template 實現(xiàn)更復(fù)雜的功能

Project: 不是百科全書的一部分,記錄政策和指南

Special:mediawiki特殊功能,比如導(dǎo)入導(dǎo)出等工具,報告等等

復(fù)制維基百科

dumps

維基會經(jīng)常會發(fā)布一些備份文件的轉(zhuǎn)儲提供給需要的人。網(wǎng)址:https://dumps.wikimedia.org/

提供內(nèi)容包括:

  • 部分?jǐn)?shù)據(jù)庫表備份
  • mediawiki exportDump 備份
  • 靜態(tài)頁面 (2008年之前)
  • 圖片服務(wù)器(151T)
  • 等...

根據(jù)需要下載指定語言的備份文件,有時候經(jīng)常出現(xiàn)Template或者Mudule等數(shù)據(jù)不全。所以最好也下載commons的備份文件。

數(shù)據(jù)庫配置修改

默認(rèn)單個插入語句不能超過1M,英文詞條比較大,修改為64M

SET GLOBAL max_allowed_packet = 64M;

修改最大連接數(shù),提高插入效率

SET GLOBAL max_connections = 500;

在my.cnf中

修改數(shù)據(jù)庫最大核心數(shù)和innodb緩沖池大小

thread_concurrency = 32
innodb_buffer_pool_size = 1024M

php函數(shù)嵌套層數(shù)修改

默認(rèn)100 ,部分插件會棧溢出

/etc/php.ini文件

在最后加上xdebug.max_nesting_level = 600

導(dǎo)入

下好備份文件后,使用mediawiki自帶的導(dǎo)入工具導(dǎo)入。

php /var/www/html/wiki/maintenance/importDump.php < /home/yuwenhao/wikidumps/data/Category.xml

單個進程速度很慢,將大文件拆分,然后批量插入

將文件按照namespace拆分

_1_extract_namespaces_from_wikitext.py

包裹插入必須要的標(biāo)簽

_2_wrap_mediawiki_for_page.py

按照將xml拆分成指定個數(shù),并包裹插入必須要的標(biāo)簽

_3_split_big_xml_for_import_dump.py

批量執(zhí)行插入,日志為相同目錄相同名稱 *.log

_4_run_all_mediawiki_dump_file.py

確保磁盤空間足夠,在導(dǎo)入過程中如果空間不夠,wikitext會清空一些表,以保證插入。

wikitext--->html

既然可以復(fù)制維基百科,為何用要wikitext轉(zhuǎn)html:

  • 空間問題
  • 數(shù)據(jù)庫壓力
  • 導(dǎo)入時間問題
  • 方便清洗

可能遇到的坑:

  • 多語言問題:下載langlinks
  • 注意別忘了對內(nèi)容進行url解碼

parsoid

介紹

mediawiki官方團隊推出的html<-->wikitext互轉(zhuǎn)應(yīng)用,基于nodejs。

img

安裝&配置

https://www.mediawiki.org/wiki/Parsoid/Setup#RedHat/CentOS

注意在配置文件中配置mediawiki的api URL

使用

1537182346108.png

壓力測試:

115.231.226.254

32個邏輯CPU 64G內(nèi)存

200個線程 20次循環(huán)

8.2個每秒

1537178455894.png

需要注意

? 清洗parsoid原始數(shù)據(jù)

?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • MediaWiki是一套基于網(wǎng)絡(luò)的Wiki引擎,維基媒體基金會的所有項目乃至眾多wiki網(wǎng)站皆采用了這一軟件。Me...
    懸崖邊的半只腳閱讀 924評論 0 0
  • git[編輯]維基百科,自由的百科全書 git gitweb,git的一個Web界面。 原作者林納斯·托瓦茲 開發(fā)...
    半片殘楓閱讀 502評論 0 0
  • # Python 資源大全中文版 我想很多程序員應(yīng)該記得 GitHub 上有一個 Awesome - XXX 系列...
    小邁克閱讀 3,127評論 1 3
  • 一個周又結(jié)束了,大寶的考試還有一周時間。本來和孩子爸商量著,他督促著大寶復(fù)習(xí)。不督促不行,因為現(xiàn)在的孩子(可能這么...
    明懿媽媽閱讀 147評論 0 0
  • 前天開始重啟跑步,跑了1.3公里。昨天早上趁熱打鐵跑了1.6公里。今天事情比較多,一度擔(dān)心要錯過跑步的機會了,但終...
    子軒新傳閱讀 319評論 0 2

友情鏈接更多精彩內(nèi)容