city = soup.select('a[href="/city/london d12"]')
以上代码收到错误消息:
ValueError:不支持或无效的CSS选择器:" a [href = / city / london"
我想知道是否有解决方法或替代美丽的汤?
<a title="London" href="/city/london d12">london</a>
答案 0 :(得分:5)
您必须将属性值括在双引号中:
a[href="/city/london d12"]
但是,看起来这个特定的选择器被识别为&#34;无效&#34;按BeautifulSoup
。这是因为BeautifulSoup
supports only basic CSS selectors:
这对于了解CSS选择器语法的用户来说非常方便。 你可以使用Beautiful Soup API完成所有这些工作。如果是CSS 选择器就是你所需要的,你也可以直接使用lxml:它是 更快,它支持更多的CSS选择器。但这可以让你 将简单的CSS选择器与Beautiful Soup API结合起来。
让我们按照建议直接使用lxml
+cssselect
:
>>> from lxml.cssselect import CSSSelector
>>> from lxml.etree import fromstring
>>>
>>> sel = CSSSelector('a[href="/city/london d12"]')
>>>
>>> tree = fromstring('<a title="London" href="/city/london d12">london</a>')
>>> sel(tree)
[<Element a at 0x100dad878>]
您还可以使用部分属性匹配:
soup.select('a[href*=london]') # contains "london"
soup.select('a[href$=d12]') # ends with "d12"
soup.select('a[href^=/city/london]') # starts with "city/london"