【问题标题】:Beautiful Soup - Extraction of attribute's value doesn't workBeautiful Soup - 提取属性值不起作用
【发布时间】:2017-11-29 19:40:18
【问题描述】:

我正在尝试在以下代码行中获取属性“data-o”的值:

<td class="bc bs oi" data-odig="2.55" data-o="17/11" data-hcap="">17/11</td>

这是我的代码(我指的是上面有 td 标签的 URL)

import urllib.request
from bs4 import BeautifulSoup

x = urllib.request.urlopen('https://www.oddschecker.com/football/champions-
league/bayern-munich-v-paris-st-germain/winner')

soup = BeautifulSoup(x.read())

alltd = soup.find_all('td')

for n in alltd:
    print(n['data-o'])

我总是收到一条错误消息... 请帮忙?

非常感谢!

【问题讨论】:

  • 您收到什么错误信息?如果您不告诉我们错误消息是什么,我们将无法提供错误消息。

标签: python beautifulsoup tags


【解决方案1】:

由于class 标记对于您想要的'data-o' 项目是唯一的,您可能需要使用语法{'class': 'class_name'} 来获取那些包含<td> 标记的@987654325先@,然后为每个项目打印'data-o' 项目。

import urllib.request
from bs4 import BeautifulSoup

x = urllib.request.urlopen('https://www.oddschecker.com/football/champions-
league/bayern-munich-v-paris-st-germain/winner')

soup = BeautifulSoup(x.read(), 'html.parser')

alltd = soup.find_all('td', {'class': 'bc bs oi'})

for item in alltd:
    print item['data-o']

输出:

6/4
17/11
13/8
23/10

或者如果你只想要list:

print [str(item['data-o']) for item in alltd]
['6/4', '17/11', '13/8', '23/10']

希望这会有所帮助。

【讨论】:

  • 应该print item['data-o']print (item['data-o'])
  • @JasonGoal 是的,很好,对于 python3,它需要作为函数传递给print。感谢您指出这一点。
猜你喜欢
  • 2012-01-01
  • 1970-01-01
  • 2011-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多