如何从html表中提取值到Python?

问题描述 投票:0回答:1

我有以下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 python-3.x html-parsing
1个回答
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

© www.soinside.com 2019 - 2024. All rights reserved.