抓取网页时,如何从<a href=""> or attributes</a>获取完整网址

时间:2011-09-18 02:24:45

标签: php python web-crawler

我实际上在使用PHP,但这种爬行可以通过任何编程语言完成。迎合很多情况会有点困难。请帮我看一下这个问题,请给我一些关于我是否正确方向的建议。

我所知道的是当前的网址,我可以从中获取<a href="<frame src="的链接列表。

我正在做的是:从当前的网址开始,我可以先从http://www.abc.com/def获取根网址,我可以先获得http://www.abc.com。这是为了迎合<a href="/fff.html"的情况,所以我必须首先了解根网址。

其次,我需要从当前url获取url目录,这有点困难,我仍然不知道如何完美地完成它。例如,从http://www.abc.com/def/xyz.htm开始,它的url目录为http://www.abc.com/def。这是为了迎合<a href="../../xyz.html">的情况。

我面临的问题是,如何获取当前的url目录?例如,如果当前网址为http://www.abc.com/def,我怎么才能真正知道def是目录还是文件?如果def是文件,那么url目录将是http://www.abc.com。但如果def是一个目录,那么url目录就是http://www.abc.com/def

你可以说,如果最后有“/”,那么它就是目录。但是从我的角度来看,当我抓取网页时,我无法确保网页构建器会在目录网址的末尾添加“/”。目录网址是完全有效的,例如,如果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情况是否正确和有效?这意味着,这对于当前网址为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,我会忽略它们吗?

感谢。

问题可能有点混乱,我希望我能清楚地解释清楚。

2 个答案:

答案 0 :(得分:3)

域名之后的任何内容都可以映射到配置域所需的任何人。

无法保证以.html结尾的网址指向某个文件系统上的真实文件,或者它将返回有效的HTML或其他任何内容。

您可以随意决定将def/计为目录或文件名的一部分,无论您的船是什么漂浮,因为任何选择都同样正确。

答案 1 :(得分:2)

如果http://www.abc.com/def是目录,那么Web服务器通常会重定向到http://www.abc.com/def/,以避免混淆客户端。您只需要注意重定向并使用urlparse.urljoin()或&lt; language-of-choice&gt;中的相应功能。在两种情况下将两个组件融合在一起作为浏览器。