Scrapy中使用CSS选择器如何提取span对应文本及关联键值对
问题拆解
你当前遇到的核心问题是:目标值都是不带任何标签的裸文本,夹在两个span.name节点之间,直接选span标签的方式根本触碰不到这些内容。想要把键和对应值关联,只需要顺着每个键所在的span节点,抓取它后面紧邻的文本内容就行,不需要复杂的文本拆分。
具体实现代码
# 存储最终配对好的键值对 result = {} # 遍历每个键对应的span节点(这里拿的是可操作的Selector对象,不是纯字符串) for key_span in response.css('p span.name'): # 1. 提取并清洗键 # 取span内的文本,去掉前后空白,去掉键末尾带的冒号 key = key_span.css('::text').get().strip().rstrip(':').strip() # 2. 提取并清洗对应值 # 抓当前span节点后面紧邻的第一个文本节点,做清洗去掉混入的冒号和无效空白 raw_value = key_span.xpath('./following-sibling::text()[1]').get() value = raw_value.strip().lstrip(':').strip() if raw_value else "" # 存入字典完成关联 result[key] = value
运行结果
执行完代码后,result 的内容完全符合预期:
{ "type": "phone", "comment": "there are 103002 units" }
容易踩的坑
- 别直接抓p标签下的所有裸文本拼列表,那样会把键、值的文本混在一起,还要手动拆分配对,遇到格式变动很容易出错
- 选后面的文本节点时,一定要加
[1]的索引,只取紧邻当前span的第一个文本,不然会把后面其他span的内容、其他值的内容一起抓进来,导致值不对 - 如果遇到HTML结构变动导致某个键后面没有对应文本的情况,加个空值判断,避免代码报None类型的错误
内容的提问来源于stack exchange,提问作者marlon
相关产品推荐
相关产品推荐

