【发布时间】:2011-09-18 02:24:45
【问题描述】:
我实际上使用的是 PHP,但是这种爬取可以通过任何编程语言来完成。要适应很多情况会有点困难。请帮我看看问题,请给我一些建议,看看我是否走对了方向。
我所知道的是当前的 url 地址,我可以从中获取来自 <a href=" 或来自 <frame src=" 的链接列表。
我在做的是:从当前的url地址,我可以先得到root url,比如从http://www.abc.com/def,我可以先得到http://www.abc.com。这是为了迎合<a href="/fff.html"的情况,所以我得先知道root url。
其次,我需要从当前 url 中获取 url 目录,这有点困难,我仍然不知道如何完美地完成它。比如http://www.abc.com/def/xyz.htm,它的url目录是http://www.abc.com/def。这是为了迎合<a href="../../xyz.html">的情况。
我面临的问题是,如何获取当前的url目录?例如,如果当前 url 是http://www.abc.com/def,我怎么知道 def 是目录还是文件呢?如果 def 是一个文件,那么 url 目录就是http://www.abc.com。但是如果 def 是一个目录,那么 url 目录就是http://www.abc.com/def。
你可以说,如果最后有“/”,那就是目录。但从我的角度来看,当我抓取网页时,我并不能真正确保网页构建器会在目录 url 的末尾添加“/”。目录 url 是完全有效的,例如,如果 def 是一个目录,那么 http://www.abc.com/def 可能代表 http://www.abc.com/def/index.html。
由于很难知道http://www.abc.com/def是目录还是脚本文件,所以很难从<a href="xyz.html">等相对href制作完整的url。
我是不是把问题复杂化了?有什么解决办法吗?
还有其他情况,例如 href="# 表示锚点,然后我将其附加到当前 url 的末尾。这对于任何当前 url 情况是否正确且有效?意思是,这对于以下情况是否有效当前url是http://www.abc.com/def(def是一个目录),http://www.abc.com/def#xyz会被转换成http://www.abc.com/def/index.html#xyz吗?
对于 href="javascript: 或 href="vbscript: 等,我将忽略它。
对于 href="xyz.???",如果 ???是图像文件、exe 文件或任何无效的 html 文件,我会忽略它们吗?
谢谢。
这个问题可能有点乱,希望我解释清楚。
【问题讨论】:
-
+1 问题的格式和表述都很好!另外,不要忘记
<img src="...">。 -
仅仅因为这可以适用于任何编程语言并不意味着你应该添加编程语言标签,它可能意味着你不应该添加任何。我已经删除了
python,因为你的选择似乎是任意的,但是因为你说这就是你实际工作的原因,所以离开了 PHP。 -
您好,抱歉,我添加了流行语言标签,因为我认为这会让更多可能理解问题的人看到问题。
-
你不应该添加标签,除非它确实相关,但它确实有效——我们回答的主要是 Python 人。
标签: php python web-crawler