【问题标题】:How to extract values from html table to Python?如何从html表中提取值到Python?
【发布时间】:2018-06-11 09:47:17
【问题描述】:

我有以下html代码结构,但不知道如何从<td> <a href ="....."> text1 </a> text2 </td>中提取text1和text2的值

<tbody>
        <tr class="trBgGrey"><td nowrap="nowrap">1</td><td nowrap="nowrap">11</td><td class="tdAlignL font13 fontStyle" nowrap="nowrap"><a href="http://www.hkjc.com/english/racing/horse.asp?horseno=S205">SWEET BEAN</a>(S205)</td><td class="tdAlignL font13 fontStyle" nowrap="nowrap"><a href="http://www.hkjc.com/english/racing/jockeyprofile.asp?jockeycode=MOJ&amp;season=Current">J Moreira</a></td><td class="tdAlignL font13 fontStyle" nowrap="nowrap"><a href="http://www.hkjc.com/english/racing/trainerprofile.asp?trainercode=FC&amp;season=Current">C Fownes</a></td><td nowrap="nowrap">121</td><td nowrap="nowrap">1034</td><td nowrap="nowrap">7</td><td nowrap="nowrap">-</td><td align="center" nowrap="nowrap"><table width="80" border="0" cellSpacing="0" cellPadding="0"><tr><td width="16" align="center">8</td><td width="16" align="center">8</td><td width="16" align="center">8</td><td width="16" align="center">3</td><td width="16" align="center">1</td></tr></table></td><td nowrap="nowrap">1.51.13</td><td nowrap="nowrap">5.3</td></tr>
</tr><tr class="trBgGrey"><td nowrap="nowrap">3</td><td nowrap="nowrap">2</td><td class="tdAlignL font13 fontStyle" nowrap="nowrap"><a href="http://www.hkjc.com/english/racing/horse.asp?horseno=V311">CITY WINNER</a>(V311)</td><td class="tdAlignL font13 fontStyle" nowrap="nowrap"><a href="http://www.hkjc.com/english/racing/jockeyprofile.asp?jockeycode=RN&amp;season=Current">N Rawiller</a></td><td class="tdAlignL font13 fontStyle" nowrap="nowrap"><a href="http://www.hkjc.com/english/racing/trainerprofile.asp?trainercode=TYS&amp;season=Current">Y S Tsui</a></td><td nowrap="nowrap">132</td><td nowrap="nowrap">978</td><td nowrap="nowrap">6</td><td nowrap="nowrap">1</td><td align="center" nowrap="nowrap"><table width="80" border="0" cellSpacing="0" cellPadding="0"><tr><td width="16" align="center">9</td><td width="16" align="center">9</td><td width="16" align="center">9</td><td width="16" align="center">10</td><td width="16" align="center">3</td></tr></table></td><td nowrap="nowrap">1.51.30</td><td nowrap="nowrap">22</td></tr>
        </tbody>

我尝试了如下代码,但无法获取文本值

import requests
from bs4 import BeautifulSoup
import urllib.request

race_link = 'http://racing.hkjc.com/racing/info/meeting/Results/English/Local/20171227/HV'
sauce1 = urllib.request.urlopen(race_link).read()
soup1 = BeautifulSoup(sauce1, 'html.parser')

for link in soup1.find_all('tr', {'class': 'trBgGrey'}):
    for ilink in link.find_all('td'):
        print(ilink.string)

但我的结果返回:

1
11
None
J Moreira
C Fownes
121
1034
7
-
None
8
8
8
3
1
1.51.13
5.3
.....

我的预期结果是

1
11
SWEET BEAN
(S205)
J Moreira
C Fownes
121
1034
7
-
None
8
8
8
3
1
1.51.13
5.3
......

我可以从 html 结构中获取值

<td>text1</td><td>text2</td>

但我不知道如何编写代码以从 html 结构中获取值

<td><a href="....">text1</a>text2</td>

如何从第二个结构中获取值?

【问题讨论】:

  • 我的意思是,我想从下面的html结构中提取text1和text2:
  • 你想要马的名字和ID?
  • 很抱歉这是我第一次在这里发帖,错过了一些东西。我修改了我的线程。实际上,我想知道如何在 html 结构中获取值(text1 和 text2),如下所示: text1text2
  • @cᴏʟᴅsᴘᴇᴇᴅ:事实上,我需要包括马名和 ID 在内的所有值。但是现在我只能获取除马名和 ID 之外的所有其他值。我也想得到这两个。谢谢!
  • 1.请添加预期输出的示例。 2.您添加的代码没有给出您给出的输出。例如,没有 并且没有类 trBgGrey

标签: html python-3.x html-parsing


【解决方案1】:

试试这样的:

from bs4 import element

def print_strings(elemnt):
    for c in elemnt.children:
        if isinstance(c, element.Tag):
            print_strings(c)
        else:
            print (c, end=" ")

for link in soup1.find_all('tr', {'class': 'trBgGrey'}):
    for ilink in link.find_all('td'):
        print_strings(ilink)
        print()

Try It Online

【讨论】:

  • @how2code 如果有帮助,请接受答案并解决您的问题
猜你喜欢
  • 2020-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-08
  • 1970-01-01
  • 1970-01-01
  • 2021-06-15
  • 1970-01-01
相关资源
最近更新 更多