2017-11-09 14 views
1

私はこれがすばらしいものであることを望んでいます。私はここに与えられたURL.splitが期待どおりに動作しないのはなぜですか?

からセカンドレベルドメインを取得しようとしています

は私のコードです:

url = url.split(".", 1)[1] 
    url = url.split('//', 1)[-1] 
    url = url.split("/", 0)[0] 

問題は、何らかの理由でそれはしていないようです、最後の行であります何でもする。

私はそれをURL

イムは、それぞれの結果の後に単に "nba.com" を取得するために

+0

最初と最後にどのような 'url'が見え、結果として何を望みますか – TerryA

+0

私は入力を済ませてから申し訳ありません。 – bubba4399

+0

を再度チェックして、なぜurlparseを使用しないのですか? – Mark

答えて

0

印刷urlを試みる= "http://www.nba.com/sports" 私は戻って取得

"nba.com/sports" を養う場合そして、あなたが何をする必要があるかわかります。ここでは後

>>> url = "http://www.nba.com/sports" 
>>> url = url.split(".", 1)[1] 
>>> print(url) 
nba.com/sports 

を、それは我々が行う必要があるすべてはちょうど/で分割されて明らかです。

>>> from urllib.parse import urlparse 
>>> url = "http://www.nba.com/sports" 
>>> urlparse(url) 
ParseResult(scheme='http', netloc='www.nba.com', path='/sports', params='', query='', fragment='') 
>>> urlparse(url).netloc 
'www.nba.com' 

をそして、あなたは、最初の.からすべてを取り除くことができますあまりにも多くのことをovercomplicateしないでください:)

>>> url = url.split("/")[0] 
>>> print(url) 
nba.com 

は、@マークがコメントで述べたように、あなたもurllib.urlparseを使用することができます必要な場合は、あなたがしていることに応じて、あなたがする必要はないかもしれません。

Python 2を使用している場合、モジュールはurlparseです。

+0

申し訳ありませんが、これらの応答を正しくフォーマットしようとしません。 あなたの例を少し変更してurl = url.split( "/")[2]にする必要がありましたが、これはうまくいきます。 – bubba4399

2

正解:、車輪の再発明をすることができます限りのためthe existing librariesを使用しないでください:

あなた nba.comを取得
from urllib.parse import urlsplit 
# On Py2, from urlparse import urlsplit 

url = "http://www.nba.com/sports" 
domain = urlsplit(url).hostname 
# split off the last two components, then join them back together to make 
# the second level domain 
secondlevel = '.'.join(domain.rsplit('.', 2)[-2:]) 
print(secondlevel) 

+0

この問題はグーグルで見つけました。あなた自身のコードの数行で達成できる機能の小さなビットがほんの少しだけ必要な場合は、ライブラリ全体。 – bubba4399

+1

@ bubba4399:あなたは間違っています。 1つは、これは「機能の1つの小さなビット」ではありません。一般的な意味でURL解析を正しく行うことは驚くほど困難です。別の方法として、最初に新しいコードを書くコストは、ライブラリをインポートする際に発生する小さなコストよりも常に高くなります。特に既知のフォーマットを解析する場合は、決してホイールを改造しないでください。あなたは*間違っている(あなたの質問が示すように)。 CSVには 'csv'モジュールを使い、JSONには' json'モジュールを使い、URLには 'urllib.parse'を使います。あなたが自分で書き込む唯一の時間は、学習の練習としての学校でのことです。 – ShadowRanger

関連する問題