【问题标题】:How do I go to a random website? - python如何访问随机网站? - Python
【发布时间】:2014-01-04 08:45:12
【问题描述】:

如何生成随机但有效的网站链接,无论语言如何。实际上,它生成的网站语言越多样化越好。

我一直在使用其他人的网页上的脚本,我怎么能不依赖这些随机的站点转发脚本并自己制作?。我一直在这样做:

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)

【问题讨论】:

  • 有什么理由拒绝投票?
  • 我看不出有任何理由对此表示反对。我可以想象投票结束它,因为它不是一个编码问题,而且它可能有点过于开放,但我认为它是可以回答的。

标签: python url random web browser


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    我一直是在别人的网页上使用别人的脚本来做的,我怎么能不依赖这些随机的站点转发脚本并自己制作呢?

    有两种方法可以做到这一点:

    • 创建您自己的spider,收集大量网站,然后从中挑选。
    • 访问一些预先存在的网站集合,并从该集合中进行选择。例如,DMOZ/ODP 让您download their entire database;* Google 曾经有一个自定义的随机站点 URL;** 等等。

    没有其他方法可以解决(除了随机生成和测试任意字符的有效字符串,这将是一个非常糟糕的主意)。

    为自己构建一个网络蜘蛛可能是一个有趣的项目。像Scrapy 这样的链接驱动的抓取库可以为您完成很多繁重的工作,让您编写自己关心的部分。


    * 请注意,与 Google 或 Yahoo 之类的数据库相比,ODP 是一个非常小的数据库,因为它主要是人工编辑的重要网站集合,而不是自动生成的任何人在网络上发布的所有内容的集合。

    ** Google 的随机网站功能是由受欢迎程度和您自己的搜索历史共同推动的。但是,通过向它提供一个空的搜索历史记录,您可以删除等式的这一部分。不管怎样,我认为它已经不存在了。

    【讨论】:

    • 可能是因为这不是他们想看到的,或者是用一种居高临下的语气。 +1 使用 spider 关键字,这是一个很好的研究起点。
    • @jwarner112:你说得对,spider 是整个事情的关键,也许这还不够明显。我添加了指向 Wikipedia 文章的链接,它提供了比单词本身更好的起点。
    • 尽管我敢打赌,您几乎可以将任意 2 或 3 个随机字母放在一起并从中获得有效的 .com 地址。
    • @microslop:只有几行urllib 代码……所以,http://XY.com 形式的 676 个 URL 中有 558 个返回成功结果。其余的有 1 个返回 DNS 错误——我真的应该记下哪一个——4 个返回 HTTP 错误,少数立即拒绝连接,但大多数只是超时。
    • @abarnert: Hrm...大约 85% 的成功率,还不错。我只记得几年前当我注册一个域时,我发现一个网站列出了从 A - ZZZZZ 开始的可用地址,乍一看,看起来所有 2 和 3 个字母的名称都被占用了。不过感谢您抽出宝贵时间查看,知道这一点很有趣。
    【解决方案3】:

    概念解释,而不是代码解释。

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

    最简单的设计自己的方法可能是要求看看他们的,尽管我不确定你会在那里取得成功。

    作为程序员最好的方法就是简单地破译 URL 语言的本质。练习构建字符串并对其进行测试,或者自己编译一个 巨大 的数据库。

    作为一种混合,您可以尝试构建两个东西。一个脚本,当您离开时,它会搜索/测试 URL 并将它们添加到数据库中。另一个脚本从该数据库中随机选择一行发送给您。第一个跑得越久,第二个就越好。

    编辑:做 Abarnert 关于蜘蛛的事情,这比我的回答要好得多。

    【讨论】:

    • “破译 URL 语言的本质”几乎毫无意义。 URL 具有良好的文档记录和简单的语言,但绝大多数合法 URL 没有找到任何资源。这就像尝试使用随机字符和标点符号来生成人类文本的段落。
    • @abarnert 措辞可能含糊不清,更多的是关于检测 human 语音中的模式。例如,URL 生成器将两个常用词(例如“horse”、“ball”)配对在一起可能比字母数字键的随机字符串(例如“h0yze”、“c5ü#”)更成功。这是一项语音研究,仅仅是因为人类决定了哪些 URL 的位置。
    • 啊,这是一个更有趣的项目。甚至还有关于这方面的研究论文,尽管可能很难弄清楚哪些已经过时以至于毫无用处。 (我记得读过一篇关于根据公司名称、品牌名称、产品名称等在网上找到公司的统计可能性的论文,这在 90 年代中期写的时候真的很有趣,但今天可能没有太大帮助。)
    • 作为一个大概年轻得多的人,我只是在一个(小时候)我能够问“www.doghat.com 存在吗?”的世界里长大,同样的原则可以很容易地扩大规模。
    • 嗯,我也是在这样一个世界长大的,我可以问这个问题并立即知道答案。但那是因为它总是“不”。 :)
    猜你喜欢
    • 1970-01-01
    • 2020-06-22
    • 1970-01-01
    • 1970-01-01
    • 2015-10-22
    • 1970-01-01
    • 2020-09-16
    • 1970-01-01
    • 2015-03-16
    相关资源
    最近更新 更多