【问题标题】:findAll function BeautifulSoupfindAll 函数 BeautifulSoup
【发布时间】:2013-06-12 18:25:37
【问题描述】:

我一直在尝试解析存储在<td>标签之间的文本元素,例如:

<tr>
<td>Trading Hours</td>
<td><b>Monday</b> <br />
London - 23:00 Sunday - 23:00 Monday<br />
New York - 18:00 Sunday - 18:00 Monday<br />
Chicago - 17:00 Sunday - 17:00 Monday<br />
<br />
<b>Tuesday-Friday</b> <br />
London - 01:00 - 23:00<br />
New York - 20:00 - 18:00<br />
Chicago - 19:00 - 17:00<br />
</td>
</tr>

在这个简单的例子中,只有 2 个 &lt;td&gt; 标签,假设变量 tr 存储整个 html 代码块。我提取文本的逻辑如下(没有任何&lt;tr&gt;&lt;br&gt; 标签):

for td in tr.findAll('td'):
    row.append((td.find('td', text = True)).strip().strip('\n'))

问题:我的for 循环可以识别第一个&lt;td&gt; 标记,但不能识别第二个。我该如何改进?

【问题讨论】:

标签: python beautifulsoup


【解决方案1】:

text=True 告诉 BeautifulSoup 寻找带有文本的元素。如果要获取文字,需要使用.get_text()

td.find('td', text=True).get_text(strip=True)

【讨论】:

  • 即使在获取文本之前,当我这样做时:for td in tr.findAll('td'): print td,它只会打印第一个 &lt;td&gt; ... &lt;/td&gt; 标签而不是第二个标签。我试图弄清楚为什么会发生这种情况。
  • @MaxKim:你从哪里得到这个 HTML?它可能格式不正确。
  • @MaxKim,你用的是什么版本的 BeautifulSoup?我使用了您发布的相同 html,它找到了两个 td 的元素。您发布的 html 在我看来格式正确。
  • 我正在使用 Beautifulsoup 3,.get_text() 出现错误:'NavigableString' object has no attribute 'get_text'
猜你喜欢
  • 2012-05-18
  • 2017-01-21
  • 1970-01-01
  • 1970-01-01
  • 2017-08-03
  • 1970-01-01
  • 2019-03-24
  • 1970-01-01
  • 2021-11-21
相关资源
最近更新 更多