re.search
возвращает None
, когда ничего не удается найти. None
не отвечает на метод .groups()
. Проверьте, существует ли совпадение или нет, прежде чем тщательно проверять совпадение.
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()
Однако, поскольку вы используете Beautiful Soup, зачем использовать stringify, а затем регулярное выражение? Это все равно что купить пакетик супа быстрого приготовления, добавить порошок в воду, вскипятить вещь, а затем обезвожить ее обратно в порошок . Зачем тогда использовать BeautifulSoup?
soup.select('h3.font-semibold.m-0.t-xs-24')[0].content
даст вам содержимое этого элемента <h3>
; затем примените регулярное выражение к , что , если вам нужно. Регулярное выражение в документах HTML обычно плохая идея .
РЕДАКТИРОВАТЬ : Что именно дает вам TypeError
? Это типичная XY проблема , когда вы решаете не то, что нужно. Я проверил это на работу, без TypeError
(Python 3):
ast_re = re.compile(r'(?P<ASN_CODE>AS\d+) (?P<NAME>[\w.\s]+)')
soup = url_to_soup(url)
ast_h3 = next(
(m for m in (ast_re.match(h3.text) for h3 in soup.select('h3')) if m),
None)
if ast_h3:
asn_code, name = asn_h3.groups()