Tworzę prostą aplikację, w której muszę śledzić linki ze strony itd., Tworząc w ten sposób bardzo podstawowy prototyp robota sieciowego.
Kiedy to testowałem, natknąłem się na robota.txt, który ma limit trafień dla wszystkich robotów zewnętrznych próbujących zaindeksować ich witrynę. Na przykład, jeśli robot.txt strony internetowej ma limit trafień nie większy niż 1 hit na sekundę (jak wikipedia.org) z danego adresu IP, a jeśli indeksuję kilka stron Wikipedii w tempie 1 strony na sekundę, a następnie jak oszacować, ile wyświetli się podczas indeksowania?
Pytanie: jeśli pobieram jedną całą stronę za pomocą urllib pytona, to ile trafień będzie ona odpowiadać?
Oto mój przykładowy kod:
import urllib.request
opener = urllib.request.FancyURLopener({})
open_url = opener.open(a)
page = open_url.read()
print page
Odpowiedzi:
1 dla odpowiedzi № 1Jeśli pobierzesz całą stronę z witryny za pomocą urllib
, będzie stanowić jedno (1) trafienie.
Zapisz stronę w zmiennej i od tej pory pracuj z tą zmienną.
Dodatkowo radzę ci użyć requests
zamiast urllib
. O wiele łatwiejsze / lepsze / mocniejsze.
Link do dokumentacja wniosków.
1 dla odpowiedzi nr 2
Jedną z rzeczy, które możesz zrobić, jest wprowadzenie odstępu czasowego między dwoma żądaniami, rozwiąże to problem, a także uniemożliwi blokowanie.