【问题标题】:How to extract pure text from html without any additional (SCRIPT, STYLE, CSS, XML, HTML etc. tags) using python如何使用python从html中提取纯文本而不需要任何额外的(SCRIPT、STYLE、CSS、XML、HTML等标签)
【发布时间】:2019-11-11 12:14:50
【问题描述】:

我正在从 HTML 文件中获取纯文本。 HTML 文件是纯 HTML 数据,直接从网站复制粘贴(无编码问题)。 HTML 有点复杂,因为它混合了很多 cmets

我试过漂亮的汤get_text(),find_all(),BS4的所有解析器。我还尝试了 html2text。

def clean_html(data):
soup = BeautifulSoup(data, features = "lxml", from_encoding = 'utf8')
# kill all script and style elements
for script in soup(["script", "style"]):
script.extract()  # rip it out
text = soup.get_text()  # get text
return text

这会获取所有无用的标签、设计元素、带有文本的脚本。我无法解析它,因为我有超过 50k 的 HTML,而且每次格式都因不同的标签而不同。

我该如何解决这个问题?

【问题讨论】:

    标签: html


    【解决方案1】:

    我找到了上述问题的答案,

    cleanMe() 来自

    参考号:Remove all style, scripts, and html tags from an html page

    @jamescampbell 的回答

    【讨论】:

      【解决方案2】:

      您正在寻找decompose() bs4 method

      如果您需要从数百个 HTML 中提取纯文本,请查看 selectolax,它真的快,比 lxml 快。

      代码和example in the online IDE

      import requests, lxml
      from bs4 import BeautifulSoup
      
      headers = {
        'User-agent':
        "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 Edge/18.19582"
      }
      
      params = {
        "q": "lasagna recipe",
        "hl": "en"
      }
      
      def get_plain_text():
      
          soup = BeautifulSoup(requests.get('https://www.google.com/search', headers=headers, params=params).text, 'lxml')
      
          body = soup.body
          if body is None:
              return None
      
          for tag in body.select('script'):
              tag.decompose()
          for tag in body.select('style'):
              tag.decompose()
      
          text = body.get_text(separator='\n').strip()
          print(text)
      
      get_plain_text()
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-05-11
        • 2014-05-22
        • 2016-12-20
        • 1970-01-01
        • 1970-01-01
        • 2016-05-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多