Как удалить HTML-теги в Python3 - PullRequest
0 голосов
/ 24 июня 2019

Я пишу простой скрипт для распечатки моего IP-адреса в терминале.У меня проблемы с удалением тегов HTML из оператора печати. ​​

Я пытался использовать функцию .strip () из библиотеки urllib.Я не понимаю достаточно регулярных выражений для ввода в этот код.

import re
import urllib.request, urllib.parse, urllib.error
import json


data = urllib.request.urlopen('http://checkip.dyndns.org')
for line in data:
    print(line.decode().strip())

Я ожидаю, что на выходе будет только мой IP (xxx.xx.xx.xxx), но вместо этого получаю следующее

" ТекущийПроверка IP-адреса Текущий IP-адрес: XXX.XX.XX.XXX "

Ответы [ 2 ]

2 голосов
/ 24 июня 2019

То, что вы пытаетесь сделать, не является трудной проблемой манипуляции со строками, но есть гораздо более чистый способ сделать это, используя другой сервис.Одним из них является ipify.org .

import json
from urllib import request

with request.urlopen('https://api.ipify.org?format=json') as response:
    print(json.loads(response.read())['ip'])
0 голосов
/ 24 июня 2019

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

import re
import urllib.request


data = urllib.request.urlopen('http://checkip.dyndns.org').read().decode()
print(re.search(r'Current IP Address: ([\d\.]+)', data).group(1))

Дополнительную информацию и примеры можно найти на https://docs.python.org/2/library/re.html#match-objects

Для удаления тегов HTML в целом вы можете использовать что-то вроде этого, используя re:

print(re.sub('<[^<]+?>', '', '<html>foo</html>'))

Или даже проще использовать BeatufilSoup вместо re:

from bs4 import BeautifulSoup
print(BeautifulSoup('<html>foo</html>').get_text())
...