python - scrapy:如何只选择可见的项目

标签 python html xpath web-scraping scrapy

我正在用 scrapy 写一个蜘蛛,我发现有些项目是不可见的 css 规则,但是,我只想选择可见的。

但 xpath 对那些人来说似乎没问题 <span style="display:none">哪个style是直接写的,对那些不行<style>.pigf{display:none}</style>哪个样式写成css规则。

似乎我应该渲染 css 以便我可以正确地过滤掉不可见的项目,但我该如何渲染它呢?有没有更简单的解决方案?

示例 html:

<span>
    <style>
        .pigf{display:none}.n8T-{display:inline}.pGrH{display:none}.XUYD{display:inline}.jdKj{display:none}.r7fk{display:inline}.pkO2{display:none}.EzIC{display:inline}
    </style>
    <span class="55">
        27
    </span>
    <div style="display:none">
        36
    </div>
    <span style="display:none">
        174
    </span>
    <span class="pkO2">
        174
    </span>
    <span>
    </span>
    .
    <span style="display:none">
        10
    </span>
    <span class="pkO2">
        10
    </span>
    <div style="display:none">
        10
    </div>
    <span style="display:none">
        49
    </span>
    <span class="jdKj">
        49
    </span>
    <span style="display:none">
        84
    </span>
    <span>
    </span>
    <span class="n8T-">
        115
    </span>
    <span style="display:none">
        129
    </span>
    <div style="display:none">
        129
    </div>
    <div style="display:none">
        143
    </div>
    <span style="display:none">
        151
    </span>
    <div style="display:none">
        169
    </div>
    <span>
    </span>
    .
    <span class="14">
        75
    </span>
    <span class="XUYD">
        .
    </span>
    <div style="display:none">
        23
    </div>
    <span style="display:none">
        79
    </span>
    <span style="display: inline">
        114
    </span>
</span>

最佳答案

为了使事情变得可靠,您需要一些东西来呈现 HTML - 理想情况下是真正的浏览器。查看selenium可用于自动化浏览器的软件包。请注意,浏览器也可以是 headless 的,例如 PhantomJS

selenium 可以很容易地 distinguish visible and invisible elements .您可以使用相关的 is_displayed() 方法来检查可见性。此外,如果您根据 specification 获得元素的文本, ,它只会返回文本的可见部分。

您也可以在 Splash 中渲染您的页面在scrapy-splash middleware的帮助下.可以找到示例用法 here .

关于python - scrapy:如何只选择可见的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34002556/

相关文章:

Python:减少字典的内存使用

php - 如何通过单击提交来发布两个表单

html - 使用一个 DIV 来屏蔽另一个 DIV

java - 你如何在 Java 中保存 DOM 文档?

c# - XPath 版本搜索

python - 从 pandas df 中选择特定列

python - 尽管存在所需的库,但我无法安装 python 包

javascript - 单击按钮后显示下拉选择值的结果

java - Freemarker 模板引擎从 xml 检索数据

python - `super()` 在 `__new__` 中有什么