2016-08-16 5 views
0

私はUdacityのコンピュータサイエンスのクラスについて紹介しています。割り当ての1つとして、Webページからすべてのリンクを取得するコードを記述する必要があります。ここで私はサンプルを実行すると、コードPythonコードのトラブル

def get_next_target(page): 
    start_link = page.find('<a href=') 
    while True: 
     if start_link == -1: 
      x, y = None, 0 
      return x, y 
      break 
    start_quote = page.find('"', start_link) 
    end_quote = page.find('"', start_quote + 1) 
    url = page[start_quote + 1:end_quote] 
    return url, end_quote 

は、動作しているようですが、私は自分のコードを提出するとき、私は私の提出が終了していなかったという結果を得ています。これは何を意味するのでしょうか?私のコードの問題は何ですか?

+0

これは、プログラムが(一定の時間内に)実行を停止したことがないことを意味します。 – jwodder

+0

どうすればそれを防ぐことができますか? –

+1

あなたは真のループの中で立ち往生していますが、あなたのケースではstart_linkは決して-1ではありませんので、おそらくそのループを終了する別の方法が必要です – iScrE4m

答えて

0
def get_next_target(page, start=0): 
    """ function find link in part of page """ 
    start_link = page[start:].find('<a href=') 
    if start_link == -1: 
     x, y = None, None 
     return x, y 
    start_quote = page.find('"', start_link) 
    end_quote = page.find('"', start_quote + 1) 
    url = page[start_quote + 1:end_quote] 
    return url, end_quote 

def find_all(page): 
    """ function find all links""" 
    length = len(page) 
    current_position = 0 # we start with full page 
    urls = [] 
    while current_position < length: 
     # get url and set current_positon, so next we gonna search 
     # only part of page 
     url, current_position = get_next_target(page, current_position) 
     urls.append(url) 
     if current_position is None: 
      return urls 
    return urls 

しかし、私は使用正規表現をrecommandだろう - のようなものを:

def find_all(page): 
    import re 
    return re.findall('<a href="(.+)"', page) 

編集: しかし、どちらのソリューションは次のようにリンクを検出します:あなたが必要となります。このため

<a href="some/page">, or <a tilte="ti" href="some/page" > 

を正規表現を再作成してください。それは最高のオプションIMHOです。