Pobranie danych geograficznych ze strony zabytek.pl

0

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

screenshot-20231114132736.png

0

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ę.

0

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:

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" );
  }
0

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).
0

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

0

@Xarviel:

Sądzę że słusznie sprowadziłeś temat do pozyskiwania danych z "backendu". Prawie zawsze to dobra filozofia.

@GISowiec:

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)

1

Nie znam się ale jakieś dane przez api można pobierać:

https://dane.gov.pl/pl/dataset/1951,ewidencja-zabytkow-archeologicznych/resource/36023/table

0

@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.

1 użytkowników online, w tym zalogowanych: 0, gości: 1