Pakiet XML Czym jest i z czym się je? mgr Maciej Beręsewicz Katedra Statystyki, UE w Poznaniu
Spis treści 1. Web scraping 2. XML 3. XPath 4. Pakiet XML 4.1 Allegro.pl 4.2 Last.fm 4.3 Poznan.gumtree.pl 5. Podsumowanie 6. Przydatne Linki 7. Kontakt
Web scraping Web scraping Web scraping jest metodą ekstrakcji informacji ze stron internetowych. Symuluje poruszanie się człowieka po stronach internetowych wykorzystując między innymi pająka internetowego. Wykorzystywane głównie do pobierania danych w celu ich analizy, porównywania cen, tworzenia zbiorczych stron internetowych czy integracji źródeł danych.
XML Język XML XML (ang.extensible Markup Language, pol.rozszerzalny Język Znaczników) uniwersalny język formalny przeznaczony do reprezentowania różnych danych w strukturyzowalny sposób. XML jest niezależny od platformy, co umożliwia łatwą wymianę dokumentów pomiędzy heterogenicznymi (różnymi) systemami i znacząco przyczyniło się do popularności tego języka w dobie Internetu. XML jest standardem rekomendowanym oraz specyfikowanym przez organizację W3C. Przykładowy kod last.fm <? xml v e r s i o n= 1. 0 e n c o d i n g= u t f 8?> <b o o k s t o r e> <book c a t e g o r y= COOKING > < t i t l e l a n g= en >Everyday I t a l i a n</ t i t l e> <a u t h o r>giada De L a u r e n t i i s</ a u t h o r> <y e a r>2005</ y e a r> <p r i c e>3 0. 0 0</ p r i c e> </ book> <book c a t e g o r y= CHILDREN > < t i t l e l a n g= en >Harry P o t t e r</ t i t l e> <a u t h o r>j K. Rowling</ a u t h o r> <y e a r>2005</ y e a r> <p r i c e>2 9. 9 9</ p r i c e> </ book> </ b o o k s t o r e>
XPath XPath XPath (ang. XML Path Language, w wolnym tłumaczeniu Język ścieżek XML, Język ścieżek rozszerzalnego języka znaczników) język służący do adresowania części dokumentu XML. Dzięki temu możliwe jest adresowanie po nazwie, obecności atrybutów (w ogóle), atrybutów, które zawierają określone wartości, określone węzły (parent, child). Przykładowy kod xml. s e t P r o p e r t y ( S e l e c t i o n L a n g u a g e, XPath ) ; xml. s e l e c t N o d e s ( / b o o k s t o r e / book [ 1 ] / t i t l e ) ; xml. s e l e c t N o d e s ( / b o o k s t o r e / book / p r i c e / t e x t ( ) ) ; xml. s e l e c t N o d e s ( / b o o k s t o r e / book [ p r i c e >35]/ p r i c e ) ; xml. s e l e c t N o d e s ( / b o o k s t o r e / book [ p r i c e >35]/ t i t l e ) ;
Pakiet XML Duncan Temple Lang Pakiet XML http://anson.ucdavis.edu/~duncan/ Obecnie dostępny w wersji 3.9-4 opis: http://cran.r-project.org/web/ packages/xml/xml.pdf Jest jednym z wielu pakietów stworzonym przez Duncana, Służy do tworzenia, zarządzania oraz przetwarzania plików XML, resztę pakietów (zwłaszcza RCurl) można znaleźć pod adresem http://www.omegahat.org/
Przydatne funkcje Pobieranie danych htmlparse(x,encoding,...) funkcja do pobierania stron internetowych w formie pliku XML (zachowanie struktury pliku). X określamy jako adres http danej strony internetowej, funkcja ma dużo opcji, jednak encoding jest jedną z ważniejszych jeżeli chcemy zachować kodowanie strony, xmlparse(x,astext,encoding,...) funkcja do pobierania plików XML, zapisuje cały plik po jego ściągnięciu w pamięci. Podobną funkcją jest xmltreeparse(x,...), readhtmltable(x,header=na,which=integer(),colclasses=null,..) funkcja do pobierania tabel ze stron internetowych lub plików tekstowych o strukturze pliku XML/HTML. Najważniejszy z punktu naszego punktu widzenia jest parametr which określający, którą tabelę należy pobrać. Pozostałe argumenty funkcji tak jak w as.data.frame. Przetwarzanie danych XPathApply(doc,path) funkcja do pobierania danych argumentów z pliku klasy XMLInternalDocument lub HTMLInternalDocument, które muszą być argumentem określonym jako doc. Parametr path określa ścieżkę do poszukiwanej przez Nas wartości. Struktura zmiennej path jest taka sama jak w języki XPath. Innymi odpowiednikami tej funkcji są getnodeset i xpathsapply,
Allegro.pl Case study Moim celem jest sprawdzenie ile kosztują strony z fanami na allegro.pl czyli ile kosztuje jeden fan? Rozwiązanie l i b r a r y (XML) u r l< h t t p : // a l l e g r o. p l / l i s t i n g. php/ s e a r c h? c a t e g o r y =15821& s t r i n g=f a n i+f a c e b o o k&p=1 doc< htmlparse ( url, encoding= utf 8 ) tabl< readhtmltable ( doc, which=5) t a b l< t a b l [, 1] Wyniki Krótka statystyka z rana: 67 ofert sprzedaży fanpagów na allegro (tzn. farm fanów), gdzie średnia cena wynosiła 277.70 zł, mediana 79.99 zł, min 1.00 zł a max 5000.00zł. Ta najdroższa dotyczyła sprzedaży pakietu 1 mln fanów, czyli jeden fan kosztował 0,005 zł.
Last.fm Case Study Moim celem było sprawdzenie jak bardzo zwiększyła się popularność Whitney Houston poprzez analizę komentarzy na jej profilu na portalu muzycznym last.fm. Portal ten oferuje ściąganie danych w formie XML dzięki API (ang.application Programming Interface), można oczywiście ściągać dane przez stronę ale nie mamy takich szczegółowych danych. Dzięki temu mamy łatwość znalezienia interesującej nas pozycji. Wszystkie dostępne API możemy znaleźć pod adresem: http://www.lastfm.pl/api. Należy zapisać się na tej stronie aby dostać klucz do ściągania danych. Dane mogę ściągnać dzięki http://www.lastfm.pl/api/show/artist.getshouts Przykład danych <shouts a r t i s t= Whitney Houston page= 1 perpage= 50 totalpages= 127 t o t a l= 6316 > <s h o u t> <body>blah</ body> <a u t h o r>j o a n o f a r c t a n</ a u t h o r> <date>fri, 12 Dec 2008 13 : 20: 41</ date> </ s h o u t>... </ s h o u t s>
Last.fm Kod do ściągnięcia danych getshouts< function ( x ){ r e q u i r e (XML) doc< xmlparse ( x, encoding= utf 8 ) shout< xpathapply ( doc, // s h o u t // body, xmlvalue ) who< xpathapply ( doc, // s h o u t // a u t h o r, xmlvalue ) when< xpathapply ( doc, // s h o u t // d a t e, xmlvalue ) a< c b i n d ( who, when, s h o u t ) a } u r l < h t t p : //ws. a u d i o s c r o b b l e r. com / 2. 0 /? method=a r t i s t. g e t s h o u t s& a r t i s t=whitney+houston& a p i k e y=b25b959554ed76058ac220b7b2e0a026 Shouts1< g e t S h o u t s ( u r l )
Poznan.gumtree.pl Case study Moim celem jest pobranie danych dotyczących mieszkań (sprzedaż mieszkań) Strona internetowa
Poznan.gumtree.pl Poznan.gumtree.pl part 1 N< 109 gumlinks< paste ( h t t p : // poznan. gumtree. pl / f Nieruchomosci dom mieszkanie dzialke sprzedam W0QQCatIdZ9073QQPageZ,1 :N, QQSortZ2, sep= ) gumtree< function ( x ){ r e q u i r e (XML) doc< htmlparse ( x, encoding= UTF 8 ) l i n k s < u n l i s t ( xpathapply ( doc, // td [ @ c l a s s= hgk ] / / a, xmlgetattr, h r e f ) ) f o r ( i i n 1 : l e n g t h ( l i n k s ) ){ cat ( ================== nowe mieszkanie==================, \n ) c a t ( L i n k :, l i n k s [ i ], \n ) doc2< h t m l P a r s e ( l i n k s [ i ], e n c o d i n g= UTF 8, ) O f f e r I D< xpathapply ( doc2, // i n p u t [ @name= AdId ], xmlgetattr, v a l u e ) [ [ 1 ] ] [ 1 ] c a t ( O f f e r I D :, O f f erid, \n ) i n f o < xpathapply ( doc2, // span [ @itemprop= t i t l e ], xmlvalue ) [ [ 4 ] ] [ 1 ] c a t ( Type:, i n f o, \n ) tab< readhtmltable ( doc2 ) $ a t t r i b u t e T a b l e tab< r a p p l y ( tab, as. c h a r a c t e r, c l a s s e s= f a c t o r, how= r e p l a c e ) tab< c b i n d ( tab $V1, tab $V2) f o r ( i i n 1 :nrow ( tab ) ){ c a t ( tab [ i, 1 ], :, tab [ i, 2 ], \n ) }
Poznan.gumtree.pl Poznan.gumtree.pl part 2 o p i s< xpathapply ( doc2, // span [ @id= p r e v i e w l o c a l d e s c ], xmlvalue ) [ [ 1 ] ] [ 1 ] o p i s< gsub ( \n,, o p i s ) o p i s< gsub ( \ t,, o p i s ) c a t ( O p i s :, o p i s, \n ) l i n k < p a s t e ( h t t p : // poznan. gumtree. p l, u n l i s t ( xpathapply ( doc2, // t a b l e [ @id= a t t r i b u t e T a b l e ] / / td // a, xmlgetattr, h r e f ) ), sep= ) map< htmlparse ( link, encoding= UTF 8 ) a< as. c h a r a c t e r ( u n l i s t ( xpathapply (map, // d i v [ @id= gmap ] / / img, xmlgetattr, s r c ) ) ) i f ( l e n g t h ( a )!=0) { a1< s t r s p l i t ( a, = ) [ [ 1 ] ] [ 2 ] a2< s t r s p l i t ( a1, %2C ) Lat< as. numeric ( a2 [ [ 1 ] ] [ 1 ] ) Lng< as. numeric ( s t r s p l i t ( a2 [ [ 1 ] ] [ 2 ], &zoom ) [ [ 1 ] ] [ 1 ] ) c a t ( L a t :, Lat, \n ) c a t ( Lng:, Lng, \n ) } } } s i n k ( gumtree. t x t ) f o r ( j i n 1 :N ) gumtree ( g u m l i n k s [ j ] ) s i n k ( )
Podsumowanie Bardzo fajny pakiet, Problem z JavaScript i AJAX, Dla każdej strony oddzielny kod, Problem z https i formularzami Najlepiej używać pakiet RCurl i XML.
Przydatne Linki Pakiet RCurl http://www.omegahat.org/rcurl/rcurljss.pdf Strona z pakietami Duncana http://www.omegahat.org Forum Stackoverflow http://stackoverflow.com/questions/tagged/r+web-scraping Przykład ściągania http://christophergandrud.blogspot.com/2012/02/how-to-extract-text-from-multiple.html Pakiet do ściągania danych z Twiterra http://cran.r-project.org/web/packages/twitter/vignettes/twitter.pdf Poradnik do XML http://www.w3schools.com/xml/default.asp Poradnik do XPath http://www.w3schools.com/xpath/default.asp
Dziękuję za uwagę
Kontakt Dane kontaktowe: Maciej Beręsewicz maciej.beresewicz@ue.poznan.pl maciej.beresewicz@gmail.com 663062687