我有一个结构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>
元素,除了h2
或h3
下面的元素,它们的类名上有关键字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
中排除我不需要的所有元素。
换句话说,我被卡住了。如有任何帮助,我们将不胜感激。新年快乐,。
这个想法是使用preceding
和following
的组合来获得"重要"one_answers"不重要"元素之间的每个ul
元素:
//ul[preceding::span/@class ="important" and
following::span/@class = "not_important"]/li/text()
适用于我提供的示例输入(摘录['1', '2', '3', '4']
)。