Pakiet XML - Maciej Beręsewicz
-
Upload
maciej-beresewicz -
Category
Documents
-
view
851 -
download
1
Transcript of Pakiet XML - Maciej Beręsewicz
Pakiet XMLCzym jest i z czym się je?
mgr Maciej Beręsewicz
Katedra Statystyki, UE w Poznaniu
c© Katedra Statystyki, Uniwersytet Ekonomiczny w Poznaniu
Spis treści
1. Web–scraping
2. XML
3. XPath4. Pakiet XML4.1 Allegro.pl4.2 Last.fm4.3 Poznan.gumtree.pl
5. Podsumowanie
6. Przydatne Linki
7. Kontakt
c© Katedra Statystyki, Uniwersytet Ekonomiczny w Poznaniu
Web–scraping
Web–scraping
Web–scraping – jest metodą ekstrakcji informacji ze stron internetowych. Symuluje poruszanie się człowieka po stronachinternetowych wykorzystując między innymi pająka internetowego. Wykorzystywane głównie do pobierania danych w celu ichanalizy, porównywania cen, tworzenia zbiorczych stron internetowych czy integracji źródeł danych.
c© Katedra Statystyki, Uniwersytet Ekonomiczny w Poznaniu
XML
Język XML
XML (ang.Extensible Markup Language, pol.Rozszerzalny Język Znaczników) – uniwersalny język formalny przeznaczony doreprezentowania 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 dobieInternetu. 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. Rowl ing</ 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>
c© Katedra Statystyki, Uniwersytet Ekonomiczny w Poznaniu
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 ” ) ;
c© Katedra Statystyki, Uniwersytet Ekonomiczny w Poznaniu
Pakiet XML
Duncan Temple Lang
http://anson.ucdavis.edu/~duncan/
Pakiet XML
I Obecnie dostępny w wersji 3.9-4
I opis: http://cran.r-project.org/web/packages/XML/XML.pdf
I Jest jednym z wielu pakietów stworzonymprzez Duncana,
I Służy do tworzenia, zarządzania orazprzetwarzania plików XML,
I resztę pakietów (zwłaszcza RCurl) możnaznaleźć pod adresemhttp://www.omegahat.org/
c© Katedra Statystyki, Uniwersytet Ekonomiczny w Poznaniu
Przydatne funkcje
Pobieranie danych
I htmlParse(x,encoding,...) – funkcja do pobierania stron internetowych w formie pliku XML (zachowanie strukturypliku). 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,
I 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,...),
I readHTMLTable(x,header=NA,which=integer(),colClasses=NULL,..) – funkcja do pobierania tabel ze stroninternetowych lub plików tekstowych o strukturze pliku XML/HTML. Najważniejszy z punktu naszego punktu widzeniajest parametr which określający, którą tabelę należy pobrać. Pozostałe argumenty funkcji tak jak w as.data.frame.
Przetwarzanie danych
I XPathApply(doc,path) – funkcja do pobierania danych argumentów z pliku klasy XMLInternalDocument lubHTMLInternalDocument, które muszą być argumentem określonym jako doc. Parametr path określa ścieżkę doposzukiwanej przez Nas wartości. Struktura zmiennej path jest taka sama jak w języki XPath. Innymi odpowiednikamitej funkcji są getNodeSet i xpathSApply ,
c© Katedra Statystyki, Uniwersytet Ekonomiczny w Poznaniu
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=Fan i+f a c e b o o k&p=1”doc<−h t m l P a r s e ( u r l , e n c o d i n g= ’ u t f−8 ’ )t a b l<−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 fankosztował 0,005 zł. ¨̂
c© Katedra Statystyki, Uniwersytet Ekonomiczny w Poznaniu
Last.fm
Case Study
Moim celem było sprawdzenie jak bardzo zwiększyła się popularność Whitney Houston poprzez analizę komentarzy na jej profiluna portalu muzycznym last.fm. Portal ten oferuje ściąganie danych w formie XML dzięki API (ang.Application ProgrammingInterface), 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
<s h o u t s a r t i s t=” Whitney Houston ” page=”1” perPage=”50” t o t a l P a g e s=” 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><d a t e>F r i , 12 Dec 2008 13 : 2 0 : 4 1</ d a t e>
</ s h o u t>. . .
</ s h o u t s>
c© Katedra Statystyki, Uniwersytet Ekonomiczny w Poznaniu
Last.fm
Kod do ściągnięcia danych
g e t S h o u t s<−f u n c t i o n ( x ){r e q u i r e (XML)doc<−xmlParse ( x , e n c o d i n g= ’ u t f−8 ’ )shout<−xpathApp ly ( doc , ’ // s h o u t // body ’ , xmlValue )who<−xpathApp ly ( doc , ’ // s h o u t // a u t h o r ’ , xmlValue )when<−xpathApp ly ( 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 s<−p a s t e ( ” 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&p a s t e=” ,1 : 1 2 7 )WHITNEY<− l i s t ( )f o r ( i i n 1 : 1 2 7 ){
Sys . s l e e p ( 0 . 5 )WHITNEY [ [ i ]]<−g e t S h o u t s ( u r l s [ i ] )
}WHITNEY<−do . c a l l ( ’ r b i n d ’ ,WHITNEY)
c© Katedra Statystyki, Uniwersytet Ekonomiczny w Poznaniu
Last.fm
Liczba komentarzy na profilu Whitney Houston na Last.fm
c© Katedra Statystyki, Uniwersytet Ekonomiczny w Poznaniu
Poznan.gumtree.pl
Case study
Moim celem jest pobranie danych dotyczących mieszkań (sprzedaż mieszkań)
Strona internetowa
c© Katedra Statystyki, Uniwersytet Ekonomiczny w Poznaniu
Poznan.gumtree.pl
Poznan.gumtree.pl – part 1
N<−109guml inks<−p a s t e ( ” h t t p : // poznan . gumtree . p l / f−Nieruchomosc i−dom−m i e s z k a n i e−d z i a l k e−sprzedam
−W0QQCatIdZ9073QQPageZ” ,1 :N , ”QQSortZ2” , sep=”” )
gumtree<−f u n c t i o n ( x ){r e q u i r e (XML)doc<−h t m l P a r s e ( x , e n c o d i n g=”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 ) ){c a t ( ”================== nowe m i e s z k a n i e==================” , ”\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” , )Of fe r ID<−xpathApp ly ( 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 : ” , Of fe r ID , ”\n” )i n f o<−xpathApp ly ( 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 etab<−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” )}
c© Katedra Statystyki, Uniwersytet Ekonomiczny w Poznaniu
Poznan.gumtree.pl
Poznan.gumtree.pl – part 2
o p i s<−xpathApp ly ( doc2 , ’ // span [ @id=”pr ev 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<−h t m l P a r s e ( l i n k , e n c o d i n g=”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 . numer ic ( a2 [ [ 1 ] ] [ 1 ] )Lng<−as . numer ic ( 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 ( )
c© Katedra Statystyki, Uniwersytet Ekonomiczny w Poznaniu
Podsumowanie
I Bardzo fajny pakiet ¨̂ ,I Problem z JavaScript i AJAX,I Dla każdej strony oddzielny kod,I Problem z https i formularzamiI Najlepiej używać pakiet RCurl i XML.
c© Katedra Statystyki, Uniwersytet Ekonomiczny w Poznaniu
Przydatne Linki
I Pakiet RCurl – http://www.omegahat.org/RCurl/RCurlJSS.pdf
I Strona z pakietami Duncana – http://www.omegahat.org
I Forum Stackoverflow – http://stackoverflow.com/questions/tagged/r+web-scraping
I Przykład ściągania –http://christophergandrud.blogspot.com/2012/02/how-to-extract-text-from-multiple.html
I Pakiet do ściągania danych z Twiterra–http://cran.r-project.org/web/packages/twitteR/vignettes/twitteR.pdf
I Poradnik do XML – http://www.w3schools.com/xml/default.asp
I Poradnik do XPath – http://www.w3schools.com/xpath/default.asp
c© Katedra Statystyki, Uniwersytet Ekonomiczny w Poznaniu
Dziękuję za uwagę ¨̂
c© Katedra Statystyki, Uniwersytet Ekonomiczny w Poznaniu
Kontakt
Dane kontaktowe:
Maciej Berę[email protected]@gmail.com663062687
c© Katedra Statystyki, Uniwersytet Ekonomiczny w Poznaniu