我正在用 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/