Scrapy中如何提取含<wbr>标签的a标签内完整文本?
提取含 标签的标签完整文本解决方案
问题原因
原代码中program.css('::text').get()仅能获取第一个文本节点,而<wbr>标签将目标文本拆分为多个独立的文本节点(如Digital Business Designer (m/、w/、d)),因此只能拿到前半部分内容。同时原代码中的正则替换re.sub(r'<wbr>', '', title)无效,因为Scrapy解析HTML后,<wbr>是作为节点存在,而非文本中的<wbr>字符串。
可行解决方案
方案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
相关产品推荐
相关产品推荐

