首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >‘'str’对象不支持Python,Web-scraping中的项分配

‘'str’对象不支持Python,Web-scraping中的项分配
EN

Stack Overflow用户
提问于 2019-01-10 11:52:23
回答 3查看 101关注 0票数 0

我正试图重组我已经存在的/工作的代码。在第二个for循环中进行更改。从以下内容更改代码时,为什么会出现错误:

代码语言:javascript
运行
复制
import numpy as np
import pandas as pd
import requests
import json
from sklearn import preprocessing
from sklearn.preprocessing import OneHotEncoder

games_played = []
stats_for_games = []
for game_id in range(2017020001, 2017020010, 1):
    url = 'https://statsapi.web.nhl.com/api/v1/game/{}/boxscore'.format(game_id)
    r_2017 = requests.get(url)
    game_data_2017 = r_2017.json()

    for homeaway in ['home','away']:

        game_dict_2017 = game_data_2017.get('teams').get(homeaway).get('teamStats').get('teamSkaterStats')
        game_dict_2017['team'] = game_data_2017.get('teams').get(homeaway).get('team').get('name')
        game_dict_2017['homeaway'] = homeaway
        game_dict_2017['game_id'] = game_id
        games_played.append(game_dict_2017)

print(games_played)

对此:

代码语言:javascript
运行
复制
import numpy as np
import pandas as pd 
import requests
import json
from sklearn import preprocessing
from sklearn.preprocessing import OneHotEncoder

games_played = []
stats_for_games = []
    for game_id in range(2017020001, 2017020010, 1):
    url = 'https://statsapi.web.nhl.com/api/v1/game/{}/boxscore'.format(game_id)
    r_2017 = requests.get(url)
    game_data_2017 = r_2017.json()

    for homeaway in ['home','away']:

        game_dict_2017 = game_data_2017.get('teams').get(homeaway).get('team').get('name')
        game_dict_2017['homeaway'] = homeaway
        game_dict_2017['game_id'] = game_id
        games_played.append(game_dict_2017)

print(games_played)

运行它时,错误TypeError:'str‘对象不支持项分配

出现在

代码语言:javascript
运行
复制
 game_dict_2017['homeaway'] = homeaway

JSON样本-数据

代码语言:javascript
运行
复制
{
copyright: "NHL and the NHL Shield are registered trademarks of the 
National Hockey League. NHL and NHL team marks are the property of the 
NHL and its teams. © NHL 2019. All Rights Reserved.",
teams: {
     away: {
         team: { 
                id: 9,
                name: "Ottawa Senators",
                link: "/api/v1/teams/9"
 },
teamStats: {
    teamSkaterStats: {
                   goals: 0,
                   pim: 0,
                   shots: 0,

 }
 }
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-01-10 12:09:09

好吧,我终于明白问题出在哪里了。

以前的守则是:

代码语言:javascript
运行
复制
# In this line you created a dictionary
game_dict_2017 = game_data_2017.get('teams').get(homeaway).get('teamStats').get('teamSkaterStats')

# Here, since you have dictionary you rewrote values or created new one
game_dict_2017['team'] = game_data_2017.get('teams').get(homeaway).get('team').get('name')
game_dict_2017['homeaway'] = homeaway
game_dict_2017['game_id'] = game_id
games_played.append(game_dict_2017)

目前的代码是:

代码语言:javascript
运行
复制
# Here you are getting a string
# You previous code was 
# game_dict_2017['team'] = game_data_2017.get('teams').get(homeaway).get('team').get('name')
game_dict_2017 = game_data_2017.get('teams').get(homeaway).get('team').get('name')

# Here you are trying to work with a string as with dictionary
game_dict_2017['homeaway'] = homeaway
game_dict_2017['game_id'] = game_id
games_played.append(game_dict_2017)

为了解决这个问题,并假设不再需要game_dict_2017 = game_data_2017.get('teams').get(homeaway).get('teamStats').get('teamSkaterStats')行,代码如下所示:

代码语言:javascript
运行
复制
game_dict_2017 = dict()
game_dict_2017['team'] = game_data_2017.get('teams').get(homeaway).get('team').get('name')
game_dict_2017['homeaway'] = homeaway
game_dict_2017['game_id'] = game_id

你也可以这样做:

代码语言:javascript
运行
复制
game_dict_2017 = {
    'team': game_data_2017.get('teams').get(homeaway).get('team').get('name'),
    'homeaway': homeaway,
    'game_id': game_id
}
票数 0
EN

Stack Overflow用户

发布于 2019-01-10 12:13:58

代码语言:javascript
运行
复制
    game_dict_2017 = game_data_2017.get('teams').get(homeaway).get('team').get('name')

这一行返回一个字符串,即'Winnipeg Jets‘。一个快速的解决方法是先初始化game_dict_2017,然后将一个dict键设置为团队名称。

示例:

代码语言:javascript
运行
复制
    game_dict_2017 = dict()
    game_dict_2017['teamname'] = game_data_2017.get('teams').get(homeaway).get('team').get('name')
    game_dict_2017['homeaway'] = homeaway
    game_dict_2017['game_id'] = 2017020001
    games_played.append(game_dict_2017)
票数 0
EN

Stack Overflow用户

发布于 2019-01-10 11:55:21

代码语言:javascript
运行
复制
    game_dict_2017 = game_data_2017.get('teams').get(homeaway).get('team').get('name')
    game_dict_2017['homeaway'] = homeaway
    game_dict_2017['game_id'] = game_id

这就是问题所在。

您定义了game_dict_2017,我想它是一个字符串。然后试着用它作为字典,我想你搞砸了game_dict_2017game_data_2017

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54128103

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档