#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]