[CPyUG] 请问,这是urljoin的bug吗?

classic Classic list List threaded Threaded
5 messages Options
Reply | Threaded
Open this post in threaded view
|

[CPyUG] 请问,这是urljoin的bug吗?

hejibo
大家好,我在写一个爬虫, 期望爬一个域名下的所有站。其中一个需求是在一个页面下,根据href的值,拼接出新的连接。我找到了urljoin最满足我的需求。

>>> from urlparse import urljoin
>>> urljoin('http://www.cwi.nl/%7Eguido/Python.html', 'FAQ.html')
'http://www.cwi.nl/%7Eguido/FAQ.html'
不过urljoin似乎有一个bug。请大家帮我看看?谢谢

例如,在http://www.ueseo.org/LinkValidatorTest.html这个页面下,点击../../index.html这个链接,浏览器会带到http://www.ueseo.org/index.html这个页面。可是urljoin('http://www.ueseo.org/index.html','../../index.html')得到的却是http://www.ueseo.org/../../index.html
这是不是urljoin的bug呀?谢谢大家。


>>> from urlparse import urljoin
>>> urljoin('http://www.ueseo.org/index.html','../../index.html')
'http://www.ueseo.org/../../index.html'


---------------------------
He Jibo
Department of Psychology,
Beckman Institute for Advanced Science and Technology
University of Illinois, Urbana Champaign,
603 East Daniel St.,
Champaign, IL 61820
website: www.hejibo.info

--
来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
规则: http://code.google.com/p/cpyug/wiki/PythonCn
发言: [hidden email]
退订: [hidden email] (向此发空信即退!)
详情: http://code.google.com/p/cpyug/wiki/PythonCn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
强烈: 建议使用技巧: 如何有效地报告Bug http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html
Reply | Threaded
Open this post in threaded view
|

Re: [CPyUG] 请问,这是urljoin的bug吗?

David.liu
http://blog.xgarden.net/?p=242

在 2011年12月10日 下午2:01,He Jibo <[hidden email]>写道:
大家好,我在写一个爬虫, 期望爬一个域名下的所有站。其中一个需求是在一个页面下,根据href的值,拼接出新的连接。我找到了urljoin最满足我的需求。

>>> from urlparse import urljoin
>>> urljoin('http://www.cwi.nl/%7Eguido/Python.html', 'FAQ.html')
'http://www.cwi.nl/%7Eguido/FAQ.html'
不过urljoin似乎有一个bug。请大家帮我看看?谢谢

例如,在http://www.ueseo.org/LinkValidatorTest.html这个页面下,点击../../index.html这个链接,浏览器会带到http://www.ueseo.org/index.html这个页面。可是urljoin('http://www.ueseo.org/index.html','../../index.html')得到的却是http://www.ueseo.org/../../index.html
这是不是urljoin的bug呀?谢谢大家。


>>> from urlparse import urljoin
>>> urljoin('http://www.ueseo.org/index.html','../../index.html')
'http://www.ueseo.org/../../index.html'


---------------------------
He Jibo
Department of Psychology,
Beckman Institute for Advanced Science and Technology
University of Illinois, Urbana Champaign,
603 East Daniel St.,
Champaign, IL 61820
website: www.hejibo.info

--
来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
规则: http://code.google.com/p/cpyug/wiki/PythonCn
发言: [hidden email]
退订: [hidden email] (向此发空信即退!)
详情: http://code.google.com/p/cpyug/wiki/PythonCn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
强烈: 建议使用技巧: 如何有效地报告Bug http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html

--
来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
规则: http://code.google.com/p/cpyug/wiki/PythonCn
发言: [hidden email]
退订: [hidden email] (向此发空信即退!)
详情: http://code.google.com/p/cpyug/wiki/PythonCn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
强烈: 建议使用技巧: 如何有效地报告Bug http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html
Reply | Threaded
Open this post in threaded view
|

Re: [CPyUG] 请问,这是urljoin的bug吗?

hejibo
谢谢。坛子里真是卧虎藏龙呀?
我copy了你的代码,不过得到的不一样。下面是我的代码。我得到的结果是
http://www.ueseo.org/\index.html。中间多了一个\。相同的代码,为什么会不一样呢?我是windows 7。您用的是mac吗?

'''
source
http://docs.python.org/library/urlparse.html
http://blog.xgarden.net/?p=242
'''


import urlparse,os.path
def urljoin(base,url):
    join = urlparse.urljoin(base,url)
    url = urlparse.urlsplit(join)
    path = os.path.normpath(url.path)
    return urlparse.urlunsplit((url.scheme,url.netloc,path,url.query,url.fragment))

if __name__ == '__main__':
    SourceURL='http://www.ueseo.org/LinkValidatorTest.html'
    SourceURL1='http://www.ueseo.org/pagerank/history/'

    url0='../../index.html' #url0?url1??????urljoin???
    url1='../index.html'


    print urljoin(SourceURL,url0) #T
    print urljoin(SourceURL,url1) #T


---------------------------
He Jibo
Department of Psychology,
Beckman Institute for Advanced Science and Technology
University of Illinois, Urbana Champaign,
603 East Daniel St.,
Champaign, IL 61820
website: www.hejibo.info


2011/12/10 David.liu <jxppp.liu@gmail.com>
http://blog.xgarden.net/?p=242

在 2011年12月10日 下午2:01,He Jibo <[hidden email]>写道:
大家好,我在写一个爬虫, 期望爬一个域名下的所有站。其中一个需求是在一个页面下,根据href的值,拼接出新的连接。我找到了urljoin最满足我的需求。

>>> from urlparse import urljoin
>>> urljoin('http://www.cwi.nl/%7Eguido/Python.html', 'FAQ.html')
'http://www.cwi.nl/%7Eguido/FAQ.html'
不过urljoin似乎有一个bug。请大家帮我看看?谢谢

例如,在http://www.ueseo.org/LinkValidatorTest.html这个页面下,点击../../index.html这个链接,浏览器会带到http://www.ueseo.org/index.html这个页面。可是urljoin('http://www.ueseo.org/index.html','../../index.html')得到的却是http://www.ueseo.org/../../index.html
这是不是urljoin的bug呀?谢谢大家。


>>> from urlparse import urljoin
>>> urljoin('http://www.ueseo.org/index.html','../../index.html')
'http://www.ueseo.org/../../index.html'


---------------------------

He Jibo
Department of Psychology,
Beckman Institute for Advanced Science and Technology
University of Illinois, Urbana Champaign,
603 East Daniel St.,
Champaign, IL 61820
website: www.hejibo.info

--
来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
规则: http://code.google.com/p/cpyug/wiki/PythonCn
发言: [hidden email]
退订: [hidden email] (向此发空信即退!)
详情: http://code.google.com/p/cpyug/wiki/PythonCn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
强烈: 建议使用技巧: 如何有效地报告Bug http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html

--
来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
规则: http://code.google.com/p/cpyug/wiki/PythonCn
发言: [hidden email]
退订: [hidden email] (向此发空信即退!)
详情: http://code.google.com/p/cpyug/wiki/PythonCn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
强烈: 建议使用技巧: 如何有效地报告Bug http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html

--
来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
规则: http://code.google.com/p/cpyug/wiki/PythonCn
发言: [hidden email]
退订: [hidden email] (向此发空信即退!)
详情: http://code.google.com/p/cpyug/wiki/PythonCn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
强烈: 建议使用技巧: 如何有效地报告Bug http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html
Reply | Threaded
Open this post in threaded view
|

Re: [CPyUG] 请问,这是urljoin的bug吗?

hejibo
In reply to this post by David.liu
谢谢David Liu。您的方法似乎在linux平台下是对的。在windows下有点儿小问题。 我试了http://www.coder4.com/archives/2674这个方法。是在windows下可以运行的。谢谢。下面是最终的代码。

'''
source
http://docs.python.org/library/urlparse.html
http://www.coder4.com/archives/2674
http://blog.xgarden.net/?p=242
'''


from urlparse import urljoin
from urlparse import urlparse
from urlparse import urlunparse
from posixpath import normpath

def urljoinNew(base, url):
    url1 = urljoin(base, url)
    arr = urlparse(url1)
    path = normpath(arr[2])
    return urlunparse((arr.scheme, arr.netloc, path, arr.params, arr.query, arr.fragment))

if __name__ == "__main__":

    SourceURL='http://www.ueseo.org/LinkValidatorTest.html'
    #SourceURL='http://www.ueseo.org/pagerank/history/'

    url0='../../index.html'
    url1='../index.html'


    print urljoinNew(SourceURL,url0) #T
    print urljoinNew(SourceURL,url1) #T

---------------------------
He Jibo
Department of Psychology,
Beckman Institute for Advanced Science and Technology
University of Illinois, Urbana Champaign,
603 East Daniel St.,
Champaign, IL 61820
website: www.hejibo.info


2011/12/10 David.liu <jxppp.liu@gmail.com>
http://blog.xgarden.net/?p=242

在 2011年12月10日 下午2:01,He Jibo <[hidden email]>写道:
大家好,我在写一个爬虫, 期望爬一个域名下的所有站。其中一个需求是在一个页面下,根据href的值,拼接出新的连接。我找到了urljoin最满足我的需求。

>>> from urlparse import urljoin
>>> urljoin('http://www.cwi.nl/%7Eguido/Python.html', 'FAQ.html')
'http://www.cwi.nl/%7Eguido/FAQ.html'
不过urljoin似乎有一个bug。请大家帮我看看?谢谢

例如,在http://www.ueseo.org/LinkValidatorTest.html这个页面下,点击../../index.html这个链接,浏览器会带到http://www.ueseo.org/index.html这个页面。可是urljoin('http://www.ueseo.org/index.html','../../index.html')得到的却是http://www.ueseo.org/../../index.html
这是不是urljoin的bug呀?谢谢大家。


>>> from urlparse import urljoin
>>> urljoin('http://www.ueseo.org/index.html','../../index.html')
'http://www.ueseo.org/../../index.html'


---------------------------

He Jibo
Department of Psychology,
Beckman Institute for Advanced Science and Technology
University of Illinois, Urbana Champaign,
603 East Daniel St.,
Champaign, IL 61820
website: www.hejibo.info

--
来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
规则: http://code.google.com/p/cpyug/wiki/PythonCn
发言: [hidden email]
退订: [hidden email] (向此发空信即退!)
详情: http://code.google.com/p/cpyug/wiki/PythonCn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
强烈: 建议使用技巧: 如何有效地报告Bug http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html

--
来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
规则: http://code.google.com/p/cpyug/wiki/PythonCn
发言: [hidden email]
退订: [hidden email] (向此发空信即退!)
详情: http://code.google.com/p/cpyug/wiki/PythonCn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
强烈: 建议使用技巧: 如何有效地报告Bug http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html

--
来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
规则: http://code.google.com/p/cpyug/wiki/PythonCn
发言: [hidden email]
退订: [hidden email] (向此发空信即退!)
详情: http://code.google.com/p/cpyug/wiki/PythonCn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
强烈: 建议使用技巧: 如何有效地报告Bug http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html
Reply | Threaded
Open this post in threaded view
|

Re: [CPyUG] 请问,这是urljoin的bug吗?

依云
Windows 下的路径分隔符是 \ 当然就不对了,所以要用 posixpath 嘛。

On Sat, Dec 10, 2011 at 08:23:09AM -0600, He Jibo wrote:

> 谢谢David Liu。您的方法似乎在linux平台下是对的。在windows下有点儿小问题。 我试了
> http://www.coder4.com/archives/2674这个方法。是在windows下可以运行的。谢谢。下面是最终的代码。
>
> '''
> source
> http://docs.python.org/library/urlparse.html
> http://www.coder4.com/archives/2674
> http://blog.xgarden.net/?p=242
> '''
>
>
> from urlparse import urljoin
> from urlparse import urlparse
> from urlparse import urlunparse
> from posixpath import normpath
>
> def urljoinNew(base, url):
>     url1 = urljoin(base, url)
>     arr = urlparse(url1)
>     path = normpath(arr[2])
>     return urlunparse((arr.scheme, arr.netloc, path, arr.params, arr.query,
> arr.fragment))
>
> if __name__ == "__main__":
>
>     SourceURL='http://www.ueseo.org/LinkValidatorTest.html'
>     #SourceURL='http://www.ueseo.org/pagerank/history/'
>
>     url0='../../index.html'
>     url1='../index.html'
>
>
>     print urljoinNew(SourceURL,url0) #T
>     print urljoinNew(SourceURL,url1) #T
>
> ---------------------------
> He Jibo
> Department of Psychology,
> Beckman Institute for Advanced Science and Technology
> University of Illinois, Urbana Champaign,
> 603 East Daniel St.,
> Champaign, IL 61820
> website: www.hejibo.info
>
>
> 2011/12/10 David.liu <[hidden email]>
>
> > http://blog.xgarden.net/?p=242
> >
> > 在 2011年12月10日 下午2:01,He Jibo <[hidden email]>写道:
> >
> >> 大家好,我在写一个爬虫,
> >> 期望爬一个域名下的所有站。其中一个需求是在一个页面下,根据href的值,拼接出新的连接。我找到了urljoin最满足我的需求。
> >>
> >> >>> from urlparse import urljoin>>> urljoin('http://www.cwi.nl/%7Eguido/Python.html', 'FAQ.html')'http://www.cwi.nl/%7Eguido/FAQ.html'
> >>
> >> *不过urljoin似乎有一个bug。请大家帮我看看?谢谢*
> >>
> >> 例如,在http://www.ueseo.org/LinkValidatorTest.html
> >> 这个页面下,点击../../index.html这个链接,浏览器会带到http://www.ueseo.org/index.html
> >> 这个页面。可是urljoin('http://www.ueseo.org/index.html','../../index.html')得到的却是
> >> http://www.ueseo.org/../../index.html。
> >> 这是不是urljoin的bug呀?谢谢大家。
> >>
> >>
> >> >>> from urlparse import urljoin
> >> >>> urljoin('http://www.ueseo.org/index.html','../../index.html')
> >> 'http://www.ueseo.org/../../index.html'
> >>
> >>
> >> ---------------------------
> >>
> >> He Jibo
> >> Department of Psychology,
> >> Beckman Institute for Advanced Science and Technology
> >> University of Illinois, Urbana Champaign,
> >> 603 East Daniel St.,
> >> Champaign, IL 61820
> >> website: www.hejibo.info
> >>
> >> --
> >> 来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
> >> 规则: http://code.google.com/p/cpyug/wiki/PythonCn
> >> 发言: [hidden email]
> >> 退订: [hidden email] (向此发空信即退!)
> >> 详情: http://code.google.com/p/cpyug/wiki/PythonCn
> >> 严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
> >> 强烈: 建议使用技巧: 如何有效地报告Bug
> >> http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html
> >>
> >
> >  --
> > 来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
> > 规则: http://code.google.com/p/cpyug/wiki/PythonCn
> > 发言: [hidden email]
> > 退订: [hidden email] (向此发空信即退!)
> > 详情: http://code.google.com/p/cpyug/wiki/PythonCn
> > 严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
> > 强烈: 建议使用技巧: 如何有效地报告Bug
> > http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html
> >
>
> --
> 来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
> 规则: http://code.google.com/p/cpyug/wiki/PythonCn
> 发言: [hidden email]
> 退订: [hidden email] (向此发空信即退!)
> 详情: http://code.google.com/p/cpyug/wiki/PythonCn
> 严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
> 强烈: 建议使用技巧: 如何有效地报告Bug http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html

--
Best regards,
lilydjwg

Linux Vim Python 我的博客
http://lilydjwg.is-programmer.com/

--
来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
规则: http://code.google.com/p/cpyug/wiki/PythonCn
发言: [hidden email]
退订: [hidden email] (向此发空信即退!)
详情: http://code.google.com/p/cpyug/wiki/PythonCn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
强烈: 建议使用技巧: 如何有效地报告Bug http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html