如何从标签中提取值

时间:2019-01-30 09:22:18

标签: python web-scraping beautifulsoup

我正在尝试从网站抓取赔率数据。为了使事情保持简单,这是我目前所处的位置

我成功地连接并检索了页面内容,因此我将省略前面的步骤以直接指向

[...]
page_response = requests.get(page_link, timeout=5)
# parse html
page_content = BeautifulSoup(page_response.content, "html.parser")

rows = []
rows_list = page_content.find_all('tr')

(仅显示第一行,只是为了保持简洁)

rows_list[1]

返回此

<tr><td class="h-text-left"><a class="in-match" href="/soccer/algeria/ligue-1/constantine-mo-bejaia/84nzpMc0/"><span><strong>Constantine</strong></span> - <span>MO Bejaia</span></a></td><td class="h-text-center"><a href="/soccer/algeria/ligue-1/constantine-mo-bejaia/84nzpMc0/">1:0</a></td><td class="table-main__odds colored"><span><span><span data-odd="1.73"></span></span></span></td><td class="table-main__odds" data-odd="3.18"></td><td class="table-main__odds" data-odd="4.75"></td><td class="h-text-right h-text-no-wrap">27.01.</td></tr>

选择标签

row = rows_list[1].find_all('td')
row

返回

[<td class="h-text-left"><a class="in-match" href="/soccer/algeria/ligue-1/constantine-mo-bejaia/84nzpMc0/"><span><strong>Constantine</strong></span> - <span>MO Bejaia</span></a></td>,
<td class="h-text-center"><a href="/soccer/algeria/ligue-1/constantine-mo-bejaia/84nzpMc0/">1:0</a></td>,
<td class="table-main__odds colored"><span><span><span data-odd="1.73"></span></span></span></td>,
<td class="table-main__odds" data-odd="3.18"></td>,
<td class="table-main__odds" data-odd="4.75"></td>,
<td class="h-text-right h-text-no-wrap">27.01.</td>]

我需要的数据在这里,并且对于具有“文本”属性的所有行都易于检索

row[0].text
'Constantine - MO Bejaia'

row[1].text
'1:0'

但是对于其他这些行,我不知道如何获取“ data-odd”的值

row[2]
<td class="table-main__odds colored"><span><span><span data-odd="1.73"></span></span></span></td>

row[3]
<td class="table-main__odds" data-odd="3.18"></td>

row[4]
<td class="table-main__odds" data-odd="4.75"></td>

分别为1.73、3.18和4.75

感谢您的时间

3 个答案:

答案 0 :(得分:1)

在您的问题中,您可以像row['your index']['yourtag']这样得到

row[3]['data-odd']
row[4]['data-odd']

我知道您的row[2]的{​​{1}}在span标签中。这样就可以得到范围,然后像这样解析data-odd

data-odd

答案 1 :(得分:0)

这些东西称为标记属性。如果我的记忆很好,则可以通过以下操作获取特定行的 data-odd 值:

row[2]['data-odd']
1.73

答案 2 :(得分:0)

它的工作方式类似于dict。您可以使用

row[x].get('key') 

row[x]['key']