scrapy:从xpath选择器中删除元素

scrapy:从xpath选择器中删除元素,xpath,lxml,scrapy,Xpath,Lxml,Scrapy,我正在使用scrapy来抓取具有一些奇怪格式约定的站点。基本思想是,我想要某个div的所有文本和子元素,除了开头的一些和结尾的一些 这里是要点 <div id="easy-id"> <stuff I don't want> text I don't want <div id="another-easy-id" more stuff I don't want> text I want <stuff I want> ...

我正在使用scrapy来抓取具有一些奇怪格式约定的站点。基本思想是,我想要某个div的所有文本和子元素,除了开头的一些和结尾的一些

这里是要点

<div id="easy-id">
  <stuff I don't want>
  text I don't want
  <div id="another-easy-id" more stuff I don't want>

  text I want
  <stuff I want>
  ...
  <more stuff I want>
  text I want
  ...

  <div id="one-more-easy-id" more stuff I *don't* want>
  <more stuff I *don't* want>


我猜你想要所有的东西,从ID为另一个简单ID的div到但不包括一个更简单ID的div

堆栈溢出没有保留缩进,所以我不知道第一个div元素的结尾在哪里,但我猜它在文本之前结束

那样的话,你可能想要 //div[@id='other easy id']/following:node() [not(前面的::div[@id='one more easy id'])和not(@id='one more easy id')]

如果这是XHTML,则需要将一些前缀h绑定到XHTML名称空间,并在这两个位置使用h:div

编辑:下面是我最后使用的语法。(原因见评论。)


您可以使用lxml进行解析,但同时Xpath也可以工作,如果您告诉我们您实际上想要从中获取什么的话。查看示例——我将所有内容都标记为“我想要的东西”或“我不想要的东西”,您的缩进是否暗示
或者标记与此处类似?这意味着最后的
嵌套了六层深度?如果您粘贴正确的html而不是示例,那就更好了,因为在您的场景中,不能有通用的xpath,而是精确的。@stav-缩进意味着结束标记。这里的一切都是一个令人敬畏的孩子。node()命令正是我所要寻找的--它可以检索文本和元素节点。一些小的修正:首先,我认为您在“following”和“node()”之间缺少一个冒号。其次,按照您编写“following”和“previous”语法的方式,它不排除文本节点是“one more easy id”的子节点是的,有一个输入错误,您是对的,对不起。很高兴你终于到了那里!
//div[@id='easy-id']/div[@id='one-more-easy-id']/preceding-sibling::node()[preceding-sibling::div[@id='another-easy-id']]