Jak otrzymać wyniki wyszukiwania z podanymi polami wyszukiwania?

0

Jak trzeba skonstruowac plik node, zeby odpalił nastepujący skrypt i wykonał rekursywne zapisywanie serwisu internetowego z wynikami dla podanych parametrów w polu wyszukiwanie ? Tzn musi byc jakis frontend czy wystarczy samo nodemone index.js oraz jakie parametry trzeba podać do dynamicznego wyszukiwania

np dla https://theprotocol.it/

plik index.js

const websiteUrl = "https://nodejs.org/";

scrape({
  urls: [websiteUrl],
  urlFilter: function (url) {
    return url.indexOf(websiteUrl) === 0;
  },
  recursive: true,
  maxDepth: 50,
  prettifyUrls: true,
  filenameGenerator: "bySiteStructure",
  directory: "./node-website",
})
  .then((data) => {
    console.log("Entire website succesfully downloaded");
  })
  .catch((err) => {
    console.log("An error ocurred", err);
  });
0

Podałeś jakiś kod co kompletnie nie ma żadnego znaczenia i jak mam ci niby pomóc?

0
GodOfCode. napisał(a):

Podałeś jakiś kod co kompletnie nie ma żadnego znaczenia i jak mam ci niby pomóc?

sorry, ale bylo pozno i zmeczony byle...
tuatja jest kod ladujacy cala strone, ale nie wiem jak podac parametry wyszukiwania

https://ourcodeworld.com/articles/read/374/how-to-download-the-source-code-js-css-and-images-of-a-website-through-its-url-web-scraping-with-node-js

1

To jest jakiś moduł npm, który powinien pobrać stronę, tam na example zrobili tylko maxDepth: 1, głębokość 50 to dużo z cachowaniem powinno udać się przejść.
Nie wiem na ile to działa bo nie testowałem, ale jak ci te example nie działa to nie wiem.

Tak poza tym narzędziem, to ręcznie też to idzie szybko naklepać, dam ci imperatywne rozwiązanie :P
Zapisanie całej strony to jest z tym trochę roboty, trzeba dobrać się do wszystkich linków na danej stronie.
Można użyć querySelectora $$("[href]"]) i $$("[src]") otrzymasz listę linków na danej stronie.
Jeśli to pliki .css, .js, .img, .png czy svg to zapisujesz na dysk i modyfikujesz te elementy usuwając adres strony, żeby nie było https:// a tylko relatywny adres ./.

Każdy .css wewnątrz może ładować inne zasoby to te .css też trzeba poznajdywać url('/'), pobrać te wszystkie pliki.
Z .js będzie różnie jako, że może tam się bardzo dużo dziać, kod może być mumifikowany, obfuskowany to nawet bez interpretera się nie obejdzie.

Tutaj będzie różnie, webbrowser może ci całą stronę postawić potem możesz nawet podpiąć się pod event listenery, fetch/webrequest i logować całą komunikację.

Można też proxy użyć, przechwycić wszystkie zapytania wysłane przez strone do wystartowania, zwrócone requesty zapisać na dysk z takim samym położeniem co request. Poszukać w kodzie js tych url i podmienić na relatywne, bez dostępu na zewnętrzne serwery lub te proxy mogło by ręcznie przemapowywać adresy z zewnętrznych za pierwszym razem pobiera i zapisuje, a przy każdym następnym już korzysta z cache i jak już nie będzie żadnego elementu, który nie istnieje w cache to masz jakby zamapowaną część serwera.

Tak patrzysz potem na stronę co nie działa, co działa i możesz myśleć jak to poprawić.
Im bliżej stronie do statycznej tym będzie łatwiej, można i też z własnym serwerem proxy, który będzie imitował zachowanie, atrapa rzeczywistego serwera.

Z webbrowserem i proxy było by najłatwiej.
Jedziemy tak odpalamy w webbrowserze stronę, proxy rejestruje wszystkie requesty i cachuje, tutaj problem będzie jak będą jakieś zaawansowane zapytania do api, nawet jak zrobimy cache requestów to i tak mogą mieć jakieś zmienne parametry przez co trudniej będzie je zcachować.
Potem robimy set z linkami odwiedzonymi i iterujemy po nich i dodajemy nowe jak się skończy.
I potem te same odpowiedzi co dynamicznie uzyskaliśmy podajemy statycznie, wtedy nie trzeba adresu modyfikować strony, bo tym się proxy zajmie.
Można by też było click eventy wysyłać, bo czasem po samych linkach można pominąć element, który jest jakimś buttonem, a może nawet być innym elementem, bo można tak zrobić.

0

dzieki

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