Это основано на ответе Ларсмана, выше.
f = urllib.request.urlopen('http://www.maxmind.com/app/locate_my_ip')
for line in f:
if b'align="center">' in line:
print(next(f).decode().rstrip())
f.close()
Объяснение:
for line in f
перебирает строки в объекте, похожем на файл, f.Python позволяет перебирать строки в файле так же, как элементы в списке.
if b'align="center">' in line
ищет строку 'align = "center">' в текущей строке.b
указывает, что это буфер байтов, а не строка.Похоже, что urllib.reqquest.urlopen
интерпретирует результаты как двоичные данные, а не как строки в Юникоде, а неукрашенный 'align="center">'
будет интерпретироваться как строка в Юникоде.(Это был источник TypeError
выше.)
next(f)
занимает следующую строку файла, потому что ваш оригинальный скрипт awk печатал строку после 'align = "center">', а нетекущая строка.Метод decode
(в Python строки имеют методы) берет двоичные данные и преобразует их в пригодный для печати объект Unicode.Метод rstrip()
удаляет любые конечные пробелы (а именно, новую строку в конце каждой строки.