Home > database >  Why can't I append a dictionary index for one item but I can for any other item?
Why can't I append a dictionary index for one item but I can for any other item?

Time:11-18

# Import libraries
from bs4 import BeautifulSoup
import requests
import pandas as pd
import time
import ast

start_time = time.time()
s = requests.Session()

#Get URL and extract content
page=1
traits = []
accessories, backgrounds, shoes = [], [], []

while page != 100:

    params = {
        ('arg', f"Qmer3VzaeFhb7c5uiwuHJbRuVCaUu72DcnSoUKb1EvnB2x/{page}"),
    }

    content = s.get('https://ipfs.infura.io:5001/api/v0/cat', params=params, auth=('', ''))
    soup = BeautifulSoup(content.text, 'html.parser')
    page = page   1
    
    traits = ast.literal_eval(soup.text)['attributes']

    df = pd.DataFrame(traits)
    df1 = df[df['trait_type']=='ACCESSORIES']

    accessories.append(df1['value'].values[0])

Can anyone explain to my what I'm doing wrong? When I run the above code I get the following error:

IndexError: index 0 is out of bounds for axis 0 with size 0

But whenever I use a different index like BACKGROUNDS or SHOES instead of ACCESSORIES, like the following code, I don't get the above error and it runs perfectly.

# Import libraries
from bs4 import BeautifulSoup
import requests
import pandas as pd
import time
import ast

start_time = time.time()
s = requests.Session()

#Get URL and extract content
page=1
traits = []
accessories, backgrounds, shoes = [], [], []

while page != 100:

    params = {
        ('arg', f"Qmer3VzaeFhb7c5uiwuHJbRuVCaUu72DcnSoUKb1EvnB2x/{page}"),
    }

    content = s.get('https://ipfs.infura.io:5001/api/v0/cat', params=params, auth=('', ''))
    soup = BeautifulSoup(content.text, 'html.parser')
    page = page   1
    
    traits = ast.literal_eval(soup.text)['attributes']

    df = pd.DataFrame(traits)
    df1 = df[df['trait_type']=='BACKGROUND']

    backgrounds.append(df1['value'].values[0])

Can anyone here help me figure out what I'm doing different or wrong between the two code?

P.S. When running either code up until the append line, both BACKGROUND and ACCESSORIES are listed in df and df1. Only when I add the append line does the ACCESSORIES index dissapear, but this doesn't happen for BACKGROUND or SHOES.

CodePudding user response:

Following code solves the issue:

# Import libraries
from bs4 import BeautifulSoup
import requests
import pandas as pd
import time
import ast

start_time = time.time()
s = requests.Session()

#Get URL and extract content
page=1
traits = []
accessories, backgrounds, shoes = [], [], []

while page != 100:

    params = {
        ('arg', f"Qmer3VzaeFhb7c5uiwuHJbRuVCaUu72DcnSoUKb1EvnB2x/{page}"),
    }

    content = s.get('https://ipfs.infura.io:5001/api/v0/cat', params=params, auth=('', ''))
    soup = BeautifulSoup(content.text, 'html.parser')
    page = page   1
    
    traits = ast.literal_eval(soup.text)['attributes']

    df = pd.DataFrame(traits)
    df1 = df[df['trait_type']=='ACCESSORIES']

    try:
        accessories.append(df1['value'].values[0])
    except:
        pass
  • Related