BeautifulSoup и regexp: ошибка атрибута - PullRequest
0 голосов
/ 11 июня 2018

Я пытаюсь извлечь информацию методами Beautifulsoup4 с помощью рег.эксп.Но я получаю следующий ответ:

AttributeError: у объекта 'NoneType' нет атрибута 'group'

Я не понимаю, что не так .. Я пытаюсь:

  1. получите имя типолога: 'herenhuizen'
  2. получите веб-ссылку

Вот мой код:

import requests
from bs4 import BeautifulSoup
import re

url = 'https://inventaris.onroerenderfgoed.be/erfgoedobjecten/4778'
page = requests.get(url)

soup = BeautifulSoup(page.text, 'html.parser')
text = soup.prettify()

##block
p = re.compile('(?s)(?<=(Typologie))(.*?)(?=(</a>))', re.VERBOSE)
block = p.search(text).group(2)


##typo_url
p = re.compile('(?s)(?<=(href=\"))(.*?)(?=(\">))', re.VERBOSE)
typo_url = p.search(block).group(2)


## typo_name
p = re.compile('\b(\w+)(\W*?)$', re.VERBOSE)
typo_name = p.search(block).group(1)

У кого-то есть идея, гдеэто ошибка?

1 Ответ

0 голосов
/ 11 июня 2018

Я бы изменил это:

## typo_name
block_reverse = block[::-1]
p = re.compile('(\w+)', re.VERBOSE)
typo_name_reverse = p.search(block_reverse).group(1)
typo_name = typo_name_reverse[::-1]
print(typo_name)

Иногда проще просто перевернуть строку, если вы ищете что-то в конце.Это просто находит имя в конце вашего блока.Есть несколько способов найти то, что вы ищете, и мы могли бы придумать все виды умных регулярных выражений, но если это сработает, этого, вероятно, достаточно:)

update

Однако я только что заметил причину, по которой оригинальное регулярное выражение не работало, состоит в том, чтобы использовать \b его нужно экранировать как \\b или быть необработанным, как это:

## typo_name
p = re.compile(r'\b(\w+)(\W*?)$', re.VERBOSE)
typo_name = p.search(block).group(1)

Что-то хорошее последовало за Qи A здесь: Поддерживает ли модуль Python границы слов (\ b)?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...