Cześć,
Może tu znajdę odpowiedź...
Mianowice chciałbym pobrać lokalizację (pineski) zabytków archeologicznych z tej mapy https://zabytek.pl/pl/mapa --> zabytki archeologiczne
Mogą być w jakiejkolwiek postaci - plik json z koordynatami, gml, lub nawet tekstówka ze współrzędnymi X,Y
Próbowałem sam to pobrać, nawet korzystając z wtyczki Web Scraper - Free Web Scraping dla Chrome, ale bez efektu. Czy jest w ogóle możliwość pobrania czegokolwiek z tej strony?
Dzięki za pomoc
Tej strony tak naprawdę nie ma. Ona powstaje unikalna w twojej przeglądarce.
Czynność jest często nazywana web scraping
Czy da sie zrobic ... wedle dokładnych założeń i budżetu.
ps. widzę że w podobnych wątkach umarło jak doszło do oczekiwania szczegółów.
Wiec bez współpracy, bez szczegółów, bez celów , priorytetów.... nie da się.
Banał, jednak musisz wiedzieć, że to zwykła kradzież lub przynajmniej działanie na szkodę. Zanim jednak się coś zacznie warto poczytać a przede wszystkim pomyśleć.
W bazie mamy ponad 600 000 obiektów każda strona ma osadzone obrazki więc trzeba przeciągnąć do siebie: 286GB danych HTML do dalszego parsowania. Myślę, że jak się z nimi skontaktujesz zapłacisz i wniesiesz jakąś symboliczną opłatę to może dostaniesz tą bazę bez robienia z siebie złodzieja.
Poza tym to są dane publiczne i tu masz punkt zaczepienia:
- https://nid.pl/zasoby/rejestr-zabytkow-zasoby/
- https://dane.gov.pl/pl/dataset/210
- https://dane.gov.pl/pl/dataset/210/resource/35932/table
Gdyby jednak jakiś osioł chciał to scrapować to żeby pobrać całą bazę wystarczy kilka linijek kodu w PHP (o ile nas nie zablokują).
$data = file_get_contents ( 'https://zabytek.pl/pl/api/map/markers?all=1&version=2023-11-12%2004:30:01' );
file_put_contents ( 'points.json', $data );
$dataArr = json_decode ( $data, true );
forEach ( $dataArr as $itm ){
$id = $itm[0];
$infoDat = file_get_contents( "https://zabytek.pl/pl/api/map/marker/{$id}" );
file_put_contents ( "info_{$id}.json", $infoDat ) ;
$pageUrl = "https://zabytek.pl".json_decode ( $infoDat, true )['url'];
$pageContent = file_get_contents( $pageUrl );
file_put_contents ( "page_{$id}.html", $pageContent ) ;
sleep(1); // można mniejszy czas albo jakieś odpytywanie równoległe...
}
Uwaga: file_put_contents musi obsługiwać CURL.
A tu już wersja na "wypasie" z licznikiem :-)
<?php
@mkdir ( 'point_info' ); @mkdir ( 'point_web' );
if ( !file_exists( 'points.json' ) ){
$data = file_get_contents ( 'https://zabytek.pl/pl/api/map/markers?all=1&version=2023-11-12%2004:30:01' );
file_put_contents ( 'points.json', $data );
} else $data = file_get_contents('points.json');
$dataArr = json_decode ( $data, true );
$count = count($dataArr) ;
$ii = 0;
forEach ( $dataArr as $itm ){
$id = $itm[0];
$infoDat = file_get_contents( "https://zabytek.pl/pl/api/map/marker/{$id}" );
file_put_contents ( "point_info/info_{$id}.json", $infoDat ) ;
$pageUrl = "https://zabytek.pl".json_decode ( $infoDat, true )['url'];
$pageContent = file_get_contents( $pageUrl );
file_put_contents ( "point_web/page_{$id}.html", $pageContent ) ;
$ii++;
echo ( "Wykonano: {$ii} z {$count}\r\n" );
}
4w0rX4t4X dzięki za odpowiedź - daje mi to nadzieję, że jednak można coś z tej strony wyciągnąć. Te 600 tyś rekordów dotyczy wszystkich zabytków. Mnie interesują tylko zabitki archeologiczne a tych jest 467tyś.
Kilka słów komentarza ode mnie:
- Dane są publiczne i powinny być udostępnione na wniosek o dostępie do danych publicznych. Projekt był/jest realizowany z naszych pieniędzy więc nie powinno być to problemem. Jednak jest. NID nie udostępnia tych danych w żadnej formie, na żaden wniosek. Już to przerabiałem.
- Te blisko 300GB danych zawierają skany map z AZP. To jest mi zupełnie niepotrzebne. Dla mnie istotne są tylko lokalizacje punktów. Nie potrzebuje linków do map. Gdyby do tego doszła informacja z tabeli atrybutów (po kliknięciu na pineskę) było by już idealnie, ale nie jest to aż tak konieczne.
- Co do określenia tego kradzieżą to nie do końca się z tym zgadzam. Po pierwsze jak sam zauważyłeś są to dane publiczne, możemy korzystać z tej mapy i sprawdzać lokalizację stanowisk archeologicznych. Nie ma limitowanego, czy płatnego dostępu do tych danych. Jedynym utrudnieniem jest to, że nic poza wyświetleniem nie można z nimi zrobić. Ja natomiast chciałbym je przetworzyć i sprawdzić ile takich stanowisk jest w każdej gminie, jak mają się te lokalizację do obecnej zabudowy itp analizy przestrzenne. Do tego potrzebuje ich właśnie w postaci wektorowej (shp, gml, kml albo nawet punkty X,Y).
Nie znam się, ale... na oko łatwiej byłoby wyciągnąć dane stąd https://zabytek.pl/pl/obiekty?sekcja=zabytki-archeologiczne (nie mam pewności, czy wszystkie 467k rekordów jest tutaj opisana, pewnie nie :P).
Wchodzimy w interesujący nas obiekt https://zabytek.pl/pl/obiekty/zamek-623763 i z pojedynczej mapki pobieramy lokalizacje 517121.558160501,288909.732392246,517178.219442937,288961.210150422
Sądzę że słusznie sprowadziłeś temat do pozyskiwania danych z "backendu". Prawie zawsze to dobra filozofia.
Amatorzy zwykle napalają się na pozyskanie danych z tego co widzą - widoku. To nigdy nie jest dobre, choć czasami nieuniknione (cały szemrany rynek bookmacherski nawzajem sobie kradnie dane - tutaj co 2 tygodnie ejst jakiś mesjasz co na tym planuje zarobić miliony)
Nie znam się ale jakieś dane przez api można pobierać:
https://dane.gov.pl/pl/dataset/1951,ewidencja-zabytkow-archeologicznych/resource/36023/table
@GISowiec: te 300GB zawiera co zawiera. Jeśli chcesz parsować to przez WWW to i tak musisz to pobrać bo te rzeczy są osadzone w kodzie HTML.
GISowiec napisał(a):
4w0rX4t4X dzięki za odpowiedź - daje mi to nadzieję, że jednak można coś z tej strony wyciągnąć. Te 600 tyś rekordów dotyczy wszystkich zabytków. Mnie interesują tylko zabitki archeologiczne a tych jest 467tyś.
Kilka słów komentarza ode mnie:
- Dane są publiczne i powinny być udostępnione na wniosek o dostępie do danych publicznych.
No i pewnie są tylko trzeba jak człwoiek porozmawiać.
- Projekt był/jest realizowany z naszych pieniędzy więc nie powinno być to problemem. Jednak jest. NID nie udostępnia tych danych w żadnej formie, na żaden wniosek. Już to przerabiałem.
Patrząc jak zabierasz się do tematu od tylnej strony to coś nie chce mi się wierzyć, że zrobiłeś to jak należy
- Te blisko 300GB danych zawierają skany map z AZP. To jest mi zupełnie niepotrzebne. Dla mnie istotne są tylko lokalizacje punktów. Nie potrzebuje linków do map. Gdyby do tego doszła informacja z tabeli atrybutów (po kliknięciu na pineskę) było by już idealnie, ale nie jest to aż tak konieczne.
- Co do określenia tego kradzieżą to nie do końca się z tym zgadzam. Po pierwsze jak sam zauważyłeś są to dane publiczne, możemy korzystać z tej mapy i sprawdzać
Czym innym jest oglądać stronę w przeglądarce a czym innym nap...ać komuś w serwer 1 800 000 żądań i generować potężny transfer. Pewnie i tak by Cię zablokowali i słusznie.
- lokalizację stanowisk archeologicznych. Nie ma limitowanego, czy płatnego dostępu do tych danych. Jedynym utrudnieniem jest to, że nic poza wyświetleniem nie można z nimi zrobić. Ja natomiast chciałbym je przetworzyć i sprawdzić ile takich stanowisk jest w każdej gminie, jak mają się te lokalizację do obecnej zabudowy itp analizy przestrzenne. Do tego potrzebuje ich właśnie w postaci wektorowej (shp, gml, kml albo nawet punkty X,Y).
Do analizy ilościowej współrzędne GPS masz już w pierwszym pliku, który wskazałem. Plik w formacie JSON zawiera listę identyfikatorów obiektów + współrzędne GPS. Drugim żądaniem doczytujesz nazwę i adres - wciąż bez konieczności pobierania ciężkich HTML.
Nadal to jednak 1 200 000 odwołań do serwera.
$data = file_get_contents ( 'https://zabytek.pl/pl/api/map/markers?all=1&version=2023-11-12%2004:30:01' );
file_put_contents ( 'points.json', $data );
Poza tym masz jeszcze takie coś: https://mapy.zabytek.gov.pl/nid/
Tu też jest masa linków do jakiś źródeł danych.