使用Scrapy提取表格全部文本元素时部分值为换行符如何解决
Scrapy提取文本出现空白换行符的解决方法
你遇到的\n是页面dt、dd标签之间的空白文本节点,以及标签内部的换行符。首先注意Scrapy中匹配文本节点的正确写法是::text而非:text,其次直接使用文本选择器会把所有独立的文本节点单独返回,因此会混入大量无意义的空白值,同时如果标签内部有嵌套元素,还可能出现文本提取不完整的问题。
推荐解决方法
方法1:简单过滤空白(适合结构简单、无嵌套标签的场景)
直接对提取到的文本做去空白过滤,过滤后再做键值配对:
# 提取键并过滤空值 keys = [k.strip() for k in response.css('dt::text').getall() if k.strip()] # 提取值并过滤空值 vals = [v.strip() for v in response.css('dd::text').getall() if v.strip()] # 生成结果字典 data = dict(zip(keys, vals))
方法2:XPath+normalize-space(更稳妥,适配有嵌套标签的场景)
使用XPath的normalize-space()函数自动处理所有空白、换行,同时直接提取节点完整文本,避免键值匹配错位:
data = {} # 遍历所有dt节点 for dt in response.xpath('//dl/dt'): key = dt.xpath('normalize-space(.)').get() if not key: continue # 取当前dt后第一个dd节点的完整文本 val = dt.xpath('./following-sibling::dd[1]/normalize-space(.)').get() data[key] = val
两种方法都可以完全消除提取结果中的\n,完整拿到你需要的algorithm、block time等字段的对应值。
内容的提问来源于stack exchange,提问作者Nate
相关产品推荐
相关产品推荐

