2016-08-16 2 views
0

Я принимаю введение в класс информатики в Udacity, и для одного из заданий я должен написать код, который будет принимать все ссылки с веб-страницы. Вот кодПроблема с кодом 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

Вы застряли внутри, пока True loop, 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) 

Edit: Но ни решение будет обнаружить ссылки как:

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

для этого вам нужно будет воссоздайте регулярное выражение. Это лучший вариант ИМХО.