2

一些网站,如http://www.gilacountyaz.gov/government/assessor/index.php有一堆应该是绝对路径的内部链接,但没有前导斜杠。用urlparse.urljoin结果解析它们时如下:

>>> import urlparse
>>> a = "http://www.gilacountyaz.gov/government/assessor/index.php"
>>> b = "government/assessor/address_change.php"
>>> urlparse.urljoin(a, b)
'http://www.gilacountyaz.gov/government/assessor/government/assessor/address_change.php'

这会导致网络爬虫没有意识到它已经访问了一个页面,并且可能存在无限循环。Firefox 和 Chrome 能够发现问题并正确解决

http://www.gilacountyaz.gov/government/assessor/address_change.php

有没有办法在 Python 中做同样的事情?请注意,假设始终使用前导斜杠是行不通的,因为我们可能正在处理真正的相对路径。

4

2 回答 2

7

链接页面包含以下内容:

<head>
  <base href="http://www.gilacountyaz.gov/index.php"/>
</head>

如果您使用该 URL 作为第一个参数,urljoin您将获得正确的结果。此标签允许您的浏览器正确解释这些链接。

于 2014-11-05T19:45:37.017 回答
3

Firefox 和 Chrome 都在读取<base>页面顶部的标签:

<base href="http://www.gilacountyaz.gov/index.php"/>

您的代码需要使用它作为根:

>>> import urlparse
>>> a = "http://www.gilacountyaz.gov/index.php"
>>> b = "government/assessor/address_change.php"
>>> urlparse.urljoin(a, b)
'http://www.gilacountyaz.gov/government/assessor/address_change.php'
于 2014-11-05T19:47:35.223 回答