Címke: programok

Avagy hogyan migráltam a webni.innen.hu tartalmát erre a WordPress oldalra? Ebben a bejegyzésben a költöztetés első lépéséről olvashatsz: milyen, nem teljesen erre a feladatra kitalált technológiával exportáltam a régi oldalam tartalmait.

A webni.innen.hu költöztetése című bejegyzésben már nagyvonalakban leírtam a folyamatot, most egy jóval részletesebben mutatom be az első lépéseket. Ez a tapasztalatok azoknak lehetnek érdekesek, akik komplexebb weboldalak tartalmait szeretnék maguk is költöztetni.

Első lépés: a Zwiki-vel készült szájt szkrépelése

Strukturált tartalom előállítása

Egy webszájt költöztetésének első lépése, hogy a megszüntetésre ítélt szájton fent lévő tartalmat valamilyen strukturált formába öntsük. Mivel hogy esetünkben egy Zwiki tartalomkezelő rendszerrel készült szájtról beszélünk, a strukturált szón különös hangsúly van. A Wiki jellegű weboldalak egyik fő ismérve, hogy igen gyakran egy adott weblapon megjelenített összes tartalom egyetlen mezőben játszik: a Zwiki esetében például ugyanabban a sima szöveges mezőben kapott helyet az oldal tulajdonképpeni tartalma és az összes, az oldalhoz szó szerint hozzáfűzött komment. A rendszer pedig ebből az ömlesztett szövegből egy egyszerű speciális szövegformázási megoldás értelmezésével ismerte fel, hogy melyek a hozzászólások, és melyik az oldal szövegtörzse. Emiatt az oldal tartalmának strukturált letöltése során az én szkriptemnek is meg kellett találnia ezeket a jellegzetességeket, hogy külön el tudjam raktározni a szövegtörzset és az egyes hozzászólásokat.

Speciális markup formázás kezelése

További kihívás volt, hogy a Zwiki, a többi wiki rendszerrel egyetemben, egy speciális, a HTML-nél jóval egyszerűbb formázási nyelvet használ, amit egy mai tartalomkezelő rendszer nem ismer fel. Pl. a fejezetcímet és annak szintjét úgy lehetett renkívül egyszerűen meghatározni, hogy hány szóköz szerepelt egy sortörés után következő sor elején. Emiatt a szerkesztőfelületen a szerkesztőmezőből kinyert szöveggel nem sokat tudtam volna kezdeni, így a publikus felületről kellett leszedni a már HTML formátumban renderelt tartalmakat.

Letöltés emberi látogatók imitálásával

Mivel alaposan ismerek és használok egy pár web scraper / web automatizáló eszközt, ezért a költöztetésnél is erre – az eredendően az emberi látogatók imitálására épülő –technológiára esett a választásom. Mintha egy átlagos látogató végigkattintaná az összes elérhető weblapot, és lementené a saját meghajtójára. Ezzel a módszerrel nem kötött az, hogy milyen export formátumokat kínál fel a régi oldal (semmilyet), és milyen import formátumokat tesz elérhetővé az új CMS. Ezekkel az online marketing programozás-ról szóló bejegyzésemben is említett rendszerekkel bármelyik részét meg tudom szerezni egy weboldalnak, bármilyen reguláris kifejezéssel fel tudom dolgozni, továbbá tetszőleges formátumban le tudom menteni.

A letöltő (szkréper) szkript logikája

A Wiki alapú tartalomkezelő rendszereknek van egy jó tulajdonsága, ami nagyban megkönnyíti az általuk kezelt oldal összes tartalmának megtalálását: szinte mindegyiküknél van ugyanis egy tartalomjegyzék-szerű weblap, ahol az összes wikilap ki van listázva. Emiatt a letöltő szkriptnek nagyon egyszerű logikája lehetett: kinyitni a tartalomjegyzék-oldalt, leszedni az összes ottani linket, majd egyenként végigmenve a linkek listáján, megnyitni az összes lapot, megtalálni a html kódban a címet, a szülőoldalakat, a szövegtörzset és a hozzászólásokat, majd átkattintani változtatástörténet aloldalára, ahonnan a legutolsó módosítás dátumát lehetett megszerezni.

Kimenetként készült egy .csv fájl, ami az oldalhierarchiát tartalmazta: hogy melyik weblapnak melyek a szülőoldalai, egy másik .csv táblázat, ami a lapok főbb adatai (mint az eredeti URL, cím, módosítás dátuma) mellett a tulajdonképpeni szövegtörzset tartalmazta egy-egy sorban. Készült még egy fájl, ami soronként tartalmazta az összes hozzászólást, szintén főbb adataikkal, végül egy hibakeresésre szolgáló fájl, ahol ömlesztve volt a fent említett egyetlen szöveges mező tartalma a szövegtörzzsel és a hozzászólásokkal – ha netán valamit elrontottam volna az utófeldolgozásnál.

A szkript megvalósítása UBot Studio-val

Mivel az egész folyamat nem tűnt túl bonyolultnak, ezért az Ubot Studio-ra esett a választásom a megvalósításnál. Ez egy olyan vizuális programozási felületet ad, ami elsősorban kevés elágazással és egymásba ágyazott ciklussal rendelkező, lineáris logikájú szkripteknél tud jól működni. Ezt a szoftvert tulajdonképpen egy online marketingeseknek való autmatizáló rendszerként hírdetik, de a fejlesztésének eredeti célja a weboldalak szkrépelése és szpemmelése volt linkbeküldésekkel, hozzászólások elküldésével, stb. Ettől függetlenül még számos egyéb webes automatizációs feladatra használható. Egyik legjobb funkciója, hogy segítségével .exe formátumú, Windows operációs rendszereken egyszerűen futtatható programokat építhetünk. A botok futtatásához tehát nincsen szükség magára – az egyébként elég borsos árú – szoftverre. Mivel magyar nyelvterületen kb. rajtam kívül még egy-két helyen használták ezt a tartalomkezelő rendszert, ezért ezt az .exe fájlt nem raknám ki letölthető formában, de ha írsz nekem, vagy hozzászólsz ehhez a bejegyzéshez, akkor szívesen elküldöm, ha szükséged lenne a saját ZWiki oldalad költöztetéséhez erre.

A másik érdekes koncepciója az Ubot Studionak, hogy a vizuális programozási nézetből – ahol dobozokat húzkodsz, majd nyitsz meg a paraméterek beállítása céljából – át lehet váltani kódnézetbe is, ahol egy egyszerű szintaxisú kódnyelv segítségével is áttekintheted illetve szerkesztheted a szkriptedet. Egy kis türelemmel és az alábbi kód elolvasásával megértheted, hogy pontosan hogyan is épült fel ez a szkript:

 ui text box("Domain to scrape (without http(s)://):",#domain)
 allow javascript("No")
 navigate("{#domain}/FrontPage/contents","Wait")
 wait for browser event("Everything Loaded","")
 wait(5)
 set(#scraped,$scrape attribute(<class="formcontent">,"innerhtml"),"Global")
 add list to list(%pageurls,$find regular expression(#scraped,"(?<=href=\")[^\"]+"),"Delete","Global")
 loop($list total(%pageurls)) {
     set(#pageurl,$list item(%pageurls,1),"Global")
     navigate(#pageurl,"Wait")
     wait for browser event("Everything Loaded","")
     wait(5)
     set(#content,$scrape attribute(<class="content">,"innerhtml"),"Global")
     set(#content,$replace regular expression(#content,"<a\\ class=\"new\\ .+?(?=</a>)</a>","<!-- no wikipage yet -->"),"Global")
     set(#content,$replace(#content,$new line,$nothing),"Global")
     set(#content,$replace regular expression(#content,"\\t"," "),"Global")
     set(#contentonly,$replace regular expression(#content,"<p><div\\ class=\"subtopics\"><a\\ name=\"subtopics\">.+",$nothing),"Global")
     set(#contentonly,$replace regular expression(#contentonly,"<p><a name=\"comments\">.+",$nothing),"Global")
     set(#contentonly,$replace regular expression(#contentonly,"<a name=\"bottom\">.+",$nothing),"Global")
     add list to list(%parents,$scrape attribute(<class="outline expandable">,"innertext"),"Delete","Global")
     set(#parentlist,$list item(%parents,0),"Global")
     clear list(%parents)
     add list to list(%parents,$list from text(#parentlist,$new line),"Delete","Global")
     set(#parentlist,$replace(#parentlist,$new line,";"),"Global")
     set(#posttitle,$list item(%parents,$eval($subtract($list total(%parents),1))),"Global")
     set(#posttitle,$replace(#posttitle," ...",$nothing),"Global")
     if($comparison($list total(%parents),"> Greater than",1)) {
         then {
             set(#parent,$list item(%parents,$eval($subtract($list total(%parents),2))),"Global")
         }
         else {
             set(#parent,$nothing,"Global")
         }
     }
     append to file("{$special folder("Desktop")}\\{#domain}-page-hierarchy.csv","{#pageurl}    {#posttitle}    {#parent}    {#parentlist}    {$new line}","End")
     clear list(%parents)
     add list to list(%comments,$find regular expression(#content,"<p><a[^>]+name=\"msg.+?(?=<p><a[^>]+name=\"msg.+)"),"Delete","Global")
     loop($list total(%comments)) {
         set(#comment,$list item(%comments,0),"Global")
         set(#date,$find regular expression(#comment,"(?<=name=\"msg)[^@]+"),"Global")
         set(#title,$find regular expression(#comment,"(?<=<b>).+?(?=</b>\\ --)"),"Global")
         set(#title,$replace regular expression(#title,"<[^>]+>",$nothing),"Global")
         set(#author,$find regular expression(#comment,"(?<=</b>\\ --).+?(?=<a\\ href=\"{#pageurl})"),"Global")
         set(#author,$replace regular expression(#author,"<[^>]+>",$nothing),"Global")
         set(#author,$replace regular expression(#author,",\\ *$",$nothing),"Global")
         set(#comment,$find regular expression(#comment,"(?<=<br(|\\ /)>).+"),"Global")
         set(#comment,"<p>{#comment}","Global")
         set(#comment,$replace regular expression(#comment,"\\t"," "),"Global")
         append to file("{$special folder("Desktop")}\\{#domain}-page-comments.csv","    {#pageurl}    {#date}    {#title}    {#author}    {#comment}    {$new line}","End")
         remove from list(%comments,0)
     }
     navigate("{#pageurl}/history","Wait")
     wait for browser event("Everything Loaded","")
     wait(5)
     scrape table(<outerhtml=w"<table>*">,&edithistory)
     set(#lastedited,$table cell(&edithistory,0,4),"Global")
     clear table(&edithistory)
     append to file("{$special folder("Desktop")}\\{#domain}-page-content-raw.csv","{#pageurl}    {#lastedited}    {#content}    {$new line}","End")
     append to file("{$special folder("Desktop")}\\{#domain}-page-content-only.csv","{#pageurl}    {#posttitle}    {#lastedited}    {#contentonly}    {$new line}","End")
     remove from list(%pageurls,0)
 }

2. lépés: A tartalom feltöltése erre a WordPress oldalra

Miután végigment a szkript az összes tartalmon és strukturált formátumba hozta a tartalmat, majd lementette .csv fájlokba, további szkriptekre volt szükségem ahhoz, hogy ezekből a táblázatokból „táplálkozva” feltöltsem a tartalmakat a WordPress oldalra. Ennél a résznél is egy hasonló technológiához folyamodtam, tehát a szkriptem bejelentkezett az oldal admin felületére, majd megnyomta az „Új oldal létrehozása” gombot, kitöltötte a szerkesztő űrlap különböző mezőit, kiválasztotta a legördülő menükben a megfelelő opciókat, majd megnyomta a „Közzététel” gombot. Hogy hogyan és miért így csináltam, és mi volt ennek az értelme, arról talán majd egy következő bejegyzésben lesz szó.

Milyen weboldalt szeretnek a keresők?

Minden fontos kereső külön oldal(aka)t szentel a webmestereknek szóló ajánlásai részletezésére. Túl sok konkrétumot ne várjunk: csak nagyon nagy vonalakban nyújtanak segítséget az oldalak keresőre optimalizálása során.

Leginkább nem azt kell figyelni, hogy mit mondanak a keresők üzemeltetői, hanem azt kell figyelemmel követni, hogy valójában hogyan viszonyulnak a weblap optimalizálás egyes technikáihoz. Nem kell szentírásnak venni tehát a keresők által leírtakat, jó viszont tudni róluk.

A hivatalos ajánlásokon túl

http://www.mattcutts.com/blog/

A keresők hivatalos ajánlásai meglehetősen szűkszavúak, és nem feltétlenül szólnak minden témáról megfelelő részletességgel. A Google Inc. egyik szakembere, Matt Cutts által írt blog sok segítséget nyújt a keresőoptimalizáló webmesterek számára e részletkérdések és a Google házatáján megjelenő, webmesterek számára is fontos újdonságok megismerésében.

A „Kereső programok ajánlásai” című bejegyzést 2005. 09. 21. napján publikáltam, az azóta már bezárt webni.innen.hu oldalon. Ezt az írást és az innen hivatkozott régi tartalmakat a Webni! Archívum oldalán gyűjtöttem össze. Mivel az utolsó módosítás dátuma: 2007. 03. 24., ezért az itt olvasható információk már részben vagy teljes egészében elavultak lehetnek.

Archivált hozzászólások

Érdekes általános és speciális célú keresők

Az alábbi szabadszavas keresők valamilyen szempontból még érdekesek lehetnek a Fontos keresők mellett, ezért nem teljesen haszontalan megemlíteni őket, illetve nem teljesen időpocséklás olvasni róluk.

B kategóriás nemzetközi keresők

Az angol nyelvű források a három nagy nemzetközi keresővel egy lapon szokták emlegetni az Ask.com keresőjét, azonban mivel egyáltalán nem fókuszál a magyar nyelvű keresésre, ezért magyar weblapokkal kapcsolatban nem különösebben fontos, hasonlóan az egy fokkal kisebb Gigablasthoz.

Metakeresők

A több kereső találatait valamilyen rendszer alapján együtt megjelenítő metakeresők használati értéke általában elmarad az eredeti adatbázisból dolgozó keresőktől, azonban egyes funcióik miatt mégis említésre érdemesek, mint pl. a Clusty a Klaszterezés, a Kartoo.com az egyedi vizualizáció, a PolyMeta a Szótövezés miaatt.

Feltörekvő magyar fejlesztésű keresők

A fontos magyar nyelvű Szabadszavas keresők mellett léteznek még további, kisebb használati értékkel bíró keresők is, mint a kurzor.hu, SZTAKI Kereső, a heureka.hu, a zoohoo.hu vagy a lapozz.hu kereső.

Speciális keresőoldalak

Az általános célú keresők mellett léteznek Speciális kereső oldalak is, mely vagy a felhasználók egy szűkebb, jól behatárolható körére koncentrál, mint például a gyermekek számára készített Kacifánt, vagy pedig a weboldalaknak csak egy típusát feltérképező fórumkereső.hu vagy a különféle Blogkeresők.

A „Egyéb kereső programok” című bejegyzést 2004. 11. 01. napján publikáltam, az azóta már bezárt webni.innen.hu oldalon. Ezt az írást és az innen hivatkozott régi tartalmakat a Webni! Archívum oldalán gyűjtöttem össze. Mivel az utolsó módosítás dátuma: 2011. 10. 06., ezért az itt olvasható információk már részben vagy teljes egészében elavultak lehetnek.

Archivált hozzászólások

Netkezdő - címkék + szabadszavas kereső

2007. 11. 14. 06:00 · OldalGazda →

http://www.netkezdo.hu/

Keresőrobotja segítségével feltérképezi a weboldalakat, majd egy algoritmus segítségével kivon belőle kulcsszavakat, majd ezzel felcímkézi a kivonatokat, amit a nyitóoldalon címkeleves formájában is megjelenít, így hát nem csak a már megszokott keresőmezővel, hanem címkék segítégével is kereshetünk.

Pozitív, hogy pl. ez a webhely is szerepel már az adatbázisban

Negatív, hogy az alábbi címkékkel: adsense bevezetés front page google hirdetések honlap információkeresés innen internetes keresĂŠs keresés keresőoptimalizĂĄlĂĄs keresőoptimalizálás kinek lĂĄtogatĂł látogató latogatottsag növelése oldal optimalizálás pĂŠnzkeresĂŠs pénzkeresés szól webni webni!

Látszik, hogy nehezen boldogul a rendszer az UTF-8-cal, ami pedig angol gagyi meta keresők sajátossága volt csak eddig. Más oldalaknál gyakran lehet látni egy-két betűs címkéket, ami nyilvánvalóan haszontlan.

netkezdo

2007. 11. 14. 06:30 · Névtelen hozzászóló →

Az én oldalamnak szeptemberi változata szerepel benne.Mi lehet vajon a rangsorolás alapja? Egyes szavakra, teljesen rossz és irreleváns oldal van ráadásul az első helyen, ami a google-ban talán 8-9. LAPON ha van.

netkezdo (a fejlesztő mondja 🙂

2007. 11. 14. 12:34 · Névtelen hozzászóló →

A szeptemberi állapotnak az az oka, hogy elég rég leállítottam a crawlert a publikus netkezdo.hu. Az új crawler szépen fut, és már az UTF-8-cal is nagyon szépen boldogul, sőt a hibásan, egy html-en belüli különböző kódolásokkal is. Az új oldal indítása jövő hétre van ütemezve. Amin már nem csak a nyitólapokon lehet keresni..., rangsorolási algoritmus is sokat fejlődött. nagyon ki leszek váncsi a véleményetekre, üdv AlBrown

netkezdo (a fejlesztő mondja 🙂

2007. 11. 14. 12:40 · OldalGazda →

Szuper, szólj, ha indulófélben van a szájt, és akkor írunk itt róla egy egész új bejegyzést!

WYW kereső

2007. 11. 18. 09:29 · JazzBery →

Sziasztok!

Huh, már jó régen írtam. (sajnos alig van időm...)Józsi írta a wyw oldalakról: "Ha keresésről van szó, akkor nem annyira egyértelmű az oldal koncepciója, azonban jó tempóban visszajeleznek a linkajánláskor" Hát, jelentem ez most változott. 🙂 Béta üzemmódban, már régóta üzemelt a wyw saját keresője, (ugyan még most is béta), de pár hónapja, komolyabbra vettük a figurát, nagy hangsúlyt helyezünk a keresőre és annak a wyw oldalaktól függetlenül működő katalógusára. (erre a keresőbe regisztráció miatt is szükség volt, illetve egy újabb lehetőség webmestereknek visszlink szerzésére 🙂 ). utf-8-al egyenlőre mi is küszködünk, mivel keresőnket "sphider" motor módosított változata hajtja, és ők nemigazán fektettek hangsúlyt a speciális karakterekre. Most jutottunk el odáig, hogy a mostanában változtatásokon átment wyw oldalak mindegyike a saját keresőnket használja, ill. néhány kezelésünkben lévő katalógus is: hun-web, magyar-honlap ... A crawlert szabadjára engedjük (bizonyos mélységig) a wyw oldalakon, így a regisztrált oldalak, amennyiben átjárhatóak, bekerülnek a keresőbe, de szívesen fogadjuk a kereső katalógusába is a regisztrációt, mivel az, mint már írtam, függetlenül működik a wyw katalógusoktól. Tehát a regisztáció keresőbe, katalógusba regisztrálás is egyben.Regisztráció ezen a linken lehetséges: http://kereso.wyw.hu/addurl.phpPersze nem próbálunk konkurálni semelyik hazai és külföldi keresőmogullal sem, de oldalainknak szüksége van egy saját átfogó kereső szolgáltatásra és ha már így esett, megpróbáljuk lehetőségeinkhez mérten jól csinálni. Jelenleg az oldalak újraindexelése folyik, ami azért hosszab folyamat, mert minden oldalt manuálisan is ellenőrzünk mivel a regisztrációs lapon írottak kitételeinek meg kell felelnie minden beregisztrált oldalnak, ill. szűrőfeltételeket is megadunk indexelésnél (ha szükséges). Hát, majd igyekszem hírt adni minden jelentősebb változásról, változtatásról ezen az oldalon. (Javaslatokat, kritikákat szívesen fogadok... 🙂 )

A Google legyen veletek!

Üdv.: jazz

beszólás

2010. 01. 14. 11:41 · Névtelen hozzászóló →

nagyon szar