2

次のコードは、空でない urlparse.netloc または urlparse.scheme を 1 つも返しません。スキームと netloc は、パス コンポーネントの先頭に追加されます。私は何を間違っていますか?

#! /usr/bin/python
# -*- coding: UTF-8 -*-

from urllib import urlopen  
from urlparse import urlparse, urljoin 
import re   
link_exp = re.compile("href=(.+?)(?:'|\")", re.UNICODE)  

flux = urlopen("http://www.w3.org") 
links = [urlparse(x) for x in link_exp.findall(flux.read())]
for x in links : 
    print x

これはすべての (? おそらく私の正規表現が間違っている) URL を抽出し、それを出力します。ただし、「http://」は常にスキームではなくパスに含まれます。どうして?これは実際のシナリオではなくコースの演習であるため、これを解決したら、おそらく urlparse 機能を再実装する必要があります。これについて明確でなくて申し訳ありません!

4

2 に答える 2

2

あなたの正規表現は間違っています:

x = "<a href='http://www.bbcnews.com'>foo</a>"
link_exp.findall(x)
# ["'http://www.bbcnews.com"]

冒頭の引用が含まれていることに注意してください。

于 2013-01-31T18:16:02.747 に答える
0

これを使って:

link_exp = re.compile(r"href=\"(.+?)(?:'|\")", re.UNICODE)  

出力:

...
ParseResult(scheme='http', netloc='ev.buaa.edu.cn', path='/', params='', query='', fragment='')
...
于 2013-01-31T18:19:43.537 に答える