Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $YECBGYFECGEAFWHA as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2

Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $BBWFDDBHHYHDXXAB as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2
Scrapy CSS选择器:精确提取HTML非标签包裹文本内容的实用技巧_创想鸟

Scrapy CSS选择器:精确提取HTML非标签包裹文本内容的实用技巧

Scrapy CSS选择器:精确提取HTML非标签包裹文本内容的实用技巧

本教程详细讲解了在scrapy中使用css选择器提取html中未被独立标签包裹的文本数据(如数字)的方法。通过分析`::text`选择器与`get()`和`getall()`方法的行为差异,展示了如何利用`getall()`获取所有匹配的文本节点,并通过列表索引和正则表达式精确提取目标数据,解决`get()`返回`none`或错误值的问题。

理解HTML文本节点的提取挑战

在使用Scrapy进行网页抓取时,我们经常需要从HTML中提取特定的文本信息。然而,当这些文本内容并非整齐地包裹在独立的标签(如、

等)中,而是作为父元素下的直接文本节点存在时,提取过程可能会变得复杂。例如,在一个包含多个子元素和文本节点的div中,直接使用::text选择器配合get()方法往往无法准确获取到我们期望的特定文本。

考虑以下HTML结构片段,我们的目标是提取数字“1”:

Chambres
1

在这个例子中,数字“1”是父div(带有类search-results-listings-list__item-description__characteristics__item)的一个直接文本子节点,位于一个svg标签和一个包含“Chambres”的div之后。

::text选择器与get()/getall()的行为差异

在Scrapy中,::text伪元素用于选择元素的直接文本内容。然而,它的行为与我们使用的提取方法(get()或getall())密切相关。

立即学习“前端免费学习笔记(深入)”;

巧文书 巧文书

巧文书是一款AI写标书、AI写方案的产品。通过自研的先进AI大模型,精准解析招标文件,智能生成投标内容。

巧文书 61 查看详情 巧文书

get()方法:当一个选择器匹配到多个文本节点时,get()方法只会返回第一个匹配到的文本节点。在上述HTML示例中,如果对最外层div使用::text,它可能会返回svg标签前的空白符、svg标签后的空白符,或者“Chambres”这个文本,而不是我们想要的“1”。这就是为什么最初尝试 house_listing.css(‘div.search-results-listings-list__item-description__characteristics__item::text’).get() 可能返回None或不相关文本的原因。

getall()方法:与get()不同,getall()方法会返回所有匹配到的文本节点,以列表的形式呈现。这对于提取分散在多个子元素之间的文本节点至关重要。

解决方案:结合getall()和列表索引

要精确提取上述HTML结构中的数字“1”,关键在于使用getall()获取所有文本节点,然后从结果列表中选择正确的项。

首先,我们可以使用一个更具特异性的CSS选择器来定位包含目标信息的父元素,并利用:contains()伪类来确保我们选择的是正确的列表项(例如,包含“Chambres”的特性项)。

import scrapyimport rehtml_snippet = """
<path d="M5.106 0c-.997 0-1.52.904-1.52 1.533v11.965L.074 23.95c-.054.163-.074.38-.074.486V39.2c-.017.814.727 1.554 1.54 1.554.796 0 1.54-.74 1.52-1.554v-3.555h39.88V39.2c-.016.814.724 1.554 1.52 1.554.813 0 1.56-.74 1.54-1.554V24.436c0-.106-.017-.326-.074-.486l-3.512-10.449V1.537c0-.633-.523-1.534-1.52-1.534H5.106V0zm1.54 3.07h32.708v3.663a5.499 5.499 0 0 0-2.553-.614h-9.708c-1.614 0-3.06.687-4.093 1.77a5.648 5.648 0 0 0-4.093-1.77H9.2c-.924 0-1.793.217-2.553.614V3.07zm2.553 6.098h9.708c1.45 0 2.553 1.12 2.553 2.547v.523H6.646v-.523c0-1.426 1.103-2.547 2.553-2.547zm17.894

以上就是Scrapy CSS选择器:精确提取HTML非标签包裹文本内容的实用技巧的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/594827.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
Mac玩《王国保卫战:起源》攻略:苹果电脑畅玩iOS手游教程
上一篇 2025年11月10日 17:42:11
REDMI K80系列10天销量突破100万台!刷新K系列最快破百万纪录
下一篇 2025年11月10日 17:42:15

相关推荐

发表回复

登录后才能评论
关注微信