如何从Web Scrap创建Pandas DataFrame?

时间:2018-10-29 17:34:54

标签: python json pandas dataframe web-scraping

我想使用此Web抓取工具创建一个熊猫数据框,以便我可以将数据导出到excel。有人熟悉吗?我在网上和在此站点上看到了不同的方法,但是无法成功地通过此刮板复制结果。

这是到目前为止的代码:

import requests

source = requests.get("https://api.lineups.com/nba/fetch/lineups/gateway").json()

for team in source['data']:
    print("\n%s players\n" % team['home_route'].capitalize())
    for player in team['home_players']:
        print(player['name'])
    print("\n%s players\n" % team['away_route'].capitalize())
    for player in team['away_players']:
        print(player['name'])

该站点似乎有用,但是示例不同:

https://www.tutorialspoint.com/python_pandas/python_pandas_dataframe.htm

这是stackoverflow.com的另一个示例:

Loading web scraping results into Pandas DataFrame

我是编码/抓取的新手,因此非常感谢您的帮助。预先感谢您的时间和精力!

3 个答案:

答案 0 :(得分:5)

我添加了一个解决方案,以dataframe的团队合作方式,希望对您有所帮助。 Updated代码

import requests 

source = requests.get("https://api.lineups.com/nba/fetch/lineups/gateway").json()
players = []
teams = []
for team in source['data']:
    print("\n%s players\n" % team['home_route'].capitalize())
    teams.append(team['home_route'].capitalize())
    teams.append(team['away_route'].capitalize())
    temp = []
    temp1 = []
    for player in team['home_players']:
        print(player['name'])
        temp.append(player['name'])
    print("\n%s players\n" % team['away_route'].capitalize())
    for player in team['away_players']:
        print(player['name'])
        temp1.append(player['name'])

    players.append(temp)
    players.append(temp1)

import pandas as pd
df = pd.DataFrame(columns=teams)
for i in range(0, len(df.columns)):
    df[df.columns[i]] = players[i]

df

enter image description here

要导出为ex​​cel,您可以

df.to_excel('result.xlsx')

答案 1 :(得分:1)

Python requests方便地将json呈现为dict,因此您可以在pd.DataFrame构造函数中使用dict。

import pandas as pd
df = pd.DataFrame([dict1, dict2, dict3])
# Do your data processing here
df.to_csv("myfile.csv")

Pandas还具有pd.io.json以及诸如json_normalize这样的助手,因此一旦数据进入数据框,您就可以将嵌套的json处理为表格数据,依此类推。

答案 2 :(得分:1)

您可以尝试如下操作。

arr_bins = np.bincount(np.concatenate(list_arr))
histo = np.array([range(len(arr_bins)),arr_bins]).T

现在您可以通过>>> import pandas as pd >>> import json >>> import requests >>> source = requests.get("https://api.lineups.com/nba/fetch/lineups/gateway").json() >>> df = pd.DataFrame.from_dict(source) # directly use source as itself is a dict 将数据帧转换为csv格式,如下所示:

df.to_csv

下面只是您可以根据需要处理数据的列。

>>> df.to_csv("nba_play.csv")

但是,正如Charles所说,您可以使用>>> df.columns Index(['bottom_header', 'bottom_paragraph', 'data', 'heading', 'intro_paragraph', 'page_title', 'twitter_link'], dtype='object') ,以表格形式更好地查看数据。

json_normalize

希望,这会有所帮助