python - 如何在 python 中使用 scrapy 获取直接父节点?

标签 python xpath scrapy web-crawler parent-child

我是 scrapy 的新手。我想从网络上抓取一些数据。我得到了如下的 html 文档。

dom style1:
<div class="user-info">
    <p class="user-name">
        something in p tag
    </p>
    text data I want
</div>

dom style2:
<div class="user-info">
    <div>
        <p class="user-img">
            something in p tag
        </p>
        something in div tag
    </div>
    <div>
        <p class="user-name">
            something in p tag
        </p>
        text data I want
    </div>
</div>

我想获取数据我想要的文本数据,现在我可以使用cssxpath 选择器通过检查它是否存在来获取它。但我想知道一些更好的方法。 比如我可以先获取css p.user-name,然后获取it's parent,再获取是div/text(),我想要的数据始终是 p.user-name 的直接父级 divtext(),但是问题是,如何获取直接父级 p.user-name

最佳答案

使用 xpath,您可以在 css 不支持的每个方向(父级、兄弟级、子级等)遍历 xml 树。
对于您的情况,您可以使用 xpath .. 获取节点的父级父符号:

//p[@class='user-name']/../text()

解释:
//p[@class='user-name'] - 找到 <p>类值为 user-name 的节点.
/.. - 选择节点的父节点。
/text() - 选择当前节点的文本。

此 xpath 应该适用于您描述的两种情况。

关于python - 如何在 python 中使用 scrapy 获取直接父节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44418433/

相关文章:

python - if 语句不再识别 while 循环 python 中的输入

XPath:选择某些子节点

XPath - position() 函数的缩写

xpath - XPath-在某些节点之后选择文本

python - 从 Scrapy 管道中删除重复项

python - 按唯一出现次数对记录数组进行排序

python - 使用 Python Enum 或 Dictionary 映射常量并通过推理保持 DRY 的最佳方法

python - 如何从scrapy中获得好的结果

python - 使用 scrapy 的项目加载器填充数据可以在 shell 中工作,但不能在 Spider 中工作

python - 转换包含随机字符的 dpkt 字节字符串