Результат многократной печати программы Python

#python

#python

Вопрос:

У меня есть код, который использует цикл while для печати всего, что включено в <a href> и </a> теги веб-страницы. Я могу извлечь требуемые индексы и все, что написано между ними, а также могу распечатать это. Предполагается, что программа должна напечатать URL-адрес только один раз, а затем двигаться дальше и увеличивать индекс, пока не найдет следующее значение индекса для <a href> и </a> , напечатать все, что находится между ними, и продолжать делать это до конца строки, выводя каждый новый URL-адрес, найденный в отдельной строке. Вот код:

 text = """ohsfhskfheifhsefis <a href = "fdnsfjsnfsnfns snkfsndfskj"</a>
<a href = "snfksnfsdf"</a>"""

index = 0

a = 0

b = 0

while index < len(text):

    a = text.find('href', index)

    b = text.find('/a', index)

    print(text[a:b])

    index = index   2

    if index >= len(text):

        print("End")

        break
  

Однако, когда я запускаю программу, она выходит из строя, как показано на изображениях.

Очевидно, что логика, которую я использую, здесь неверна. Я знаю, что есть другие более простые способы выполнить эту задачу, но я не добрался до более сложных вещей, поскольку я только недавно начал изучать Python и хотел бы сделать это таким образом на данный момент.

Слева находится первая часть программы. Справа находится второй.

Вы также можете четко видеть, что пропуски пропущены, потому что программа печатает URL при каждом увеличении индекса.

Любая помощь была бы высоко оценена.

Ответ №1:

Ваш поиск начинается с index set to 0 , затем вы находите href текст в позиции 22. Затем вы увеличиваете индекс до 2 , выполняете поиск снова и снова находите текст в позиции 22.

Если вы хотите продолжить поиск после последнего совпадения, вам нужно вместо этого установить index позицию после последнего совпадения:

 index = a   1
  

Теперь следующий text.find() вызов вместо этого начинает поиск по индексу 23.

Вам также нужно будет проверить, не найден ли текст:

 if a < 0 or b < 0:
    break
  

Вместо ручного поиска по тексту подобным образом, рассмотрите возможность использования синтаксического анализатора HTML. Ваш поиск был бы тривиальным, например, с помощью BeautifulSoup.

Комментарии:

1. @Катастрофа: прерывается, когда a == -1 or b == -1 .

Ответ №2:

Альтернативное предложение:

 for token in text.split('href="')[1:]:
    print token.split('"')[0]