我正在尝试随机获取互联网页面的样本,我不想因为各种原因放弃谷歌搜索结果。以下是我尝试的方法
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
嗯,这不管用。首先,它工作太慢了。第二,它给了我不提供网页服务的地址。不管怎样,我能把代码做得更好吗,或者你能建议另一种方法来解决这个问题吗?在
嗯。。。在
您的代码运行缓慢,因为它会阻止执行,直到(a)主机被查找到(b)您可能会建立连接,或者更糟的是连接超时,这可能需要一段时间。
您的代码给出的主机名不提供web页面服务有几个可能的原因:(a)使用端口80来服务web页面仅仅是一种约定。我可以从我的服务器在端口80上提供我想要的任何东西。(b) 顶级域可以配置为不提供任何服务。E、 g.只有子域或某些url才会产生有效的http响应。(c) 我不知道还有几个原因。
解1。你必须去异步。This会有帮助的。在
我想,2。无法解决。如果可以,size estimates of the web将更加可靠。在
关于更好的策略,你的问题的评论仍然适用。在
此外,可能有一些web服务器只分配了IPv6地址,因此您的示例以另一种方式倾斜。这在今天没有太大的实际意义,但现在情况变化很快。在
假设大多数HTTP服务器运行在具有域名(例如,不仅仅是IP地址)的主机上,您可以通过DNS查找(例如dig)进一步验证您的随机IP地址。在
另外,您不应该允许您的算法创建一个随机的IP,它是私有IP范围的一部分。在
相关问题 更多 >
编程相关推荐