Я использую библиотеку Pytrends Python, чтобы собрать данные о интересах для списка фильмов из нескольких стран. Тем не менее, значения, которые я получаю в результирующем DataFrame, часто отличаются от того, что я вижу в веб-интерфейсе Google Trends, даже несмотря на то, что сроки, регион и ключевые слова точно такие же. Я также устанавливаю пользовательские заголовки, чтобы избежать 429 ошибок. UI. < /P>
Вот код: < /p>
import pandas as pd
from pytrends.request import TrendReq as UTrendReq
import time
import random
from functools import reduce
REFERENCE_MOVIE = "Gone with the Wind"
movies = [
"Gone with the Wind",
"Casablanca",
"The Godfather",
"Citizen Kane",
"The Sound of Music",
"12 Angry Men",
"Psycho",
"Singin' in the Rain"
]
movies_nonref = [m for m in movies if m != REFERENCE_MOVIE]
countries = {
"US": "United States",
"FR": "France",
"GB": "United Kingdom"
}
category = 0
timeframe = "today 5-y"
gprop = ""
class TrendReq(UTrendReq):
def _get_data(self, url, method='get', trim_chars=0, **kwargs):
headers = {
'accept': 'application/json, text/plain, */*',
'accept-language': 'en-US,en;q=0.9',
'content-type': 'application/json;charset=UTF-8',
'origin': 'https://trends.google.com',
'referer': 'https://trends.google.com/trends/',
'user-agent': 'Mozilla/5.0'
}
return super()._get_data(url, method=method, trim_chars=trim_chars, headers=headers, **kwargs)
pytrends = TrendReq(hl='en-US', tz=360)
def chunk(lst, n):
for i in range(0, len(lst), n):
yield lst[i:i + n]
all_dfs = []
for country_code, country_name in countries.items():
batches = list(chunk(movies_nonref, 4))
for batch in batches:
batch_movies = [REFERENCE_MOVIE] + batch
for attempt in range(3):
try:
pytrends.build_payload(batch_movies, cat=category, timeframe=timeframe, geo=country_code, gprop=gprop)
df = pytrends.interest_over_time().drop(columns=['isPartial'], errors='ignore')
df = df.rename(columns={movie: f"{movie}: ({country_name})" for movie in batch_movies})
df = df.reset_index()
all_dfs.append(df)
break
except Exception as e:
if attempt < 2:
time.sleep(random.uniform(5, 10))
time.sleep(random.uniform(5, 10))
if all_dfs:
result = reduce(lambda left, right: pd.merge(left, right, on="date", how="outer"), all_dfs)
result = result.rename(columns={"date": "Week"})
movie_row = [""] + [col.split(": (")[0] for col in result.columns if col != "Week"]
country_row = ["Week"] + [col.split(": (")[1][:-1] for col in result.columns if col != "Week"]
final_df = pd.DataFrame([movie_row, country_row], columns=result.columns)
final_df = pd.concat([final_df, result], ignore_index=True)
final_df.to_csv("movie_trends_interest_over_time.csv", header=False, index=False)
else:
print("No data collected.")
Подробнее здесь: https://stackoverflow.com/questions/796 ... fter-norma
Почему питранды возвращают разные значения, чем пользовательский интерфейс Google Trends даже после нормализации? ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Невозможно щелкнуть текст «Исследовать» на сайте Google Trends с помощью Selenium Python.
Anonymous » » в форуме Python - 0 Ответы
- 32 Просмотры
-
Последнее сообщение Anonymous
-