【问题标题】:Extracting text from an article, how filter tags in a div?从文章中提取文本,如何过滤div中的标签?
【发布时间】:2017-09-30 06:08:59
【问题描述】:

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

【问题讨论】:

  • 网站网址是什么?
  • Scrapy 有一个 library w3lib 用于删除标签。您可以将它与项目加载器一起使用example
  • 我正在查看物品加载器的工作原理,很快就会反馈。
  • 很难理解项目加载器上下文,如果有人有好的链接或教程:)

标签: python beautifulsoup scrapy


【解决方案1】:

如果您使用 xpath 函数 not 并将您的 xpath 表达式修改为:

article['body'] = ''.join(response.xpath('//div[@itemprop="articleBody"]/*[not(script)]//text()').extract())

【讨论】:

  • 不幸的是不起作用,语法错误:标识符中的字符无效
  • 请复制并重试。我编辑了我的 xpath 表达式,它有一些不可见的空白区域。现在应该是work
【解决方案2】:

如果您想删除 所有 标签,您可以尝试使用 xpath 的 text() 函数:

article['body'] = response.xpath('//div[@itemprop="articleBody"]//text()').extract_first()

除非里面有带有Javascript的标签,否则它工作得很好。

【讨论】:

  • 我们只想删除包含此类文本的不需要的标签:"\nrequire(['highcharts/4.1.9','highcharts-standalone'], function() {\n\n \t//FONCTIONS GLOBALES\n\tHighcharts.setOptions({\n\..."
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-02
  • 1970-01-01
  • 1970-01-01
  • 2019-05-22
  • 2010-12-09
相关资源
最近更新 更多