mi2-warsaw / CzasDojazdu

https://hub.docker.com/r/marcinkosinski/czasdojazdu/builds/
5 stars 1 forks source link

scraping danych z gumtree, olx i oto dom #3

Closed MarcinKosinski closed 8 years ago

michalcisek commented 8 years ago

mam problem z kodowaniem polskich znaków. Zgodnie z radą Marcina próbowałem zmienić kodowanie na UTF-8, WINDOWS-1252, ISO-8859-1/2 lub CP2150, jednak nic nie pomogło. Próbowałem też z funkcją repair_encoding, ale zwraca błąd 'No guess has more than 50% confidence'. Macie jakiś pomysł co z tym zrobić?

MarcinKosinski commented 8 years ago

A jakie masz kodowanie systemowe :)?

Swoją drogą to, że masz złe kodowanie przy wyświetlaniu napisu, wcale nie oznacza, że nie zapisuje się on w kodowaniu UTF-8, w którym dobrze byłoby mieć ostatecznie baze.

MarcinKosinski commented 8 years ago

Ten blad ze 'can't guess' oznacza, ze nie ma żadnych specjalnych znaków, dlatego napis pasuje do każdego kodowania. Jeżeli Ci to psuje automat to zabezpiecz sie funkcja 'try'.

Z drugiej strony nie wazne ostatecznie jakie jest kodowanie, Bo mechanizm zbierający dane puścimy na serwerze na ktorym tez postawimy frontend i dopiero tam sie zajmiemy kodowaniem. Poki co dobrze byłoby miec działający mechanizm, nawet jak ściąga napisy w dziwnym kodowaniu (ja mysle ze na stronach jest UTF-8, a Ty masz systemowo inne.

Marcin Kosinski

Dnia 11.02.2016 o godz. 00:23 michalcisek notifications@github.com napisał(a):

mam problem z kodowaniem polskich znaków. Zgodnie z radą Marcina próbowałem zmienić kodowanie na UTF-8, WINDOWS-1252, ISO-8859-1/2 lub CP2150, jednak nic nie pomogło. Próbowałem też z funkcją repair_encoding, ale zwraca błąd 'No guess has more than 50% confidence'. Macie jakiś pomysł co z tym zrobić?

— Reply to this email directly or view it on GitHub.

tmikolajczyk commented 8 years ago

Michał, czy masz już pomysł jak miałaby wyglądać struktura danych, które przymierzasz się pobrać? Jeśli masz wizję albo wręcz listę i nazwy pól, to proszę wrzuć to do repo. Podjąłem się stworzyć fikcyjne zestawienie danych, żeby było co zassać do aplikacji Shiny, którą niebawem zacznie robić Ania.

michalcisek commented 8 years ago

myślę że struktura będzie jednakowa do tej ze skryptu 'gumtree_scraping.R'. Tam wrzucam dane do tabeli gumtree_warszawa_pokoje (6 kolumn: cena, wielkosc, telefon, opis, data_dodania, link), a docelowo będę chciał żeby dane z 3 stron były insertowane dane do jednej tabelki.

tmikolajczyk commented 8 years ago

:+1:

michalcisek commented 8 years ago

Macie pomysł jak zescrapować pole, które jest ukryte pod przyciskiem? Konkretnie chodzi mi o telefon dla olx. Niby selectorgadget coś podpowiada, ale nie jest to odpowiednia wartość, a w źródle strony także nie znajdzie się pola z całym numerem. Np.: http://olx.pl/oferta/pokoj-1-os-bielany-encyklopedyczna-CID3-IDdX6wf.html#c1c0e14c53

MarcinKosinski commented 8 years ago

Najlepiej, żeby z każdego portalu dane trafiały do innej tabelki w obrębie jednej bazy danych. Usprawni to pracę, zobaczycie :)

Przyjrzę się Michał Twojemu skryptowi, i na bazie kodów Oli wyciągnę adres z ogłoszenia i dodam jako 6tą kolumnę w bazie danych.

W dniu 12 lutego 2016 10:38 użytkownik michalcisek <notifications@github.com

napisał:

Macie pomysł jak zescrapować pole, które jest ukryte pod przyciskiem? Konkretnie chodzi mi o telefon dla olx. Niby selectorgadget coś podpowiada, ale nie jest to odpowiednia wartość, a w źródle strony także nie znajdzie się pola z całym numerem. Np.: http://olx.pl/oferta/pokoj-1-os-bielany-encyklopedyczna-CID3-IDdX6wf.html#c1c0e14c53

— Reply to this email directly or view it on GitHub https://github.com/MarcinKosinski/CzasDojazdu/issues/3#issuecomment-183252805 .

MarcinKosinski commented 8 years ago

@michalcisek póki co zadałem pytanie na stacku z tym problemem :) Nie wygląda na coś niewykonalnego, ale oczywiście nie jesteśmy javascript-owcami. Polecam zazwyczaj jak najwięcej pisać pytań na stacku, najszybciej się można czegoś dowiedzieć. http://stackoverflow.com/questions/35384594/how-to-web-scrap-on-click-information-with-r

MarcinKosinski commented 8 years ago

@michalcisek poprawiłem trochę Twój skrypt, i teraz wyciągamy z opisu adres. Póki co umiemy wyciągnąć takie adresy

  [1] ""                   ""                   "Dywizjonu 303"      ""                  
  [5] "Bony"               "Bony"               ""                   "Baló"              
  [9] "Fort Wola"          "Pola"               "Dantego"            ""                  
 [13] "Agrykola"           ""                   ""                   ""                  
 [17] ""                   "Bony"               "Babicka"            ""                  
 [21] "Babicka"            "Arbuzowa"           "Gąsiorowskiej"      ""                  
 [25] "Bony"               "Doroszewskiego"     "Bony"               "Hery"              
 [29] ""                   "Magiera"            "Magiera"            ""                  
 [33] "Belgradzka"         "Emilii Plater"      "Wilanowska"         "Lwowska"           
 [37] ""                   ""                   ""                   "Ewy"               
 [41] ""                   "Nowolipki"          "Budy"               "Boczna"            
 [45] ""                   "Bardowskiego"       "Bagatela"           "Marsa"             
 [49] ""                   "Ewy"                ""                   "Kiprów"            
 [53] "Bolivara"           "Jasielska"          ""                   "Bagno"             
 [57] ""                   "Bohaterów Warszawy" "al. Jerozolimskie"  "Ewy"               
 [61] "Czechowicka"        "Sucharskiego"       ""                   ""                  
 [65] "Ewy"                ""                   ""                   ""                  
 [69] ""                   "Boruty"             "Bema"               ""                  
 [73] ""                   "Samolotowa"         "Wilanowska"         ""                  
 [77] "Ewy"                ""                   ""                   ""                  
 [81] ""                   ""                   "Boruty"             "Bartosika"         
 [85] "Pawia"              "Licealna"           "Samolotowa"         "Samolotowa"        
 [89] "Lwa"                "Skłodowskiej-Curie" "Szwankowskiego"     ""                  
 [93] "Samolotowa"         ""                   "Bruna"              ""                  
 [97] ""                   "Szwankowskiego"     ""                   "Podbipięty"        
[101] "Kozia"  

commit powyżej (widać na githubie w issue)

michalcisek commented 8 years ago

Dodałem skrypt do scrapowania z olx. 6 kolumn: cena, telefon (w przypadku gdy więcej niż jeden dostępny - wgrywany pierwszy), opis, link do zdjęcia, data dodania oraz link do oferty. Nie ma możliwości wyciągnięcia wielkości tak jak w przypadku gumtree.

MarcinKosinski commented 8 years ago

Nic nie szkodzi :) Moze da sie wielkosc wyciagnac z opisu :) Korzystales w koncu z tego rozwiazania http://stackoverflow.com/questions/35384594/how-to-web-scrape-on-click-information-with-r ?

michalcisek commented 8 years ago

tak, działa dobrze :)

MarcinKosinski commented 8 years ago

Przejrzę na dniach jak dodać do tego informacje o wyciąganiu adresu z opisu :) Świetna robota! Czy dałoby się wyciągnąć informację o dzielnicy (podobnie w przypadku gumtree)?

2016-02-15 20:46 GMT+01:00 michalcisek notifications@github.com:

tak, działa dobrze :)

— Reply to this email directly or view it on GitHub https://github.com/MarcinKosinski/CzasDojazdu/issues/3#issuecomment-184360332 .

michalcisek commented 8 years ago

Na gumtree można by zrobić tak, żeby nie pobierać danych z ogłoszeń dla Warszawy, tylko osobno dla podstron z dzielnicami (np. http://www.gumtree.pl/s-pokoje-do-wynajecia/mokotow/v1c9000l3200012p1). Ewentualnie w ogłoszeniu jest pole lokalizacja, czasami jednak jest puste. Najmniej efektywne byłoby wyciąganie info o dzielnicy z tytułu ogłoszenia. Na olx też w podobny sposób będzie można to wyciągnąć. Myślę że nie będzie problemu, dodam taką kolumnę do tabelki. Mam pytanie jeśli chodzi o otodom. Moim zdaniem pobieranie danych stąd byłoby powielaniem danych z OLX. W każdym ogłoszeniu które oglądałem (np. http://otodom.pl/oferta/pokoj-warszawa-wlochy-oplaty-licznikowe-i-inter-ID2U67T.html#aa738eed71 , http://otodom.pl/oferta/pokoj-zamieszkania-wart-ID2U65N.html#aa738eed71 , http://otodom.pl/oferta/pokoj-bemowo-730zl-ze-wszystkim-ID2U64W.html#aa738eed71) jest pole 'Kontak przez OLX', które przenosi nas do bliźniaczego ogłoszenia na tej witrynie. Myślicie więc że jest sens wyciągania danych z otodom?

MarcinKosinski commented 8 years ago

Na gumtree najlepiej wyciągać info o dzielnicy tak ja wyciągamy info o cenie czy powierzchni. Chyba by było najłatwiej :)

Co do powielanych stron olx i otodom: w takim wypadku na razie zostawmy te strony :)

Marcin Kosinski

Dnia 16.02.2016 o godz. 09:58 michalcisek notifications@github.com napisał(a):

Na gumtree można by zrobić tak, żeby nie pobierać danych z ogłoszeń dla Warszawy, tylko osobno dla podstron z dzielnicami (np. http://www.gumtree.pl/s-pokoje-do-wynajecia/mokotow/v1c9000l3200012p1). Ewentualnie w ogłoszeniu jest pole lokalizacja, czasami jednak jest puste. Najmniej efektywne byłoby wyciąganie info o dzielnicy z tytułu ogłoszenia. Na olx też w podobny sposób będzie można to wyciągnąć. Myślę że nie będzie problemu, dodam taką kolumnę do tabelki. Mam pytanie jeśli chodzi o otodom. Moim zdaniem pobieranie danych stąd byłoby powielaniem danych z OLX. W każdym ogłoszeniu które oglądałem (np. http://otodom.pl/oferta/pokoj-warszawa-wlochy-oplaty-licznikowe-i-inter-ID2U67T.html#aa738eed71 , http://otodom.pl/oferta/pokoj-zamieszkania-wart-ID2U65N.html#aa738eed71 , http://otodom.pl/oferta/pokoj-bemowo-730zl-ze-wszystkim-ID2U64W.html#aa738eed71) jest pole 'Kontak przez OLX', które przenosi nas do bliźniaczego ogłoszenia na tej witrynie. Myślicie więc że jest sens wyciągania danych z otodom?

— Reply to this email directly or view it on GitHub.

michalcisek commented 8 years ago

update skryptów do gumtree i olx.

W gumtree kolumny: cena, wielkość, telefon, opis, link do zdjęcia, adres, dzielnica, data dodania ogłoszenia, link do ogłoszenia W olx: cena, telefon, opis, link do zdjęcia, dzielnica, data dodania ogłoszenia, link do ogłoszenia

MarcinKosinski commented 8 years ago

Extra ;]

W dniu 16 lutego 2016 13:29 użytkownik michalcisek <notifications@github.com

napisał:

update skryptów do gumtree i olx.

W gumtree kolumny: cena, wielkość, telefon, opis, link do zdjęcia, adres, dzielnica, data dodania ogłoszenia, link do ogłoszenia W olx: cena, telefon, opis, link do zdjęcia, dzielnica, data dodania ogłoszenia, link do ogłoszenia

— Reply to this email directly or view it on GitHub https://github.com/MarcinKosinski/CzasDojazdu/issues/3#issuecomment-184664293 .

MarcinKosinski commented 8 years ago

Zapuszcze w czwartek zbieranie danych na serwerze co 30 minut :) [jak tylko dodam zbieranie adresow z opisow, thanks to @abrodecka ]. Wyjezdzam tez w gory, wiec dopiero pogadac bedziemy mogli w poniedzialek.

Sadze, ze zbieranie numerow telefonow jednak chyba jest niebezpieczne i niepotrzebne. Moze wystarcza nam same linki do ofert

michalcisek commented 8 years ago

Chcesz żebym usunął info o telefonie ze skryptów?

I taka uwaga, zanim zapuścisz skrypty na serwerze, dobrze będzie ręcznie stworzyć te tabelki.

MarcinKosinski commented 8 years ago

Zakomentuje je sobie chyba :) zanim puszcze.

Dzieki za komentarz

W dniu 17 lutego 2016 12:26 użytkownik Michał Cisek < notifications@github.com> napisał:

Chcesz żebym usunął info o telefonie ze skryptów?

I taka uwaga, zanim zapuścisz skrypty na serwerze, dobrze będzie ręcznie stworzyć te tabelki.

— Reply to this email directly or view it on GitHub https://github.com/MarcinKosinski/CzasDojazdu/issues/3#issuecomment-185160709 .

michalcisek commented 8 years ago

Offtop: http://www.kdd.org/kdd-cup - ktoś z was kiedyś słyszał albo brał udział w tym konkursie?

MarcinKosinski commented 8 years ago

Ja z konkursów dopiero pierwszy raz startuje przy tym https://www.kaggle.com/c/second-annual-data-science-bowl/leaderboard analiza obrazów 2D prezentujących zmiany 3D w czasie

W dniu 18 lutego 2016 10:29 użytkownik Michał Cisek < notifications@github.com> napisał:

Offtop: http://www.kdd.org/kdd-cup - ktoś z was kiedyś słyszał albo brał udział w tym konkursie?

— Reply to this email directly or view it on GitHub https://github.com/MarcinKosinski/CzasDojazdu/issues/3#issuecomment-185625235 .

MarcinKosinski commented 8 years ago

@michalcisek w https://github.com/MarcinKosinski/CzasDojazdu/commit/a605e365559492200d47c5a6687ed3bd11be68bd poszerzylem wyciaganie niektorych danych, tak bysmy mieli od razu wspolrzedne geograficzne punktow oraz tak, zebysmy mieli content - czyli specjalny kod html, ktory by sluzyl do popupu w leaflecie - https://rstudio.github.io/leaflet/popups.html - biblitoece ktora posluzy do stworzenia interface'u :)

Dalbys rade przerobic tak tez skrypt z olx? + Zakomentowalem telefony, jako wrazliwe dane

MarcinKosinski commented 8 years ago

@abrodecka przykladowych danych do aplikacji mozesz uzywac takich: https://github.com/MarcinKosinski/CzasDojazdu/blob/master/App/przykladowe_dane.R

Adresy maja juz numerki (tam gdzie sie dalo), sa wspolrzedne geograficzne i jest content do popup'aw leaflecie :)

michalcisek commented 8 years ago

@MarcinKosinski poprawione.

abrodecka commented 8 years ago

Wrzuciłam apkę shiny. Pierwsza strona oczywiście jeszcze do poprawy ;) Zmieniłam markery w leaflecie (chciałam, żeby marker podanej lokalizacji miał inny kolor niż pozostałe). Na razie korzystałam ze swoich danych i dodałam do nich współrzędne geograficzne. Jeżeli macie jakieś sugestie do poprawy wyglądu shiny to dajcie znać :)

2016-02-29 11:35 GMT+01:00 Michał Cisek notifications@github.com:

@MarcinKosinski https://github.com/MarcinKosinski poprawione.

— Reply to this email directly or view it on GitHub https://github.com/MarcinKosinski/CzasDojazdu/issues/3#issuecomment-190146900 .

MarcinKosinski commented 8 years ago

zerkne do tego po piatkowej obronie (w sobote jak sie ogarne :)) i mozemy ja juz moze publikowac w nadchodzacym tygodniu ?

MarcinKosinski commented 8 years ago

Czesc, zapuscilem zbieranie danych co 30 minut. Udostepniam Wam na mailach lacze dropbox gdzie w pliku czas_dojazdu.db jest baza danych cala, a w pliku inputData.rda wejscie pod aplikacje :) powinno sie to co 30 minut odswiezac - jak nie to krzyczcie. Poki co to zadanko zamykam