代码之家  ›  专栏  ›  技术社区  ›  Mew

Python urlparse:小问题

  •  2
  • Mew  · 技术社区  · 14 年前

    我正在制作一个应用程序,可以解析html并从中获取图像。使用beautifuldsoup和下载html很容易进行解析,图像也可以使用urllib2进行解析。

    我确实对urlparse有问题,无法从相对路径中创建绝对路径。最好用一个例子来解释这个问题:

    >>> import urlparse
    >>> urlparse.urljoin("http://www.example.com/", "../test.png")
    'http://www.example.com/../test.png'
    

    正如您所看到的,urlparse不会带走../away。当我尝试下载图像时,会出现一个问题:

    HTTPError: HTTP Error 400: Bad Request
    

    4 回复  |  直到 14 年前
        1
  •  2
  •   vhallac    14 年前

    我认为最好的方法是预先解析原始URL,并检查path组件。一个简单的测试是

    if len(urlparse.urlparse(baseurl).path) > 1:
    

    然后,您可以将它与DEMAS建议的索引相结合。例如:

    start_offset = (len(urlparse.urlparse(baseurl).path) <= 1) and 2 or 0
    img_url = urlparse.urljoin("http://www.example.com/", "../test.png"[start_offset:])
    

    这样,就不会尝试转到根URL的父级。

        2
  •  3
  •   rtpg    14 年前

    >>> urlparse.urljoin("http://www.example.com","./test.png")
    'http://www.example.com/test.png'
    
        3
  •  1
  •   jfs    14 年前

    如果你愿意的话 /../test 意思是一样的 /test normpath() :

    >>> url = urlparse.urljoin("http://example.com/", "../test")
    >>> p = urlparse.urlparse(url)
    >>> path = posixpath.normpath(p.path)
    >>> urlparse.urlunparse((p.scheme, p.netloc, path, p.params, p.query,p.fragment))
    'http://example.com/test'
    
        4
  •  0
  •   ceth    14 年前
    urlparse.urljoin("http://www.example.com/", "../test.png"[2:])