BeautifulSoup中的select方法无法选择带空格的属性值

时间:2015-12-15 04:28:33

标签: python html beautifulsoup html-parsing

city = soup.select('a[href="/city/london d12"]')

以上代码收到错误消息:

  

ValueError:不支持或无效的CSS选择器:" a [href = / city / london"

我想知道是否有解决方法或替代美丽的汤?

<a title="London" href="/city/london d12">london</a>

1 个答案:

答案 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"