在 Python 中抓取网站(Futbin)时如何更改平台?

Posted

技术标签:

【中文标题】在 Python 中抓取网站(Futbin)时如何更改平台?【英文标题】:How to change platform when scraping a website (Futbin) in Python? 【发布时间】:2020-11-30 07:17:19 【问题描述】:

我目前正在寻找从 Futbin 获取价格数据,特别是从这个页面 of player data。我已经通过以下特定代码成功地使用了 bs4:

spans = soup.find_all("span", class_="ps4_color font-weight-bold")

这会从玩家页面收集所有 PS4 价格,但我还想获得 Xbox 和 PC 价格。要在网站上执行此操作,您必须从右上角的图标中手动选择它,但据我所知,此链接指向相同的 url,但具有更新的价格数据。如何以与上述类似的方式抓取这些数据,因为我确信肯定有比使用 Selenium 或类似软件包更简单的方法。

任何帮助将不胜感激!

【问题讨论】:

【参考方案1】:

要为其他平台更改页面,请在您的请求中设置cookie= 参数:

import requests
from bs4 import BeautifulSoup


url = 'https://www.futbin.com/20/players?page=1'
platforms = ['ps4', 'xone', 'pc']

for platform in platforms:
    print()
    print('Platform: '.format(platform))
    print('-' * 80)

    soup = BeautifulSoup( requests.get(url, cookies='platform': platform).content, 'html.parser' )

    for s in soup.select('span.font-weight-bold'):
        print(':<40 '.format(s.find_previous('a', class_="player_name_players_table").text, s.text))

打印:

Platform: ps4
--------------------------------------------------------------------------------
Lionel Messi                             2.5M 
Virgil van Dijk                          1.82M 
Cristiano Ronaldo                        3.2M 
Diego Maradona                           4.5M 
Pelé                                     6.65M 
Kevin De Bruyne                          1.95M 
Virgil van Dijk                          1.75M 
Lionel Messi                             2.18M 
Robert Lewandowski                       805K 
Cristiano Ronaldo                        3.08M 
Pelé                                     3.35M 
Kylian Mbappé                            2.62M 
Kevin De Bruyne                          1.21M 
Sadio Mané                               783K 
Kylian Mbappé                            2.66M 
Neymar Jr                                3.83M 
Diego Maradona                           2.19M 
Sadio Mané                               625K 
Alisson                                  148K 
N'Golo Kanté                             1.51M 
Robert Lewandowski                       269K 
Ronaldo                                  0 
Zinedine Zidane                          7.15M 
Lionel Messi                             4.6M 
Lionel Messi                             1.4M 
Alisson                                  143K 
Mohamed Salah                            459K 
Raphaël Varane                           847K 
Karim Benzema                            310K 
Luis Suárez                              407K 

Platform: xone
--------------------------------------------------------------------------------
Lionel Messi                             2.15M 
Virgil van Dijk                          1.65M 
Cristiano Ronaldo                        2.53M 
Diego Maradona                           4.07M 
Pelé                                     0 
Kevin De Bruyne                          1.73M 
Virgil van Dijk                          1.6M 
Lionel Messi                             1.9M 
Robert Lewandowski                       719K 
Cristiano Ronaldo                        2.51M 
Pelé                                     3.15M 
Kylian Mbappé                            2.27M 
Kevin De Bruyne                          1.02M 
Sadio Mané                               695K 
Kylian Mbappé                            2.24M 
Neymar Jr                                3.27M 
Diego Maradona                           1.61M 
Sadio Mané                               585K 
Alisson                                  153K 
N'Golo Kanté                             1.3M 
Robert Lewandowski                       247K 
Ronaldo                                  0 
Zinedine Zidane                          6.78M 
Lionel Messi                             4.26M 
Lionel Messi                             1.24M 
Alisson                                  130K 
Mohamed Salah                            470K 
Raphaël Varane                           725K 
Karim Benzema                            272K 
Luis Suárez                              351K 

Platform: pc
--------------------------------------------------------------------------------
Lionel Messi                             3.56M 
Virgil van Dijk                          2.5M 
Cristiano Ronaldo                        3.75M 
Diego Maradona                           4.3M 
Pelé                                     0 
Kevin De Bruyne                          2.52M 
Virgil van Dijk                          2.4M 
Lionel Messi                             2.86M 
Robert Lewandowski                       1.16M 
Cristiano Ronaldo                        3.75M 
Pelé                                     5.75M 
Kylian Mbappé                            3.35M 
Kevin De Bruyne                          1.4M 
Sadio Mané                               925K 
Kylian Mbappé                            3.3M 
Neymar Jr                                4.85M 
Diego Maradona                           1.98M 
Sadio Mané                               730K 
Alisson                                  179K 
N'Golo Kanté                             1.9M 
Robert Lewandowski                       400K 
Ronaldo                                  0 
Zinedine Zidane                          0 
Lionel Messi                             4.77M 
Lionel Messi                             2.3M 
Alisson                                  160K 
Mohamed Salah                            520K 
Raphaël Varane                           940K 
Karim Benzema                            370K 
Luis Suárez                              679K 

【讨论】:

以上是关于在 Python 中抓取网站(Futbin)时如何更改平台?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Python 中抓取 javascript 网站?

如何在Python中抓取时同时打印段落和标题?

Python网页抓取 - 当页面通过JS加载内容时如何获取资源?

如何在不变的URL中抓取不同城市的多个页面 - Python 3

请教网页里的特定数据怎么抓取?

使用python如何摆脱从网站上抓取的文本中的尾随空格[重复]