Adatbányászat Blog

Az Adatbányász Blogon a dmlab szakértőinek írásait olvashatod a big data és data science területéről.

dmlab.hu - Big data és data science tanácsadás
"Ha örülsz, hogy fejedre nőttek az adatok."

Keress minket bátran:
- Nagy-Rácz István +36704595669
- Gáspár Csaba +36208234154
- info@dmlab.hu

Hírlevél

Iratkozz fel hírlevelünkre, hogy mindig naprakészen tudjunk tájékoztatni.
Feliratkozás
Leiratkozás

Címkék

10éves (1) 2007 (1) 2010 (23) 2011 (27) 2012 (13) 2013 (23) 2014 (5) 2015 (6) 2016 (10) 2017 (3) adaptív (1) adat- és médiainformatika (1) adatárusítás (1) adatbányászat (10) adatbányászati algoritmusok (1) adatbányászati alkalmazások (2) adatbányászati meetup (1) adatbányászati oktatás (1) adatbányászati technológiák (4) adatelemzés (1) adatelemzési platformok (1) adattárház (5) adattárház fórum (6) adattárolás (1) adattisztítás (1) adatvédelem (2) advise (2) aegon (1) aglitás (1) agy (2) ajánló (11) ajánlórendszerek (1) aktivitás felismerés (1) algoritmus (1) alkalmazás (3) állásajánlat (1) amazon ec2 (1) ambiens (1) ami (1) analitika (1) analytics (1) andego (3) apache (1) api (2) Arató Bence (3) bank (1) barabási (2) Barabási (2) beharangazó (1) beharangozó (18) bejelentés (2) belami (1) best practice (9) beszámoló (14) BI (3) Bi (1) bi (13) bi-trek (1) biconsulting (7) bigdata (21) Big Data (2) big data (5) biopen (1) biztosító (1) BI Akadémia (1) bi consulting (1) bi start (1) blog (5) bme (1) BME (14) bootcamp (1) brainstorming (1) bsp (1) budapest (1) business analytics (1) business analytics szakirány (1) churn (2) ci (1) címkefelhő (2) CIO (1) clementine (1) Clementine Consulting (1) cloud computing (2) cognos (1) credit scoring (1) crisp-dm (1) crm (2) csalásdetektálás (1) DataExpert (1) dataexplorer (1) datapest (1) data mining (1) data science (5) diplomamunka (1) dmla1o (1) dmlab (12) döntési fák (1) drill (1) e-commerce (1) előadás (21) előrejelzés (1) élő közvetítés (1) Enbrite.ly (1) energetika (1) esemény (2) esettanulmány (3) etikus (1) etl (2) évforduló (2) fejlesztés (2) felmérés (5) felsőoktatás (1) felület (1) felvásárlás (3) film (1) fizetés (1) forecasting (1) forgalomelőrejelzés (2) foursquare (1) fraud detection (1) freebase (1) gartner (2) gazdasagi informatikus (2) gépi tanulás (4) google (8) google analytics (1) graphlab (1) gravity (3) greenplum (1) gyakorlat (1) hadoop (10) hallgatók (2) hálózatelemzés (3) hálózatkutatás (2) hálózatok (3) hazai (2) hiba (4) hírlevél (2) hive (1) honlap (1) HR (1) HVG (1) i5 (1) ibm (6) ibm modeler (1) ibm spss (3) icdm (1) idc (2) idősor (1) idősorok (1) ieee (1) iir (1) infobright (1) információbróker (1) innováció (5) innovatívBI (1) innovativ bi (4) inspiráció (1) intelligencia (2) Internet Hungary (1) iqsymposium (19) iqsys (16) iroda (4) jelentkezés (1) jmp (2) kaggle (2) kampánymenedzsment (1) kapcsolati hálók (1) karrier (1) kdd (3) kdnuggets (2) képzés (4) kérdés (1) kérdőív (1) kerekasztal (1) keresés (1) kereső (1) keresztvalidáció (4) klaszterezés (2) knime (1) kockázati tőke (1) kollaboratív munka (1) kompetencia (1) konferencia (70) könyv (6) környezet (1) közlekedés (1) közösség (2) közösségi hálózatok (4) közvetítés (6) kritika (1) küldetés (1) kürt akadémia (1) kutatás (2) lemorzsolódás (1) licensz (1) live (1) logisztika (1) magyar telekom (2) mahout (1) mapreduce (1) marketplace (1) média (2) meetup (11) mellékspecializáció (1) mém (3) memóriacentrikus (1) menedzsment (3) metaadat (1) metodika (1) microsoft (1) mobil (5) mobil bi (4) modeler (2) modell (3) morgan stanley (1) motion chart (1) munkaerő (1) mysql (1) mytraffic (4) nemzetközi (5) nemzetközi összehasonlítás (1) netflix prize (1) networking (1) next big thing (1) nips (1) nosql (1) nyílt forráskód (4) nyomkövetés (1) offline áruházak (1) okostelefon (1) oktatás (22) olvasók (1) online áruházak (1) online kutatás (1) open source (19) open source bi (3) operatorfa (1) osbi (12) összehasonlítás (1) ötletek (2) pandas (2) paradoxon (1) pascal (1) pentaho (1) personal data mining (1) phd (2) philips (1) piac (3) pikk (1) pilot (1) PISA-felmérés (1) pmml (1) politika (2) powerpivot (1) prága (1) praktiker (1) prediktív analitika (2) prediktív analitka (1) prediktiv modellezés (5) prediktív modellezés (1) prezi (15) privacy (1) privacy preserving data mining (1) projekt (1) projektmenedzsment (4) publikáció (1) python (9) radoop (12) random forest (1) rapid-i (2) rapidanalytics (7) rapidminer (40) RapidMiner (2) rcomm (7) refine (1) Rexer Analytics (1) rsctc (1) R nyelv (7) saas (1) sap (1) SAS (20) sas enterprise miner (2) sas enterpris guide (1) sas entprise miner (1) sas forum (3) sas fórum (1) siker (3) simptech (1) sixtep (2) smarthabits (1) spike sorting (1) sportanalitika (1) SPSS (3) spss (13) spss clementine (3) spss hungary (5) spss modeler (6) ssd (1) starschema (2) startup (9) statisztika (1) survey (1) svm (1) szabad szoftver (1) szakmai (1) szavazó eljárások (2) szélenergia (1) szélerőmű (1) szervezetfejlesztés (1) szociális hálók (1) szoftver (5) szöveg (1) szövegbányászat (2) sztaki (2) tableau (1) talend (2) támogatás (1) tanulmány (1) tanulság (1) távolság (1) technológia (1) tedx (1) telekommunikáció (2) teradata (2) teszt (1) text mining (1) tmit (5) toborzás (1) tőzsdei előrejelzés (1) tracking (1) trendek (8) tudományos (1) tunedit (1) twitter (17) ügyfél (1) üzleti intelligencia (3) üzleti modell (3) üzleti reggeli (3) validáció (4) válogatás (1) válság (1) változás (1) vélemény (1) véleméy (1) verseny (20) vezetői képzés (1) videó (3) vizualizáció (5) web (4) web2 (2) webanalitika (3) webshop (1) weka (2) wikipedia (2) workshop (1) yahoo (2) Címkefelhő

TWitter a csapat tagjaitól

2014.07.23. 10:00 Ragány Csaba

RapidMiner tippek - A Crawl Web operátor

Címkék: best practice rapidminer

Az előző RapidMiner tippek blogbejegyzésre érkezett pozitív visszajelzéseknek megfelelően - melyeket ezúton is köszönünk - a mostani írás is a RapidMiner mélyebb ismertetéséről, egészen pontosan a Crawl Web operátor trükkös működéséről illetve használatáról szól. A web-barangolás nem egy tipikus nagyvállalati feladatkör, hiszen meglehetősen ritka az olyan adatelemzési feladat egy multi cégen belül, ahol az első lépések között az internetről kell begyűjtenünk bizonyos weboldalak linkjeit és tartalmait további elemzés céljából. Ennek megfelelően a RapidMiner-ben ez a task csak egy kiegészítő révén valósítható meg (Web Mining Extension), melyet ezidáig majd 50.000-szer töltöttek már le. Kérdés, hogy mennyire hatékony a RapidMiner Crawl Web operátora illetve, hogy mi mennyire ismerjük azt?

 

Nézzük tehát a web-barangolást, a feladat legyen az alábbi: szeretnénk legyűjteni - a weboldal tulajdonosa által jóváhagyva - egy weboldalhoz tartozó illetve a weboldalról elérhető összes weboldal linkjét és tartalmát valamilyen elemzés céljából. Erre tehát a RapidMiner-ben a Crawl Web operátor szolgál, amelyben megadható a kiinduló URL és “minden” egyéb szükséges paraméter (az idézőjelek használata azonnal magyarázatot kap). A kimeneti adattábla ‘Link’ attribútuma tartalmazza a legyűjtött URL-eket, a ‘Page’ attribútuma pedig azok HTML tartalmát (az attribútum nevek megadására nincs lehetőség, átnevezésük csak egy Rename operátorral lehetséges). Ezután jellemzően valamilyen szövegfeldolgozási lépés következik, ahol a HTML tartalomból megállapítunk mindenféle érdekes dolgot. Tegyük fel, hogy ezen lépés kimenete egyértelműen hozzárendel egy azonosítót az adott oldalhoz tartozó URL-hez: pl. bizonyos linkeken ‘x’ típusú dolgok találhatók, míg más linkeken ‘y’ típusú dolgok stb. (ezek lehetnek termékek, szolgáltatások, illetve bármilyen tartalmak). Ha nem vagyunk elég alaposak, mehetünk is a megrendelőhöz a szépnek tűnő eredménnyel, ahol könnyen igencsak kellemetlen helyzetben találhatjuk magunkat, ugyanis a Crawl Web operátorban nincs lehetőség a cookie-k engedélyeztetésére. Így ha az elemzendő webportál valamely oldala csak úgy tekinthető meg, ha engedélyezve van a böngészőnkben a cookie-k használata, akkor a Crawl Web operátorral, mint egyfajta “böngészővel” nem tudjuk begyűjteni az adott URL-hez tartozó valódi HTML tartalmat, csak a cookie engedélyezés hiányában átirányított weblapot, ami jellemzően arról tájékoztat, hogy miért és hogyan lehet engedélyezni a cookie-kat illetve, hogy ezek használata milyen előnyökkel és következményekkel jár. A cookie-kat használó weboldalak URL-jeihez tehát a legyűjtött átirányított oldal tartalma alapján téves azonosítót fogunk rendelni, ami több, mint ciki.

A probléma viszont orvosolható, mégpedig a Get Pages operátorral, ahol már létezik az “accept cookies” paraméter, melyben az “all” értéket választva a webszerver úgy látja, hogy a kliens oldalon engedélyezve van a cookie-k használata, így begyűjthető a helyes HTML tartalom. A Get Pages operátor használatával viszont van egy “kisebb” probléma, méghozzá, hogy funkcionalitását tekintve ez nem egy web-barangoló operátor, így nem képes felderíteni egy kiinduló URL-ről elérhető összes többi URL-t a meghatározott követési szabályoknak (‘crawling rules’) és egyéb paramétereknek (pl. maximum oldalszám, maximum mélység stb.) megfelelően. Tehát első lépésben le kell gyűjtenünk a Crawl Web operátorral a linkeket, majd ezt a ‘Link’ attribútumot kell átadnunk a Get Pages operátor ‘link attribute’ paraméterének. A probléma a kétszeres futási idő mellett inkább a többszörös memóriahasználat, ami a RapidMiner Achilles-sarka, ugyanis egy nagyobb webportál esetén akár több 10.000 oldalt is elemeznünk kellene, amihez pedig könnyen kevés lehet 10-20 GB memória is, és a teljes feladatmegoldásban még csak a bemeneti adatok gyűjtésénél járunk.

A Get Pages operátor bemenete tehát egy linkeket tartalmazó attribútum (pl. ‘Link’), kimenete pedig több egyéb mellett (pl. a legyűjtés dátuma) egy ‘URL’ és a ‘page attribute’ paraméterben megadott nevű attribútum (pl. ‘Page_2’), mely már nem a bemeneti ‘Link’ attribútum linkjeihez tartozó HTML kódokat tartalmazza, hanem a kimeneti ‘URL’ attribútumban lévő linkek HTML kódjait. Ha tehát nem engedélyezzük a cookie-k használatát a Get Pages operátorban, akkor a ‘Link’ és az ‘URL’ attribútumok nem lesznek azonosak, hiszen az ‘URL’ attribútumban az átirányított oldalak linkjei fognak szerepelni. A Crawl Web operátor HTML kódokat tartalmazó ‘Page’ attribútuma és a Get Pages operátor ‘Page_2’ attribútuma viszont azonos lesz, hiszen mindkettő az átirányított weboldalakat tartalmazza. A cookie-k engedélyezése esetén pedig épp fordított a helyzet: a ‘Link’ és az ‘URL’ attribútumok lesznek az azonosak (helyesek), a ‘Page’ és ‘Page_2’ attribútumok pedig különbözőek (utóbbi a helyes weboldalakkal).

A Crawl Web operátor másik (illetve harmadik) nagy hibája, hogy a weboldalak karakterkódolása sem állítható be, ami viszont alapvető fontosságú a HTML tartalmak helyes szövegelemzése céljából. Ha a webportálról legyűjtött minden weboldal UTF-8 kódolású, akkor szerencsénk van, vagy akkor is, ha a weblapok nem tartalmaznak ékezetes karaktereket. Ha viszont igen, és nem UTF-8 kódolásban, hanem pl. az ISO-8859-2 szabvány szerint (a használt karakterkódolás kinyerhető a normálisabb weboldalak esetén megadott metaadatokból), akkor a Crawl Web operátor ‘Page’ attribútuma megint csak használhatatlan lesz. Rossz hír, hogy ezt a problémát már a Get Pages operátor sem orvosolja. De mint lassan megszokható, ez a hiányosság is kivédhető a RapidMiner-ben, méghozzá a Get Page operátorral, aminek utolsó, ‘override encoding’ paraméterét engedélyezve megadható az aktívvá váló ‘encoding’ paraméterben a weboldalak karakterkódolása. Azonban a Get Page operátor használatának is “ára” van (nem is kicsi), ami jelen esetben egy Loop Examples operátor lesz, ugyanis a Get Page operátor nem rendelkezik bemenettel, így a Crawl Web operátor ‘Link’ attribútumának értékei csak egy makró segítségével adhatók át az ‘url’ paraméternek. Hogy pl. 10.000 weboldal esetén mennyi ideig tart ezzel a módszerrel legyűjteni a linkekhez a weboldalakat, és hogy ehhez milyen teljesítményű gép szükséges, azt próbálja ki mindenki magának, ha napokra nélkülözni tudja számítógépét.

Igazán érdekes feladat lenne, ha több különböző karakterkódolású weblapot is legyűjtenénk, ugyanis ekkor nekünk kellene kibányászni a használt karakterkódolást a HTML kódokból, amit sajnos makróval nem lehet átadni az ‘encoding’ paraméternek, úgyhogy muszáj lenne egy Subprocess operátort és több Get Page-et használni.

Még ebben az esetben sem biztos, hogy sikeres lesz az adatgyűjtés, ugyanis ha nem tulajdonosi engedéllyel gyűjtünk tartalmat egy webportálról, akkor könnyen kitiltás lehet a web-barangolás következménye. Webszerver oldalon a web-crawling azonosítása automatizáltan történhet, melyet nehezíteni lehet pl. a lekérdezések között eltelt idő véletlen változtatásával. A Crawl Web operátorban sajnos erre nincs lehetőség, mivel a ‘delay’ paraméterben csak fix értékek adhatók meg, de a Get Pages operátorban már beállítható a ‘random’ érték (a Get Page operátor értelem szerűen nem rendelkezik ilyen paraméterrel). Ha pedig a Get Page operátort kell használnunk, akkor a Loop Examples operátorban alkalmazhatjuk a Delay operátort, szintén a ‘random’ értékkel. A web-barangolás azonosításának további nehezítése lehet még a random user agent használata, melyre szintén csak a Get Pages és a Get Page operátorokban van lehetőség.

Zárásképpen elmondható, hogy bár a web-crawling csak egy RapidMiner kiegészítő révén válik elérhetővé, mégis - vagy éppen ezért - tele van olyan hiányosságokkal, melyek egyébként implementálva lettek egy-egy másik operátorban, csak épp pont abban nem, melyben kellett volna a hatékony működés érdekében. A Web Mining kiegészítő jelenlegi, 5.3.1-es verziója éppen egy éve került publikálásra. Kíváncsian várjuk, hogy mikor jön ki egy újabb verzió, melyben remélhetőleg már javítva lesznek az itt részletezett hiányosságok is. Arra pedig egy következő bejegyzésben próbálok majd magyarázatot adni, miért használom a Loop Examples operátort a Loop Values helyett, holott az utóbbi több okból is sokkal kézenfekvőbb és logikusabb lenne a fent említett példában.

A kép forrása.

3 komment

A bejegyzés trackback címe:

http://adatbanyaszat.blog.hu/api/trackback/id/tr406530677

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben.

baalazs 2014.07.24. 21:03:46

Egyszerűbb böngésző bővítményt írni. Vagy egy meglévőt kiisemrni és használni. Az automata hírgyűjtésben elterjedt módszer.

István Nagy 2014.07.25. 09:21:37

@baalazs: ebben van is valami, ha tényleg csak erre akarod használni. Egy másik projektben egy webes hirdetőt minden hirdetését szedtük le ezzel a módszerrel. Itt ugye már parse-olni kellett elég sokat, amihez ez nagy segítség volt. Persze azóta erre is megjelentek a céleszközök például a Kimono (www.kimonolabs.com/) és az import.io (import.io/) személyében.

baalazs 2014.07.25. 17:08:12

@István Nagy: +1
A google szerint van web-crawling és web-scraping, és ezek nem szinonímák. Az előbbi esetben, mint ahogyan a posztban is szó van róla egy betöltött weboldal feldolgozásáról van szó. Míg a második esetben ezen felül lehet pl form-ot beküldeni, javascriptet végrehajtani (és persze a cookie problémán túllendülni). Avagy az első hozzászólásomban csak azt hittem, hogy a poszthoz szólok hozzá!:-)