Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:CSS选择器,用于lxml.cssselect内部_Python_Css_Css Selectors_Lxml - Fatal编程技术网

Python:CSS选择器,用于lxml.cssselect内部

Python:CSS选择器,用于lxml.cssselect内部,python,css,css-selectors,lxml,Python,Css,Css Selectors,Lxml,我正在尝试使用lxml.html解析下面给出的html代码,并使用CSSSelector而不是XPath 上面的代码将content-1和content-2作为输出,但我希望的输出是link1-link2。所以我用 link = doc.cssselect('html body div.results dl dt a[href]') 但我还是得到了同样的结果。所以我的问题是什么是获取href属性的正确CSS选择器 <div class = "results"&g

我正在尝试使用lxml.html解析下面给出的html代码,并使用CSSSelector而不是XPath

上面的代码将content-1和content-2作为输出,但我希望的输出是link1-link2。所以我用

link = doc.cssselect('html body div.results dl dt a[href]')
但我还是得到了同样的结果。所以我的问题是什么是获取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>
我相信你不能通过CSS选择器获得属性值。你应该得到元素

>>> elements = doc.cssselect('div.results dl dt a')
…然后从中获取属性:

>>> for element in elements:
...     print element.get('href')
... 
/link 1
/link 2
当然,列表理解是你的朋友:

>>> [element.get('href') for element in elements]
['/link 1', '/link 2']

由于您不能更新CSS中属性的属性,我认为通过CSS选择器获取属性是没有意义的。您可以在CSS选择器中提及属性,以仅检索与它们的元素相匹配的属性。然而,这只是深思熟虑,我可能是错的;如果我是,请有人纠正我:@Tim Diggs证实了我下面的假设:

你需要获取css结果的属性select它总是返回元素,而不是属性:

首先,我不确定doc.cssselect是否正确,但这可能是您自己的功能

lxml.cssselect通常用于:

from lxml.cssselect import CSSSelector
sel = CSSSelector('html body div.results dl dt a[href]')
那么,假设你已经有医生了

links = []
for a_href in sel(doc):
    links.append(a_href.get('href'))
或者更简洁地说:

links = [a_href.get('href') for a_href in doc.cssselect('html body div.results dl dt a[href]')]

我成功地使用了

#element-id ::attr(value)

获取HTML元素的value属性。

lxml cssselector使用属性选择。下面的代码可以从HTML脚本元素中选择src属性

   select = cssselect.CSSSelector("script[src]")
   links = [ el.get('src') for el in select(dochtml) ]
   links=iter(links)
   for n, l in enumerate(links):
       print n, l

@brandizzi,你说得对-你只能选择css中的元素,而不能选择属性-括号用于筛选要选择的元素,但只选择不带href属性的标记不是一个坏主意,a[href]就是这样做的。@RanRag,你应该勾选brandizzi的答案,即使你最后不需要它。我本来打算勾选它,但你只能在一段时间后接受答案,我相信它的arnd 5分钟基本上doc相当于doc=lxml.html.fromstringcontent,其中content是我从urllib和read函数获得的html数据
   select = cssselect.CSSSelector("script[src]")
   links = [ el.get('src') for el in select(dochtml) ]
   links=iter(links)
   for n, l in enumerate(links):
       print n, l