我正在尝试为获取的网页提取元描述。但在这里,我面临的是BeautifulSoup区分大小写的问题。
由于某些网页有<meta name="Description
而有些网页有<meta name="description
。
我的问题与Question on Stackoverflow
非常相似唯一的区别是我不能使用lxml ..我必须坚持使用Beautifulsoup。
答案 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()
之类的函数