Regex, чтобы найти и сопоставить & amp (оба случая - настоящее и нет) и очистить его - PullRequest
0 голосов
/ 15 января 2019

Я пытаюсь извлечь заголовки из веб-страниц с помощью регулярных выражений, однако некоторые заголовки имеют & amp, что заставляет мое регулярное выражение не совпадать. Я совершенно новичок в регулярных выражениях. Плюс во время поиска я наткнулся на этот стекопоток, хотя и задавал вопросы здесь. (Я прочитал весь подобный контент и видео на YouTube по регулярным выражениям, но не решаю свои проблемы, поэтому я задаю этот вопрос здесь)

Это мое уже написанное регулярное выражение

match = re.search(r'<h3 class="font-semibold m-0 t-xs-24">(?P<ASN_CODE>AS\d+(&amp)) (?P<NAME>[\w.\s]+)</h3>', s).groups()

Мой код:

s = """HTML source """
#https://ipinfo.io/AS7018  [This is the webpage i am trying to scrap]

match = re.search(r'<h3 class="font-semibold m-0 t-xs-24">(?P<ASN_CODE>AS\d+) (?P<NAME>[\w.\s]+)</h3>', s)
if match:
    asn_code, name = match.groups()
    print(asn_code)
    print(name)

Это не соответствует даже названиям, которые не имеют & amp примеры веб-страниц: https://ipinfo.io/AS7922 https://ipinfo.io/AS7018

Ожидаемый результат: Comcast Cable Communications, LLC Соединенные Штаты AT & T Services, Inc. Соединенные Штаты

Я не уверен, как изменить мою часть регулярного выражения (? = & Amp), чтобы она соответствовала как & amp, так и NOT & amp Любые указатели очень ценятся.

1 Ответ

0 голосов
/ 06 марта 2019

Не пытайтесь анализировать HTML с помощью регулярных выражений. Используйте подходящий HTML-парсер. Вот пример с BeautifulSoup с использованием html.parser из стандартной библиотеки:

#!/usr/bin/env python3
import bs4
import requests


def main():
    response = requests.get('https://ipinfo.io/AS7018')
    soup = bs4.BeautifulSoup(response.content, 'html.parser')
    asn_code, _, name = soup.h3.text.partition(' ')
    print('ASN code:', asn_code, '  Company name:', name)


if __name__ == '__main__':
    main()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...