【发布时间】:2013-05-24 04:58:29
【问题描述】:
我正在尝试编写如下函数:
def get_urls(*urls,restrictions=None):
#here there should be some code that
#iterates through the urls and create
#a dictionary where the keys are the
#respective urls and their values are
#a list of the possible extentions. The
#function should return that dictionary.
首先,解释一下。如果我有一个网站:www.example.com,并且它只有以下页面:www.example.com/faq、www.example.com/history 和 www.example.com/第2页。这将是应用程序:
In[1]: site = 'http://example.com'
In[2]: get_urls(site)
Out[2]: {'http://example.com':['/faq','/history','/page/2']}
我花了几个小时研究,到目前为止这似乎是不可能的!那么我是否缺少一些可以做到这一点的模块?有没有一个存在但在 python 中不存在的?如果有,是什么语言?
现在你可能想知道为什么会有restrictions=None,这就是为什么:
我希望能够对可接受的 url 添加限制。例如restrictions='first' 可以使它只处理存在一个'/' 的页面。这是一个例子:
In[3]: get_urls(site,restrictions='first')
Out[3]: {'http://example.com':['/faq','/history']}
我不需要继续解释限制的想法,但你明白它的必要性!一些网站,尤其是社交网络,有一些疯狂的图片插件,在保留包含所有照片的原始页面的同时清除这些插件很重要。
所以是的,我完全没有代码,但那是因为我不知道该怎么做!但我想我已经清楚自己需要能够做什么,所以,这可能吗?如果是,如何?如果没有,为什么不呢?
编辑:
所以在一些答案和 cmets 之后,这里有更多信息。我想获得一个 url,不一定是域,并返回一个字典,其中原始 url 作为键,该 url 的所有扩展名的列表作为项目。这是我之前的'example.com'的例子:
In[4]: site = 'http://example.com/page'
In[5]: get_urls(site)
Out[5]: {'http://example.com/page':['/2']}
爬取的例子和漂亮的汤很棒,但是如果有一些没有直接链接到任何页面上的url,那我就找不到了。是的,这通常不是问题,但我希望能够!
【问题讨论】:
-
除非该网站具有易于解析的站点地图,否则您可能需要抓取它。
-
“一切皆有可能”有多宽泛?该页面上的所有链接?整个网站的所有链接?到目前为止,您尝试过什么?
-
@Blender:我没有真正尝试过任何东西,因为我无法为此找到一个库。看到我不知道如何获取给定站点上的所有 url,我想知道哪个模块能够做到这一点。一切皆有可能,但函数中会有一个
restrictions部分,所以它只做一些。 -
通常不可能获取给定站点上的所有 URL。不是因为 Python 的某些缺陷,而是因为 HTTP 协议不允许这样做。
-
所以没有办法访问它?有什么文章可以解释原因吗?