Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用python为玩家列表刮表_Python_Python 2.7_Web Scraping_Beautifulsoup - Fatal编程技术网

用python为玩家列表刮表

用python为玩家列表刮表,python,python-2.7,web-scraping,beautifulsoup,Python,Python 2.7,Web Scraping,Beautifulsoup,我正在尝试将EA sports football表刮到这个网站: 我已经运行了这个简单的代码,但是我无法得到任何输出 代码: 有人能帮我一下吗?因此,该页面的问题是这些元素是由javascript动态生成的 幸运的是,大部分数据都来自api调用。因此,我们可以使用浏览器cookie绕过这一限制,向实际的api发出请求 这是我提出的,我希望它符合您的需要: import requests def parse_item(item): attr_list = item['attribute

我正在尝试将EA sports football表刮到这个网站:

我已经运行了这个简单的代码,但是我无法得到任何输出 代码:


有人能帮我一下吗?

因此,该页面的问题是这些元素是由javascript动态生成的

幸运的是,大部分数据都来自api调用。因此,我们可以使用浏览器cookie绕过这一限制,向实际的api发出请求

这是我提出的,我希望它符合您的需要:

import requests

def parse_item(item):
    attr_list = item['attributes']

    return {
        'name': item['name'],
        'type': item['playerType'],
        'OVR': item['composure'],
        'POS': item['position'],
        'PAC': get_attr_by_name(attr_list, 'PAC'),
        'DRI': get_attr_by_name(attr_list, 'DRI'),
        'SHO': get_attr_by_name(attr_list, 'SHO'),
        'DEF': get_attr_by_name(attr_list, 'DEF'),
        'PAS': get_attr_by_name(attr_list, 'PAS'),
        'PHY': get_attr_by_name(attr_list, 'PHY'),
    }

def get_attr_by_name(attr_list, attr_name):
    attr_name = attr_name.upper()

    try:
        return next(item['value'] for item in attr_list if item['name'].endswith(attr_name))
    except:
        return None


cookies = {
    'hl': 'us',
    'ak_bmsc': '2F856B67859A41FAFB7A62172F068FA7C99F9D14F555000037F4435B86E7E136~plcKkcciaz+3qtfstmojfDw6NLaOVQ0MD41+JJKpeGyyladBNwRB0lLcC8lVi+ELaolN0j0Yzs6HiXjknNAgxjejeFu1I32ZeiaXDNykNhtnNweIIWc26f6y1G6fcpEnkqc2shuFIGn0qSRkilVLfccdJ9pi6yVVjS09lvCSNsi8dNPeU8QUxup+jHmez3zlPebfRyk1zZ8bFb6DBiZ0Dyj6fJepQ89AJ6Kcaf5Ynd3FgefDstwDxcRbDKnssM14iLiSjwri5VWdNP4KtsmmP2as63Xxc5MaVBbTjyk2i5/o8Rj852VMkBWPlskrlkBkliBwOTM4rIFXxZhSSwO2+gog==',
    'bm_sv': '830B3A15206003312D12E0B6FB4A2696~GupjwX5n1ZUaBybPwNV8B+/mIEouVASaWGBxPDg0p/S9lbZ98ziLYDEUArV6w2sGEn7NdWMub6mV5tEsGLoEgI48TmNE1/TUwtEyJcmtg2SlGBlGzFi64B2XdCR6oL2xy92x6zdNb6kOL3U+8YaBhQxd5nutL7sFddcENkQOb3E=',
    'DOT_COM_PHPSESSID': 'e4r4ekoramipe1qvahf0fp2630',
    'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:62.0) Gecko/20100101 Firefox/62.0',
}

params = {
    'jsonParamObject': {
        'page': 1,
        'position': 'LF,CF,RF,ST,LW,LM,CAM,CDM,CM,RM,RW,LWB,LB,CB,RB,RWB'
    }
}

r = requests.get(
    'https://www.easports.com/fifa/ultimate-team/api/fut/item',
    params=params,
    cookies=cookies
)

items = r.json()['items']

data = [parse_item(item) for item in items]
json非常大,所以我编写了几个函数来帮助从中提取所需的数据

数据
是一个目录列表。这是单个元素的外观:

>>> data[0]
{'name': 'Cristiano Ronaldo', 'type': 'TEAM OF THE YEAR', 'OVR': 99, 'POS': 'LW', 'PAC': 98, 'DRI': 98, 'SHO': 99, 'DEF': 50, 'PAS': 94, 'PHY': 95}

您可能需要将
cookies
上的值更改为浏览器设置的值。

您可以共享预期的输出吗?顺便说一句我无法在我的浏览器提供的url上找到任何与该类相关的元素。Hi@bla预期输出为:
CRISTIANO RONALDO OVR POS PAC DRI SHO DEF PAS PHY年度最佳球队99 LW 98 99 99 50 94 95 CRISTIANO RONALDO赛季最佳球队99 ST 97 98 99 47 93 96 CRISTIANO RONALDO FUT冠军99 ST 98 99 99 99 99 47 96FUTBALL 99 ST 94 99 99 61 97 96 PELÉICONS 98 ST 95 96 96 60 93 76 OVR梅西年度最佳球队98 RW 96 99 97 45 98 81
在这种情况下,职业应该是什么?谢谢你的回复。
>>> data[0]
{'name': 'Cristiano Ronaldo', 'type': 'TEAM OF THE YEAR', 'OVR': 99, 'POS': 'LW', 'PAC': 98, 'DRI': 98, 'SHO': 99, 'DEF': 50, 'PAS': 94, 'PHY': 95}