You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Scrapy中如何提取含<wbr>标签的a标签内完整文本?

问题原因

原代码中program.css('::text').get()仅能获取第一个文本节点,而<wbr>标签将目标文本拆分为多个独立的文本节点(如Digital Business Designer (m/、w/、d)),因此只能拿到前半部分内容。同时原代码中的正则替换re.sub(r'&lt;wbr&gt;', '', title)无效,因为Scrapy解析HTML后,<wbr>是作为节点存在,而非文本中的&lt;wbr&gt;字符串。

可行解决方案

方案1:获取所有文本节点后拼接

使用getall()获取节点下的所有文本片段,再拼接为完整文本:

async def parse(self, response):
    programs = response.css('#programslist')
    for program in programs.css('.title'):
        title_parts = program.css('::text').getall()
        title = ''.join(title_parts)
        yield {'title': title}

方案2:使用XPath的normalize-space直接获取完整文本

通过XPath的normalize-space(.)方法,直接提取节点下的所有文本内容(自动忽略内部的<wbr>等标签,同时去除多余空格):

async def parse(self, response):
    programs = response.css('#programslist')
    for program in programs.css('.title'):
        title = program.xpath('normalize-space(.)').get()
        yield {'title': title}

方案3:CSS选择器结合文本提取简写

用getall()获取所有文本后拼接(extract()为旧方法,推荐使用getall()):

async def parse(self, response):
    programs = response.css('#programslist')
    for program in programs.css('.title'):
        title = ''.join(program.css('::text').getall())
        yield {'title': title}

内容的提问来源于stack exchange,提问作者Rasty

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 12:29:58