XPath查询以获取<李>h2/h3以下的元素标记span class属性上的关键字



我有一个结构HTML,如下所示:

<h3><span class="important">important 1</span></h3>
<ul><li>1</li></ul>
<ul><li>2</li></ul>
<h2><span class="important_2">important 2</span></h2>
<ul><li>3</li></ul>
<ul><li>4</li></ul>
<h3><span class="not_important">not important</span></h3>
<ul><li>5</li></ul>
<ul><li>6</li></ul>
<h2><span class="not_important_2">not important</span></h2>
<ul><li>7</li></ul>
<ul><li>8</li></ul>

我正在尝试获取所有的<li>元素,除了h2h3下面的元素,它们的类名上有关键字not_important,但我真的不知道该怎么做

以下是我迄今为止所做的:

In [1]: import scrapy
In [2]: selector = scrapy.Selector(text="""<h3><span class="important">important 1</span></h3>
   ...:     <ul><li>1</li></ul>
   ...:     <ul><li>2</li></ul>
   ...:     
   ...:     <h2><span class="important_2">important 2</span></h2>
   ...:     <ul><li>3</li></ul>
   ...:     <ul><li>4</li></ul>
   ...:     
   ...:     <h3><span class="not_important">not important</span></h3>
   ...:     <ul><li>5</li></ul>
   ...:     <ul><li>6</li></ul>
   ...:     
   ...:     <h2><span class="not_important_2">not important</span></h2>
   ...:     <ul><li>7</li></ul>
   ...:     <ul><li>8</li></ul>""")
In [3]: not_important = selector.xpath(".//span[contains(@class, 'not_important')]")
In [4]: not_important
Out[4]: 
[<Selector xpath=".//span[contains(@class, 'not_important')]" data=u'<span class="not_important">not importan'>,
 <Selector xpath=".//span[contains(@class, 'not_important')]" data=u'<span class="not_important_2">not import'>]

我的想法是得到所有<li>元素。然后将上面的代码与following-sibling::ul结合使用,得到我不想要的所有元素(当我执行not_important[0].xpath("following-sibling::ul")时,它不起作用),并在最后从每个<li>元素的list中排除我不需要的所有元素。

换句话说,我被卡住了。如有任何帮助,我们将不胜感激。新年快乐,。

这个想法是使用precedingfollowing的组合来获得"重要"one_answers"不重要"元素之间的每个ul元素:

//ul[preceding::span/@class ="important" and 
     following::span/@class = "not_important"]/li/text()

适用于我提供的示例输入(摘录['1', '2', '3', '4'])。

最新更新