我们正在使用scrapy并希望获得位于特定div中的文章的正文。所以我们写了这个:
article['body'] = response.xpath('string(//div[@itemprop="articleBody"])').extract_first()
问题在于,有时我们会收到不受欢迎的文字。 例如,我们从位于div中的样式标记中获取此文本: “#container_14931537823 {\ n \ t \ tpadding:5px 5px 0px 10px;”
我们可以用beautifulsoup解析文章,但我们会得到相同的结果:
article['body'] = ''.join(soup.find_all('div',attrs={"itemprop" : "articleBody"})[0].text)
我们确定所有文本正文所在的div,然后我们应用一个方法(字符串或文本)来提取和连接我们的文本,但是可以排除这个div中不需要的标签吗? 我们是否强制写一个函数来清除提取的文本?
答案 0 :(得分:1)
如果您希望删除所有标记,则可以尝试使用xpath' text()
功能:
article['body'] = response.xpath('//div[@itemprop="articleBody"]//text()').extract_first()
除非里面有Javascript标签,否则效果很好。
答案 1 :(得分:1)
如果使用xpath函数not并将xpath表达式修改为:
,则可以从该文章中获取所有文本而不使用script
标记
article['body'] = ''.join(response.xpath('//div[@itemprop="articleBody"]/*[not(script)]//text()').extract())