从文章中提取文本,如何在div中过滤标签?

时间:2017-05-02 16:11:31

标签: python beautifulsoup scrapy

我们正在使用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中不需要的标签吗? 我们是否强制写一个函数来清除提取的文本?

2 个答案:

答案 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())