我正在尝试从任意网站上抓取META关键字和描述标签。我显然无法控制所说的网站,所以必须采取我所给的东西。它们的标签和属性有各种大小写,这意味着我需要不区分大小写。我不敢相信lxml的作者如此固执,不愿在完全不使用其库的情况下坚持完全强制遵循标准。

我想说doc.cssselect('meta[name=description]')(或一些等效的XPath),但是由于首字母D的原因,它不会捕获<meta name="Description" Content="...">标记。

我目前正在使用它作为解决方法,但这太可怕了!

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似乎不区分大小写,但是属性却不区分大小写。 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">

关于python - lxml是否可以不区分大小写的方式工作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1734125/

10-13 03:05