Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.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
Xpath:如何排除所需节点中的节点?_Xpath - Fatal编程技术网

Xpath:如何排除所需节点中的节点?

Xpath:如何排除所需节点中的节点?,xpath,Xpath,在html树的这张图片中,我只想要节点,但是节点和下面是我想要从节点中排除的内容。您可以通过这样的操作手动逐个拾取它们 tablePath = "//div[@class='d']/table" table = response.selector.xpath(tablePath ).extract(), para_1_Path = "//div[@class='d']/p[5]" para_1 = response.selector.xpath(para_1_Path).extract() 等

在html树的这张图片中,我只想要
节点,但是
节点和下面是我想要从
节点中排除的内容。

您可以通过这样的操作手动逐个拾取它们

tablePath = "//div[@class='d']/table"
table = response.selector.xpath(tablePath ).extract(),
para_1_Path = "//div[@class='d']/p[5]"
para_1 = response.selector.xpath(para_1_Path).extract()
等等


或者,您可以提取所有div
class=“d”
数据并对其进行修剪,但这将是一个棘手的问题,因为您说自己是scrapy新手

您可以通过这样的操作手动逐个拾取它们

tablePath = "//div[@class='d']/table"
table = response.selector.xpath(tablePath ).extract(),
para_1_Path = "//div[@class='d']/p[5]"
para_1 = response.selector.xpath(para_1_Path).extract()
等等


或者,您可以提取所有div
class=“d”
数据并对其进行修剪,但这将是一个棘手的问题,因为您说自己是scrapy新手

尝试使用Xpath
count

count(preceding-sibling::table)>0
比如:

>>> import lxml.html
>>> s = '''
... <div class="d">
...   <p style="text-align: center">...</p>
...   <p>...</p>
...   <h2>Daydream...</h2>
...   <p>...</p>
...   <p>...</p>
...   <p>VRsat</p>
...   <table><tbody><tr><td>...</td></tr></tbody></table>
...   <p style="text-align: center">...</p>
...   <p style="text-align: center">...</p>
...   <div id="click_div">...</div>
... </div>
... '''
>>> doc = lxml.html.fromstring(s)
>>> xpath = '//div[@class="d"]/*[self::table or count(preceding-sibling::table)>0]'
>>> for x in doc.xpath(xpath): x.tag
...
'table'
'p'
'p'
'div'

尝试使用Xpath
count

count(preceding-sibling::table)>0
比如:

>>> import lxml.html
>>> s = '''
... <div class="d">
...   <p style="text-align: center">...</p>
...   <p>...</p>
...   <h2>Daydream...</h2>
...   <p>...</p>
...   <p>...</p>
...   <p>VRsat</p>
...   <table><tbody><tr><td>...</td></tr></tbody></table>
...   <p style="text-align: center">...</p>
...   <p style="text-align: center">...</p>
...   <div id="click_div">...</div>
... </div>
... '''
>>> doc = lxml.html.fromstring(s)
>>> xpath = '//div[@class="d"]/*[self::table or count(preceding-sibling::table)>0]'
>>> for x in doc.xpath(xpath): x.tag
...
'table'
'p'
'p'
'div'

你也可以使用索引。对不起,问题之前已经堆积起来了,这不是我真正想要的,请重新编写,除了一个新的。你也可以使用索引。对不起,问题之前堆积起来了,这不是我真正想要的,请重新编写,除了一个新的。首先,感谢你的帮助,但是很抱歉,我的问题之前的描述太多了,这不是我想首先描述的,现在我重写了这个问题,我不想要这个节点和它下面的所有内容,明白了,我真的很感激;以A的形式更好。如果答案解决了所述问题,那么请随意“接受”。首先,感谢您的帮助,但很抱歉,我的问题的描述之前过于笼统,这不是我想首先描述的,现在我重写了问题,我不想要节点,下面的所有内容都明白了,我真的很欣赏这一点。以文本的形式欣赏是很好的;以A的形式更好。如果答案解决了所述问题,那么请随意“接受”。我想在节点中排除它后面的和节点,任何帮助都是感激的,因为我是scrapy的新手。我想在节点中排除它后面的和节点,任何帮助都是感激的,因为我是scrapy的新手