【问题标题】:Scraping text from html in python and then saving the text in a variable without \n operator在 python 中从 html 中抓取文本,然后将文本保存在没有 \n 运算符的变量中
【发布时间】:2020-04-07 21:49:44
【问题描述】:

我已使用以下代码将 html 文件中的文本保存在名为“data”的变量中:

from bs4 import BeautifulSoup, NavigableString, Tag

soup=BeautifulSoup(html, "lxml")
data = "ANALYSIS\n"
for header in soup.find_all('h2', text=re.compile('Analysis')):
    nextNode = header
    while True:
        nextNode = nextNode.nextSibling
        if nextNode is None:
            break
        if isinstance(nextNode, Tag):
            if nextNode.name == "h2":
                break
            data = data + "\n\n" + nextNode.text

我需要对我的数据变量做两件事: 1.删​​除一行中不需要的\n,然后 2. 保持段落之间的\n格式,但在我调用数据变量时不显示\n。

我的目标是最终将数据变量保存在一个 excel 文件中。

目前我的输出是:

'分析\n\n\n概述\n\n财务改善大大改善; TSR 表现优于\n同行。所有基于收益和盈利能力的指标均显示同比\n有所改善。 \n\n年度激励\n\n激励指标基本不变,但目标目标的披露\n进一步增强。与上一年一样,2018 年度\n激励计划由五个公司类别组成:(i) 健康、\n安全和环境,(ii) 运营,(iii) 财务,(iv) 战略\n里程碑,以及 (v) ) 股东总回报。该公司披露了每个类别中的某些指标,包括相关指标的目标和支出矩阵。为战略里程碑类别的三个指标披露了不同的\n目标,这比 2017 年有所改进,当时该指标中的目标通常是\n定性的。除了相对指标外,没有披露阈值或最大目标。

但我想要的输出是(存储在 excel 文件中):

分析

概览

财务改善大大改善;股东总回报优于同行。所有基于收益和盈利能力的衡量指标均显示同比改善。

年度奖励

激励指标基本没有变化,但目标目标的披露进一步加强。与上一年一样,2018 年度激励计划由五个企业类别组成:(i) 健康、安全和环境,(ii) 运营,(iii) 财务,(iv) 战略里程碑,以及 (v) TSR。该公司披露了每个类别中的某些指标,包括相关指标的目标和支出矩阵。战略里程碑类别下的三个指标披露了不同的目标,这比 2017 年有所改进,当时指标中的目标通常是定性的。除了相对指标外,没有披露阈值或最大目标。

请告知我如何以这种格式保存数据?谢谢

【问题讨论】:

    标签: python html web-scraping text beautifulsoup


    【解决方案1】:

    你真的不需要 \n\n 来做你想做的事。应该做的是将数据附加到列表中。

    
    from bs4 import BeautifulSoup, NavigableString, Tag
    
    soup=BeautifulSoup(html, "lxml")
    data = ["ANALYSIS"]
    for header in soup.find_all('h2', text=re.compile('Analysis')):
        nextNode = header
        while True:
            nextNode = nextNode.nextSibling
            if nextNode is None:
                break
            if isinstance(nextNode, Tag):
                if nextNode.name == "h2":
                    break
                data.append(nextNode.text)
    

    这使您可以执行许多文件 IO 操作,包括:

    with open("outfile.csv", "a") as output:
      for entry in data:
        outfile.write(data+"\n\n")
      outfile.close()
    

    这里我使用的是 CSV,因为 CSV 是一种无标记的 Excel 兼容文件类型。 Excel 以与标准电子表格相同的格式呈现 CSV 文件。

    要查看数据,您可能需要使用以下方法遍历数组:

    
    for entry in data:
      print(entry+"\n")
    

    这会给你:

    分析

    概览

    财务状况大幅改善;股东总回报优于同行。所有基于收益和盈利能力的指标均显示同比改善。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-30
      • 2012-02-27
      • 1970-01-01
      • 1970-01-01
      • 2012-05-12
      • 2014-04-10
      • 2021-01-24
      相关资源
      最近更新 更多