BeautifulSoup可以以不区分大小写的方式工作吗?

Nit*_*tin 21 python beautifulsoup

我正在尝试为获取的网页提取元描述.但在这里,我面临的是BeautifulSoup区分大小写的问题.

有些页面有<meta name="Description,有些有<meta name="description.

我的问题非常类似于Stackoverflow上的问题

唯一的区别是我不能使用lxml ..我必须坚持使用Beautifulsoup.

Wil*_*hen 16

您可以为BeautifulSoup提供正则表达式以匹配属性.就像是

soup.findAll('meta', name=re.compile("^description$", re.I))
Run Code Online (Sandbox Code Playgroud)

可能会做的伎俩.来自BeautifulSoup文档的贿赂.


Mik*_*eyB 14

正则表达式?现在我们有另一个问题.

相反,你可以传入一个lambda:

soup.findAll(lambda tag: tag.name.lower()=='meta',
    name=lambda x: x and x.lower()=='description')
Run Code Online (Sandbox Code Playgroud)

(x and避免在name没有为标签定义属性时出现异常)

  • +1用于避免正则表达式.xkcd链接还有+1个. (3认同)

Nit*_*tin 9

只需稍作修改即可.

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


小智 5

使用bs4使用以下内容:

soup.find('meta', attrs={'name': lambda x: x and x.lower()=='description'})
Run Code Online (Sandbox Code Playgroud)