【问题标题】:How to read data line by line using BeautifulSoup?如何使用 BeautifulSoup 逐行读取数据?
【发布时间】:2020-05-02 12:33:10
【问题描述】:

我有以下代码,它为我提供了 Example.html 文件中的数据。但我必须逐行读取数据

html_doc = open("Example.html","r")
soup = BeautifulSoup(html_doc, 'html.parser')
print(soup.get_text())

【问题讨论】:

  • 您能添加您的预期输出吗?
  • 假设下面是 HTML 文件中的文本 一只口渴的乌鸦飞进村庄寻找水源。乌鸦飞过房屋、田野和树木。乌鸦把嘴伸进水罐里,却够不着水。水位太低,狭窄的开口阻止了他的脖子一直向下预期输出:我必须先阅读第一行,而不是比较第一行是否包含“防止”一词。如果它包含如果不读取下一行并进行比较,则执行某些操作。比较我可以,但我不知道如何逐行阅读文本。
  • HTML 文件中的“行”是什么意思?物理行,由\n? 分隔分开<p> 内容?在您当前的本地浏览器窗口中,使用您当前的字体和大小的文本行被您的浏览器打断了吗?
  • 行由 分隔

标签: python beautifulsoup


【解决方案1】:

您可以使用 splitlines() 方法轻松地逐行读取数据。

对于您的情况,您可以使用:

html_doc = open("Example.html","r")
soup = BeautifulSoup(html_doc, 'html.parser')
output = soup.get_text()

for row in output.splitlines():
  # Do whatever you want

编辑:对于在 if 条件后读取 20 行的请求,您可以枚举 splitlines() 方法并阅读就在接下来的 20 行。然后,使用 break 语句退出 for 循环。

for idx, row in enumerate(output.splitlines()):
    if row == "ADD.c":
       twenty_line = idx + 20
    try:
       if idx < twenty_line:
          print(row + "\n")
       else:
          break
    except NameError as e:
        print(e)

【讨论】:

  • 这对我有用,但如果我在 output.splitlines() 中有类似 for row 的条件:if row == "ADD.c": now if the row is equal to ADD.c than read接下来的 20 行我们如何做到这一点?
  • 我已根据您的评论编辑了答案。 @RakeshSharma
猜你喜欢
  • 2011-04-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-13
  • 1970-01-01
  • 1970-01-01
  • 2011-07-24
  • 2020-07-22
相关资源
最近更新 更多