python - Scrapy:使用 CSS 选择器排除节点/标签
问题描述
在文档和 SO 文章中,只有关于如何使用此命名法排除 CSS 类的参考:
response.css("div[id='content']:not([class*='infobox'])")
然而,我想要实现的是排除一个节点,甚至排除多个节点,例如<span>
元素<div>
内部的<li>
元素。
让我给你举个例子。假设我正在抓取这个 HTML:
<li class="classA">
<div class="classB">
..
</div>
<span class="classC">Whatever</span>
This is the string I want to scrape
</li>
,而且我只对抓取文本“这是我要抓取的字符串”感兴趣,因此我想跳过<div>
和<span>
节点。我尝试在scrapy shell中使用以下内容,但无济于事:
response.css(".classA:not(span|div)::text").extract()
,但我仍然得到排除的节点。
解决方案
这很容易:
1.使用css选择器
response.css('li.classA::text').extract_first()
2.使用xpath选择器
response.xpath('//li[@class = "classA"]/text()').extract_first()
推荐阅读
- shell - 如何使用命令 sed 删除空格
- angular - 将带有 POST/PUT/PATCH 请求的有效负载数据发送到 Sentry.io
- c++ - 如何在交叉编译到 Raspberry Pi 时在 Visual Studio 中添加包含目录?
- jquery - 如何使用 ajax 成功的 .html() 插入标签?
- centos7 - 升级到 CentOS7 后 PMwiki 不再工作
- django - 如何修复“Django 测试 setUp() 函数未创建 django 用户”?
- haskell - Haskell中有任何Atom数据类型吗?
- reactjs - 无法在另一个组件上显示搜索的输出
- apache-camel - 来自远程服务器的 XSLT 2.0 文件未在 ServiceMix 的蓝图骆驼路由中处理
- wordpress - 如何将托管在 wordpress 上的现有网站迁移到 GKE 上的 kubernetes?