首页 > 解决方案 > 我正在从表格中抓取文本,但结果是空引号 ' '

问题描述

下面是来自 HTML 代码的 6 列表格的 1 行

<tr>
  <td class="roster_jerseynum ">4</td>
  <td class="sidearm-table-player-name " data-sort="Vargas, Andres">
    <a href="/sports/mens-volleyball/roster/andres-vargas/2462">Andres 
    Vargas</a>
  </td>
  <td class="rp_position_short ">OH</td>
  <td class="height " data-sort="72">6-0</td>
  <td class="roster_class " data-sort="0">Fr.</td>
  <td class="hometownhighschool ">Bogota, Colombia / Lawrence Senior</td>
</tr>

我正在尝试抓取玩家名称第 2 列,下面是 HTML 行。

<td class="sidearm-table-player-name " data-sort="Vargas, Andres">
  <a href="/sports/mens-volleyball/roster/andres-vargas/2462">Andres 
  Vargas</a>
</td>

下面是我的代码。问题是我无法从td (cell[1]) 打印 List1 时我的代码的结果只是空引号 ' ' 并且没有玩家的名字。对于 List2,我能够毫无问题地获得高度。

我在 td 中看到名称,还有附加data-sorta标签。

需要结果作为列表

感谢任何帮助。

for row in the_Table.findAll('tr'):
  cells=row.findAll('td')
  if len(cells)== 6:
    List1.append(cells[1].find(text=True).rstrip("\n"))
    List2.append(cells[3].find(text=True).rstrip("\n"))

标签: pythonhtmlpython-2.7

解决方案


这是一个选项:

for row in the_Table.findAll('tr'):
  cells=row.findAll('td')
  if len(cells)== 6:
    List1.append(' '.join(cells[1].findAll(text=True)).rstrip("\n"))
    List2.append(' '.join(cells[3].findAll(text=True)).rstrip("\n"))

findAll()返回一个列表,即使它只找到一个项目,所以在将其转换为字符串之前,您不能对其使用字符串方法。将' '.join()列表的成员连接成一个以空格作为分隔符的字符串。

另一种选择是简单地访问text您感兴趣的每个标签的属性:

for row in the_Table.findAll('tr'):
  cells=row.findAll('td')
  if len(cells)== 6:
    List1.append(cells[1].text.rstrip("\n"))
    List2.append(cells[3].text.rstrip("\n"))

推荐阅读