Scrapy提取文本仅返回\r\n?如何获取无HTML标签内容?
问题解答
为什么提取文本仅返回\r\n?
Scrapy的CSS选择器中,::text只会提取当前匹配元素直接包含的文本节点。在你的HTML结构里,<section>标签本身没有直接包含有效文本,只有换行、缩进这类空白字符;所有实际内容都在它的子元素(<h3>、<li>)中,所以用.profile-practical-information section::text只能拿到<section>自身的空白文本\r\n。
如何获取无多余HTML标签的内容?
提供两种常用解决方案:
方法1:CSS选择器提取所有后代文本并清理
通过在选择器中添加空格,匹配<section>下所有后代元素的文本节点,再过滤空白内容并拼接:
# 获取所有文本节点 text_fragments = response.css('.profile-practical-information section ::text').getall() # 过滤空白并拼接成完整文本 clean_content = ' '.join([fragment.strip() for fragment in text_fragments if fragment.strip()])
执行后会得到:Types of sessions Face to Face - Long Term Face to Face - Short Term
方法2:XPath的string()方法直接提取
利用XPath的string(.)方法,直接获取节点下所有文本内容(自动拼接),再去除首尾空白:
clean_content = response.xpath('//div[@class="profile-practical-information tab-pane"]/section').xpath('string(.)').get().strip()
该方法会保留文本的层级换行(如果需要可以进一步处理换行符)。
内容的提问来源于stack exchange,提问作者Juc1
相关产品推荐
相关产品推荐

