Python:在lxml.cssselect中使用的CSS选择器

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-1content-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)

bra*_*zzi 9

相信你无法通过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属性.