Возможно ли, чтобы BeautifulSoup работал без учета регистра? - PullRequest
20 голосов
/ 08 апреля 2010

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

Поскольку некоторые страницы имеют <meta name="Description, а некоторые <meta name="description.

Моя проблема очень похожа на проблему Вопрос по Stackoverflow

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

Ответы [ 4 ]

16 голосов
/ 08 апреля 2010

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

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

может добиться цели. Извлеченный из BeautifulSoup docs .

13 голосов
/ 07 марта 2013

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

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

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

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

8 голосов
/ 09 апреля 2010

С небольшими изменениями все работает.

soup.findAll('meta', attrs={'name':re.compile("^description$", re.I)})
5 голосов
/ 31 мая 2015

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

soup.find('meta', attrs={'name': lambda x: x and x.lower()=='description'})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...