Подтвердить что ты не робот

Возможно ли, чтобы BeautifulSoup работал без учета регистра?

Я пытаюсь извлечь Meta Description для выбранных веб-страниц. Но здесь я столкнулся с проблемой чувствительности к регистру BeautifulSoup.

Как некоторые страницы имеют <meta name="Description, а некоторые имеют <meta name="Description.

Моя проблема очень похожа на проблему qaru.site/info/299240/...

Единственное различие заключается в том, что я не могу использовать lxml.. Я должен придерживаться Beautifulsoup.

4b9b3361

Ответ 1

С незначительными изменениями он работает.

soup.findAll('meta', attrs={'name':re.compile("^description$", re.I)})

Ответ 2

Вы можете дать BeautifulSoup регулярное выражение для сопоставления атрибутов. Что-то вроде

soup.findAll('meta', name=re.compile("^description$", re.I))

может сделать трюк. Cribbed from документы BeautifulSoup.

Ответ 3

Регулярное выражение? Теперь у нас еще одна проблема.

Вместо этого вы можете перейти в лямбда:

soup.findAll(lambda tag: tag.name.lower()=='meta',
    name=lambda x: x and x.lower()=='description')

(x and исключает исключение, если атрибут name не определен для тега)

Ответ 4

С помощью bs4 используйте следующее:

soup.find('meta', attrs={'name': lambda x: x and x.lower()=='description'})

Ответ 5

Еще лучше использовать селектор attribute = value css с аргументом i для нечувствительности к регистру

soup.select('meta[name="description" i]')

Ответ 6

изменить регистр источника HTML-страницы. Используйте такие функции, как string.lower(), string.upper()