【问题标题】:parsing with expression including a newline in python用表达式解析,包括python中的换行符
【发布时间】:2015-07-30 00:59:01
【问题描述】:

我试图解析一些 html 文件,我想在其中提取一些名为“Total Cash”的值,但这些 html 有两种不同的形式:

  1. ...Total Cash (mrq):</td> <td class="yfnc_tabledata1">8.71B</td>...

  2. ...Total Cash (mrq):</td> <td class="yfnc_tabledata1">8.71B</td>...

解析第一个很容易,下面的代码给了我数字8.71B

source.split('Total Cash (mrq):</td> <td class="yfnc_tabledata1">')[1].split('</td>')[0]

但是,我不知道如何解析第二种形式,其中值和字符串“Total Cash (mrq)”位于两个不同的行中。有什么建议么?另外,大约有 9000 个 html,每个文件包含大约 1000 行代码。

【问题讨论】:

  • source = line1 + line2 然后正常处理?
  • 你用beautifulsoup标记了这个问题,为什么不使用soup'方法?
  • @TigerhawkT3:源码是一个html文件,包含大约1100行数据,而不仅仅是一行代码。
  • @Abdelrahman Elkady,以前从未使用过,希望有人能给我建议,包括使用 beautifulsoup 的可能性。

标签: python regex string parsing beautifulsoup


【解决方案1】:

你可以尝试像你提到的那样beautifulsoup

from bs4 import BeautifulSoup

html_doc = """
<td>Total Cash (mrq):</td>
<td class="yfnc_tabledata1">8.71B</td>
"""

soup = BeautifulSoup(html_doc, 'html.parser')

td_head = soup.find(text="Total Cash (mrq):").parent
td_desired = td_head.find_next('td')

print td_desired.contents[0]

如果你需要获取所有元素,你可以尝试find_all,使用类似这样的东西:

td_heads_content = soup.find_all(text="Total Cash (mrq):")
for elem in td_heads_content:
    td_head = elem.parent

【讨论】:

  • 在我的所有文件中运行这段代码(大约9000个HTML文件,每个文件有大约1000行数据),程序在我完成整个数据集之前就吃掉了我所有的内存,任何建议?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-09-11
  • 1970-01-01
  • 2011-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多