Próbuję uzyskać losową próbkę stron internetowych, nie chcę wyrzucać wyników wyszukiwania google z różnych powodów. Oto, jak tego próbowałem;Jak zrobić losową próbkę z Internetu?
import socket
from random import randint
def doesitserveawebpage(ip):
ip=str(ip)
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
s.connect((ip, 80))
s.shutdown(2)
return True
except:
return False
def givemerandomwebsite():
adrformat = "%d.%d.%d.%d"
while True:
adr = adrformat % tuple(randint(0,255) for _ in range(4))
try:
print "Tring %s" % adr
name = socket.gethostbyaddr(adr)
if (doesitserveawebpage(adr)):
return name
else:
continue
except socket.herror:
continue
Cóż, to nie działa. Po pierwsze, działa zbyt wolno. Po drugie, daje mi adresy, które nie obsługują stron internetowych. Czy mimo to mogę poprawić ten kod, czy może zaproponowałbyś inny sposób rozwiązania tego problemu?
Nowoczesne serwery WWW (HTTP 1.1) * wymagają * nazwy hosta, ponieważ będą wyświetlać * wiele * różnych witryn na tym samym adresie IP. Twoje podejście nie zadziała. –
Czy możesz wyjaśnić powody, dla których chcesz pobrać próbkę? Może pomóc nieco zawęzić obszar problemowy (na przykład węższą populację początkową niż Internet). –
Ponadto, wyszukując losowo adresy IP na całym świecie, istnieje większe prawdopodobieństwo, że napotkasz maszyny, które * nie * hostują stron internetowych niż te, które je obsługują. –