Давайте проанализируем, почему мы получили этот ответ. Если вы откроете веб-сайт и просмотрите исходный код, мы заметим, что он не имеет <title>...</title>
. Вместо этого у нас есть <TITLE>...</TITLE>
. Так что же случилось с 2 звонками? Оба будут -1
!
begin = html.find('<title>') # Result: -1
end = html.find('</title>') # Result: -1
Тогда begin+len('<title>')
будет -1 + 7 = 6. Таким образом, ваша последняя строка будет извлекать html[6:-1]
. Оказывается, что отрицательные индексы на самом деле означают что-то законное в Python (по уважительным причинам). Это значит считать со спины. Следовательно, -1 здесь относится к последнему символу в html
. Итак, вы получаете подстроку от 6-го символа (включительно) до последнего символа (не включительно).
Что мы можем сделать тогда? Ну, во-первых, вы можете использовать средство сравнения регулярных выражений, которое игнорирует регистр, или использовать правильный анализатор HTML. Если это одноразовая вещь, а пространство / производительность не представляют большой проблемы, самый быстрый подход может заключаться в создании копии html
и размещении строки в нижнем регистре:
def get_title(html):
html_lowered = html.lower();
begin = html_lowered.find('<title>')
end = html_lowered.find('</title>')
if begin == -1 or end == -1:
return None
else:
# Find in the original html
return html[begin+len('<title>'):end].strip()