【问题标题】:Problems with web scraping the UFC site for fighter information网络抓取 UFC 网站以获取战斗机信息的问题
【发布时间】:2020-08-02 19:09:28
【问题描述】:

我目前正在尝试建立一个 MMA 博客/统计网站,为此,我正在抓取 UFC 网站以获取每位运动员的信息。我正在使用 Beautiful Soup 和 Python。

到目前为止,我已经成功地抓取了一名运动员的姓名,但是,当我循环访问时,它只会重复第一个运动员的姓名,而不是显示下一个运动员的姓名,依此类推。

from bs4 import BeautifulSoup
import requests

source = requests.get('https://www.ufc.com/athletes/all').text
soup = BeautifulSoup(source, 'lxml')



for fighter in soup.find_all('li', attrs={'class': 'l-flex__item'}):
    # nickname = fighter.span.text
    name = soup.find('span', class_='c-listing-athlete__name').text
    record = soup.find('span', class_='c-listing-athlete__record').text
    print(name, end='')

这是我终端的输出: What happens when I print my code

如果有人能指出我在 for 循环逻辑中犯的任何错误,我将不胜感激。谢谢!

【问题讨论】:

  • 你没有在循环中的任何地方使用fighter
  • 谢谢!我完全忘记在循环本身中使用它 smh haha​​

标签: python web-scraping beautifulsoup


【解决方案1】:

您正在循环通过<li> 这是正确的,但在循环内您引用整个 url (soup)。您需要使用循环中的 fighter 变量。由于有更多的<li> 项目没有文本,您可以使用tryexcept

for fighter in soup.find_all('li', attrs={'class': 'l-flex__item'}):
    # nickname = fighter.span.text
    try: 
        name = fighter.find('span', class_='c-listing-athlete__name').text
    except: 
        pass
    try:
        record = fighter.find('span', class_='c-listing-athlete__record').text
    except:
        pass
    print(f'Name:{name.strip()}, record:{record}')

输出

Name:Shamil Abdurakhimov, record:20-5-0 (W-L-D)
Name:Ricardo Abreu, record:5-1-0 (W-L-D)
Name:Klidson Abreu, record:15-5-0 (W-L-D)
Name:Juan Adams, record:5-3-0 (W-L-D)
Name:Zarrukh Adashev, record:0-1-0 (W-L-D)
Name:Israel Adesanya, record:19-0-0 (W-L-D)
Name:Mariya Agapova, record:1-0-0 (W-L-D)
Name:Jessica Aguilar, record:20-8-0 (W-L-D)
Name:Kevin Aguilar, record:17-4-0 (W-L-D)
Name:Christian Aguilera, record:1-0-0 (W-L-D)
Name:Omari Akhmedov, record:20-4-1 (W-L-D)
Name:Omari Akhmedov, record:20-4-1 (W-L-D)

【讨论】:

  • 您,先生,是个传奇。非常感谢,这很有意义!我完全忘记了打印我在循环中使用的值哈哈。我是 Python 新手,所以我的知识有点有限。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-04
相关资源
最近更新 更多