我正在尝试从任意网站中删除META关键字和描述标签.我绝对无法控制所说的网站,所以必须采取我给的.它们有标签和属性的各种外壳,这意味着我需要不区分大小写.我无法相信lxml作者在排除对其库的大部分使用时坚持完全强制标准兼容性是顽固的.
我希望能够说doc.cssselect(‘meta [name = description]’)(或一些XPath等价物),但这不会捕获< meta name =“Description”Content =“...”>标签由于其他资本D.
我目前正在使用它作为一种解决方法,但它太可怕了!
for meta in doc.cssselect('meta'):
name = meta.get('name')
content = meta.get('content')
if name and content:
if name.lower() == 'keywords':
keywords = content
if name.lower() == 'description':
description = content
似乎标签名称meta不区分大小写,但属性不是.更令人讨厌的元也是区分大小写的!
解决方法:
属性值必须区分大小写.
您可以使用任意正则表达式来选择元素:
#!/usr/bin/env python
from lxml import html
doc = html.fromstring('''
<meta name="Description">
<meta name="description">
<META name="description">
<meta NAME="description">
''')
for meta in doc.xpath('//meta[re:test(@name, "^description$", "i")]',
namespaces={"re": "http://exslt.org/regular-expressions"}):
print html.tostring(meta, pretty_print=True),
输出:
<meta name="Description">
<meta name="description">
<meta name="description">
<meta name="description">