如何使用Python访问随机网站?

3

如何生成一个随机但有效的网站链接,不受语言的限制。实际上,生成的网站语言越多样化,就越好。

我一直是通过使用其他人网页上的脚本来完成这个任务的,我该如何不依赖这些随机网站转发脚本而制作自己的脚本呢?我的做法如下:

import webbrowser
from random import choice
random_page_generator = ['http://www.randomwebsite.com/cgi-bin/random.pl',
                         'http://www.uroulette.com/visit']
webbrowser.open(choice(random_page_generator), new=2)

下投票的原因是什么? - alvas
我看不出有任何理由去踩这个。我可以想象投票关闭它,因为它不是一个编码问题,可能有点太开放了,但我认为它是可回答的。 - abarnert
3个回答

7
我一直在使用其他人网页上的脚本,如何不依赖这些随机网站转发脚本并自己制作?
有两种方法可以做到这一点:
  • 创建自己的 网络爬虫 ,收集大量网站,并从中选择。
  • 访问一些现有的网站集合,并从中选择。例如,DMOZ/ODP允许您 下载整个数据库;* Google曾经有一个定制的随机站点URL;**等等。
没有其他办法(除非随机生成和测试任意字符的有效字符串,这是一个极其糟糕的想法)。
为自己构建一个网络爬虫可以成为一个有趣的项目。像 Scrapy 这样的链接驱动的抓取库可以为您完成大部分繁重的工作,让您专注于编写您关心的部分。
注意,与Google或Yahoo相比,ODP是一个相当小的数据库,因为它主要是一个由人编辑的重要网站集合,而不是一个包含网络上所有任何人都发布的内容的自动生成集合。
Google的随机网站功能是由流行度和您自己的搜索历史记录驱动的。但是,通过提供一个空的搜索历史记录,您可以删除该方程式的一部分。无论如何,我认为它已经不存在了。

3
可能是因为这不是他们想要看到的,或者它带有一种居高临下的语气。关于“蜘蛛”关键词的使用给了研究一个很好的起点。 - jwarner112
1
@jwarner112:你说得对,“spider”是整个事情的关键,也许这一点不够明显。我添加了一个链接到维基百科文章,它提供了比单词本身更好的起点。 - abarnert
虽然我敢打赌您几乎可以将任意2个或3个随机字母组合在一起并从中获得有效的.com地址。 - microslop
@微软: 这只是几行 urllib 代码... 所以,676个形如 http://XY.com 的URL中有558个返回成功结果。其余的中有1个返回DNS错误——我真的应该记下是哪一个——4个返回HTTP错误,还有一些立即拒绝连接,但大多数都超时了。 - abarnert
@abarnert:嗯...成功率大约85%,还不错。我只记得几年前注册域名时,我发现一个网站列出了从A到ZZZZZ的可用地址,乍一看似乎所有的2个和3个字母的名称都被占用了。但感谢您抽出时间来检查,这很有趣。 - microslop
@微软公司:好吧,675/676个域名已经被注册了(我敢打赌第676个正在转移中),但其中15%的域名在80端口上没有任何服务器。 - abarnert

1

这是一个概念性解释,不是代码。

他们的脚本可能非常庞大和全面。如果它是一个随机网站 选择器,它们有一个巨大的、巨大的 网站列表,每行一个网站,脚本只会选择其中一个。如果它是一个随机URL 生成器,它可能会生成一串字母(例如“asljasldjkns”),将其插入到http://.com之间,尝试查看它是否是有效的URL,如果是,则发送该URL 给你。

作为程序员,设计自己的最简单方法可能就是要求查看他们的脚本,但我不确定您在那里能够成功。

作为混合方式,您可以尝试构建两个内容。一个脚本,当你离开时,搜索/测试URL并将其添加到数据库中。另一个脚本随机从此数据库中选择一行并发送给你。第一个运行的时间越长,第二个就会变得越好。

编辑:按照Abarnert有关蜘蛛的建议进行操作,这比我的回答更好。


1
“破译URL语言的本质”几乎是毫无意义的。URL具有被广泛记录和简单的语言,但绝大多数合法的URL并不会定位到任何资源。这就像试图使用随机字符和标点生成人类文本段落一样。 - abarnert
1
@abarnert 这里的措辞可能有些模糊,更多是关于检测人类语言中的模式。例如,URL生成器很可能更成功地将两个常见单词配对在一起(例如“horse”,“ball”),而不是随机的字母数字键串(例如“h0yze”,“c5ü#”)。这是一项语言研究,因为人类决定哪些URL去哪里。 - jwarner112
1
啊,这是一个更有趣的项目。甚至有研究论文涉及到这个领域,尽管可能很难弄清楚哪些已经过时了,毫无用处。(我记得读过一篇关于基于公司名称、品牌名称、产品名称等在线查找公司的统计概率的论文,当它在90年代中期写成时真的很有趣,但今天可能不太有用了。) - abarnert
作为一个年龄可能比较年轻的人,我成长在这样一个世界中(小时候)我可以问“www.doghat.com是否存在?”,同样的原则也可以轻松扩展。 - jwarner112
2
嗯,我也在一个可以随时问这个问题并立即得到答案的世界中长大。但那是因为答案总是“不行”。 :) - abarnert

1

其他答案建议构建大型URL数据库,而我过去使用并在此处记录的另一种方法是:

http://41j.com/blog/2011/10/find-a-random-webserver-using-libcurl/

创建一个随机IP地址,然后尝试从该地址的端口80抓取站点。这种方法在现代虚拟托管站点中并不完美,当然只获取顶部页面,但它可以是获取随机站点的一种简单有效的方式。上面链接的代码是C语言编写的,但应该很容易从Python中调用,或者该方法可以很容易地适应Python。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接