Ran*_*Rag 8 css python lxml css-selectors
我试图解析下面给出的html代码使用lxml.html
和使用CSSSelector
而不是XPath
.
link = doc.cssselect('html body div.results dl dt a)
Run Code Online (Sandbox Code Playgroud)
上面的代码给我content-1
和content-2
输出,但我想要的输出是link 1 link 2
.所以我用我的代码替换了
link = doc.cssselect('html body div.results dl dt a[href]')
Run Code Online (Sandbox Code Playgroud)
但仍然得到相同的输出.所以我的问题是获取href属性的正确CSS选择器是什么.
<div class = "results">
<div> some tags here </div>
<dl>
<dt title = "My Title 1" style = "background: transparent url('/img/accept.png') no-repeat right center">
<a href = "/link 1"> content-1</a>
</dt>
</dl>
<dl>
<dt title = "My Title 2" style = "background: transparent url('/img/accept.png') no-repeat right center">
<a href = "/link 2">content-2</a>
</dt>
</dl>
</div>
Run Code Online (Sandbox Code Playgroud)
我相信你无法通过CSS选择器获取属性值.你应该得到元素......
>>> elements = doc.cssselect('div.results dl dt a')
Run Code Online (Sandbox Code Playgroud)
...然后从中获取属性:
>>> for element in elements:
... print element.get('href')
...
/link 1
/link 2
Run Code Online (Sandbox Code Playgroud)
当然,列表推导是你的朋友:
>>> [element.get('href') for element in elements]
['/link 1', '/link 2']
Run Code Online (Sandbox Code Playgroud)
由于你无法更新CSS中的属性属性,我相信通过CSS选择器获取它们是没有意义的.您可以在CSS选择器中"提及"属性以仅检索以匹配其元素.然而,只是思考而我可能是错的; 如果我,请有人纠正我:) 好吧,@ Tim Diggs在下面证实了我的假设:)
编辑:您现在可以使用伪选择器执行此操作,例如:
>>> elements = doc.cssselect('div.results dl dt a')
Run Code Online (Sandbox Code Playgroud)
这将返回每个链接的href属性.