在标记数据ID上使用python从espn提取数据

在标记数据ID上使用python从espn提取数据,python,beautifulsoup,screen-scraping,Python,Beautifulsoup,Screen Scraping,我正在寻找使用python从espn网站上获取一些数据 我正在使用BeautifulSoup从页面中提取内容 item = soup.findAll('span', attrs={'data-reactid': '136'})[0].text 将只显示列标题。该链接中包含URL中未显示的数据ID链接。如何浏览数据链接?单击防御或攻击链接时,url保持不变?美化组路径看起来很困难。我认为这可能对你有用: import requests import json import re url =

我正在寻找使用python从espn网站上获取一些数据

我正在使用BeautifulSoup从页面中提取内容

 item = soup.findAll('span', attrs={'data-reactid': '136'})[0].text
将只显示列标题。该链接中包含URL中未显示的数据ID链接。如何浏览数据链接?单击防御或攻击链接时,url保持不变?

美化组路径看起来很困难。我认为这可能对你有用:

import requests
import json
import re

url = "http://www.espn.co.uk/rugby/playerstats?gameId=293905&league=289234"
html_doc = requests.get(url)
# not the best regex but it works. there's a lot of data.
stats = json.loads(re.search(r"window.__INITIAL_STATE__\s*=\s*({.*});",html_doc.text).group(1))

# show what we have
stats['gamePackage']['matchLineUp'].keys()                                                                                     
# Out[42]: dict_keys(['text', 'home', 'away', 'gameState', 'sport', 'show'])

# no idea what this sport is. a typo?
stats['gamePackage']['matchLineUp']['sport']                                                                                        
# Out[43]: 'rugby'

stats['gamePackage']['matchLineUp']['home']                                                                                        
# {'name': 'ITALY',
#  'logo': 'http://a1.espncdn.com/combiner/i?img=/i/teamlogos/rugby/teams/500/20.png&h=35&w=35',
#  'team': [
#   {'id': '91554',
#    'url': 'http://en.espn.co.uk/sport/rugby/player/91554.html',
#    'name': 'Jayden Hayward',
#    'number': '15',
#    'position': 'FB',
#    'captain': False,
#    'subbed': False,
#    'homeAway': 'home',
#    ...
您可以进行迭代,或者其他任何操作:

for home_player in stats['gamePackage']['matchLineUp']['home']['team']: 
   print("{} - {}".format(home_player['name'], home_player['number'])) 
Jayden Hayward - 15
Tommaso Benvenuti - 14
Michele Campagnaro - 13
Tommaso Castello - 12
Luca Sperandio - 11
Tommaso Allan - 10
Tito Tebaldi - 9
Andrea Lovotti - 1
Leonardo Ghiraldini - 2
Simone Ferrari - 3
Alessandro Zanni - 4
Dean Budd - 5
Sebastian Negri - 6
Jake Polledri - 7
Braam Steyn - 8

这里还有很多其他信息,但我想这会让你继续…

如果你计划与页面交互,你需要浏览器自动化,例如selenium。你没有看到136的原因是因为你在搜索时寻找的是“a”,而不是span。问题是从页面加载内容。因此,在上面的示例中,如何提取表中包含J Haywards攻击统计数据的行以及显示其防御统计数据的链接。它们都是通过调用数据反应ID生成的。啊-现在我知道你在追求什么了。我没有意识到得分、进攻。。。是加载新数据的列标题,您希望能够恢复每个类别下每个玩家的所有数据列。。。