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

时间:2010-04-08 18:18:24

标签: python beautifulsoup

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

由于某些网页有<meta name="Description而有些网页有<meta name="description

我的问题与Question on Stackoverflow

非常相似

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

6 个答案:

答案 0 :(得分:16)

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

这样的东西
soup.findAll('meta', name=re.compile("^description$", re.I))

可能会成功。来自the BeautifulSoup docs的吟唱。

答案 1 :(得分:13)

正则表达式?现在我们有another problem

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

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

x and在没有为代码定义name属性时避免异常)

答案 2 :(得分:8)

稍作修改即可。

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

答案 3 :(得分:5)

使用bs4使用以下内容:

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

答案 4 :(得分:1)

对于不区分大小写,最好还是使用带有i参数的css attribute = value选择器

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

答案 5 :(得分:-1)

更改html页面源的大小写。使用诸如string.lower(),string.upper()

之类的函数