使用Scrapy与Python爬取网页时,XPath提取事件描述含多余字符的问题
解决Scrapy抓取事件描述时多余字符的问题
嘿,我懂你现在的烦恼——抓回来的事件描述里全是多余的空格、\r\n这类没用的字符,看着乱糟糟的!给你几个实用的解决办法:
方法一:在XPath层面直接过滤处理
借助XPath的原生函数,就能直接拿到干净的文本:
要是想保留文本的段落结构(比如不同段落分开),用这个XPath:
clean_text_list = response.xpath('//*[@class="events-discription-block"]//text()[normalize-space()]').getall()这个写法会先过滤掉那些只有空白字符的无效文本节点,剩下的都是有实际内容的文本,而且
normalize-space()会自动去掉每个文本前后的空白和换行。如果想直接把整个事件描述合并成一段干净的文本,这个更简单:
full_clean_text = response.xpath('normalize-space(//*[@class="events-discription-block"])').get()它会把目标节点下的所有文本合并,同时自动清除所有多余的空格、换行符。
方法二:拿到结果后用Python代码清洗
如果需要更灵活的格式控制,先抓原始文本再用字符串操作清洗:
# 推荐用getall(),是extract()的新版本别名,语义更清晰 raw_texts = response.xpath('//*[@class="events-discription-block"]//*/text()').getall() # 清洗逻辑:去掉每个文本的前后空白,过滤空字符串,再用空格连接 cleaned_text = ' '.join([text.strip() for text in raw_texts if text.strip()])
为啥原来的写法会有多余字符?
你之前用的//*/text()会提取目标节点下所有子节点的文本,包括HTML里用来排版的空白节点(比如只有换行、空格的节点),所以就会拿到一堆没用的' '、'\r\n'啦。
内容的提问来源于stack exchange,提问作者Deba




