Search code examples
pythonpython-3.xpandasgoogle-trends

Pytrends - get a multiple lists of dicts from google trends data


I'd like to get a list of dicts as shown below:

[{'produkt': 'slava ukraina', 'kraj': 'Lithuania', 'trendy %': 100}, {'produkt': 'slava ukraina', 'kraj': 'Georgia', 'trendy %': 81}, {'produkt': 'slava ukraina', 'kraj': 'Estonia', 'trendy %': 71}, {'produkt': 'slava ukraina', 'kraj': 'Finland', 'trendy %': 21}, {'produkt': 'slava ukraina', 'kraj': 'Croatia', 'trendy %': 16}, {'produkt': 'slava ukraina', 'kraj': 'Azerbaijan', 'trendy %': 14}, {'produkt': 'slava ukraina', 'kraj': 'Poland', 'trendy %': 12}, {'produkt': 'slava ukraina', 'kraj': 'Norway', 'trendy %': 12}, {'produkt': 'slava ukraina', 'kraj': 'Latvia', 'trendy %': 12}, {'produkt': 'slava ukraina', 'kraj': 'Sweden', 'trendy %': 11}, {'produkt': 'slava ukraina', 'kraj': 'Romania', 'trendy %': 8}, {'produkt': 'slava ukraina', 'kraj': 'Denmark', 'trendy %': 4}, {'produkt': 'slava ukraina', 'kraj': 'Germany', 'trendy %': 3}, {'produkt': 'slava ukraina', 'kraj': 'Austria', 'trendy %': 3}, {'produkt': 'slava ukraina', 'kraj': 'Netherlands', 'trendy %': 3}, {'produkt': 'slava ukraina', 'kraj': 'Portugal', 'trendy %': 3}, {'produkt': 'slava ukraina', 'kraj': 'Switzerland', 'trendy %': 3}, {'produkt': 'slava ukraina', 'kraj': 'United Kingdom', 'trendy %': 2}, {'produkt': 'slava ukraina', 'kraj': 'Canada', 'trendy %': 2}, {'produkt': 'slava ukraina', 'kraj': 'Belgium', 'trendy %': 2}, {'produkt': 'slava ukraina', 'kraj': 'Turkey', 'trendy %': 1}, {'produkt': 'slava ukraina', 'kraj': 'Australia', 'trendy %': 1}, {'produkt': 'slava ukraina', 'kraj': 'Spain', 'trendy %': 1}, {'produkt': 'slava ukraina', 'kraj': 'Italy', 'trendy %': 1}, {'produkt': 'slava ukraina', 'kraj': 'France', 'trendy %': 1}, {'produkt': 'slava ukraina', 'kraj': 'United States', 'trendy %': 1}]
[{'produkt': 'glory to Ukraine', 'kraj': 'Georgia', 'trendy %': 100}, {'produkt': 'glory to Ukraine', 'kraj': 'Lithuania', 'trendy %': 10}, {'produkt': 'glory to Ukraine', 'kraj': 'Canada', 'trendy %': 8}, {'produkt': 'glory to Ukraine', 'kraj': 'Hong Kong', 'trendy %': 7}, {'produkt': 'glory to Ukraine', 'kraj': 'Ireland', 'trendy %': 7}, {'produkt': 'glory to Ukraine', 'kraj': 'United States', 'trendy %': 5}, {'produkt': 'glory to Ukraine', 'kraj': 'United Kingdom', 'trendy %': 5}, {'produkt': 'glory to Ukraine', 'kraj': 'Croatia', 'trendy %': 5}, {'produkt': 'glory to Ukraine', 'kraj': 'Ukraine', 'trendy %': 5}, {'produkt': 'glory to Ukraine', 'kraj': 'Sweden', 'trendy %': 4}, {'produkt': 'glory to Ukraine', 'kraj': 'Finland', 'trendy %': 4}, {'produkt': 'glory to Ukraine', 'kraj': 'New Zealand', 'trendy %': 3}, {'produkt': 'glory to Ukraine', 'kraj': 'Singapore', 'trendy %': 3}, {'produkt': 'glory to Ukraine', 'kraj': 'Portugal', 'trendy %': 3}, {'produkt': 'glory to Ukraine', 'kraj': 'Norway', 'trendy %': 3}, {'produkt': 'glory to Ukraine', 'kraj': 'Czechia', 'trendy %': 3}, {'produkt': 'glory to Ukraine', 'kraj': 'Netherlands', 'trendy %': 2}, {'produkt': 'glory to Ukraine', 'kraj': 'Austria', 'trendy %': 2}, {'produkt': 'glory to Ukraine', 'kraj': 'Switzerland', 'trendy %': 2}, {'produkt': 'glory to Ukraine', 'kraj': 'Denmark', 'trendy %': 2}, {'produkt': 'glory to Ukraine', 'kraj': 'Australia', 'trendy %': 2}, {'produkt': 'glory to Ukraine', 'kraj': 'Germany', 'trendy %': 1}, {'produkt': 'glory to Ukraine', 'kraj': 'South Africa', 'trendy %': 1}, {'produkt': 'glory to Ukraine', 'kraj': 'South Korea', 'trendy %': 1}, {'produkt': 'glory to Ukraine', 'kraj': 'Romania', 'trendy %': 1}, {'produkt': 'glory to Ukraine', 'kraj': 'Italy', 'trendy %': 1}, {'produkt': 'glory to Ukraine', 'kraj': 'Poland', 'trendy %': 1}, {'produkt': 'glory to Ukraine', 'kraj': 'Taiwan', 'trendy %': 1}, {'produkt': 'glory to Ukraine', 'kraj': 'Turkey', 'trendy %': 1}, {'produkt': 'glory to Ukraine', 'kraj': 'Philippines', 'trendy %': 1}, {'produkt': 'glory to Ukraine', 'kraj': 'United Arab Emirates', 'trendy %': 1}, {'produkt': 'glory to Ukraine', 'kraj': 'Belgium', 'trendy %': 1}, {'produkt': 'glory to Ukraine', 'kraj': 'Spain', 'trendy %': 1}]

When I use only one argument e.g.'slava ukraina' it works perfectly fine. Example of that below:

import pandas as pd
from pytrends.request import TrendReq

pytrend = TrendReq()

kw_list = ['slava ukraina']
pytrend.build_payload(kw_list=kw_list,timeframe='now 7-d')
df = pytrend.interest_by_region()
geosy_kw_list = df[df['slava ukraina'] > 0].sort_values('slava ukraina', ascending=False)

df_to_dict = geosy_kw_list.to_dict()

lista = []
for k,v in df_to_dict.items():

    output_list = []
    for c,w in v.items():

        inner_dict = {}
        inner_dict['produkt'] = k
        inner_dict['kraj'] = c
        inner_dict['trendy %'] = w
        output_list.append(inner_dict)

    lista.append(output_list)

list_flattened = [item for sublist in lista for item in sublist]
print(list_flattened)


But with multiple arguments I get stuck.

I tried with

import pandas as pd
from pytrends.request import TrendReq

def funk_main(*args):
    pytrend = TrendReq()
    for arg in args:        
        pytrend.build_payload(kw_list=arg,timeframe='now 7-d')
        df = pytrend.interest_by_region()
        geosy_kw_list = df[df[arg] > 0].sort_values(arg, ascending=False)
        print(geosy_kw_list)

print(funk_main('slava ukraina','glory to Ukraine'))

but didn't even finished till the end because

pytrend.build_payload(kw_list=arg,timeframe='now 7-d')

gives an error here:

raise exceptions.ResponseError(
pytrends.exceptions.ResponseError: The request failed: Google returned a response with code 400.

Solution

  • OK, I guess instead of

    kw_list = arg
    

    I should use

    kw_list = [arg]
    

    Thats it. Problem solved.