Sto cercando di ottenere un campione casuale di pagine internet, non voglio scartare i risultati di ricerca di Google per vari motivi. Ecco come l'ho provato a fare;Come creare un campione casuale da Internet?
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
Bene, non funziona. Innanzitutto, funziona troppo lentamente. In secondo luogo, mi dà addres che non servono pagine web. Esiste comunque la possibilità di migliorare questo codice o suggerire un altro modo per risolvere questo problema?
moderni server web (HTTP 1.1) * * bisogno di un nome host, in quanto serviranno * * molti siti diversi sullo stesso indirizzo IP. Il tuo approccio non funzionerà. –
Puoi approfondire i motivi per cui desideri il campione? Potrebbe aiutare a restringere un po 'il dominio del problema (ad esempio a una popolazione iniziale più ristretta rispetto a Internet). –
Inoltre, colpendo gli indirizzi IP casuali in tutto il mondo, è più probabile che incappiate in macchine che * non * ospitano siti Web rispetto alle macchine che lo fanno. –