Я работаю над веб-скребком для Spotify Charts, чтобы извлекать 200 лучших ежедневных песен каждый день. Я сделал все, чтобы извлечь интересующие меня данные, включая ранг, исполнителя, название трека и номера потоков. То, на чем я застрял - это поместить все в DataFrame для экспорта в CSV, чтобы преуспеть. Прямо сейчас, когда я печатаю свой DataFrame, он обрабатывает каждый цикл как 1 строку с 4 столбцами, а не 200 строк с 4 столбцами.
Я не уверен, в чем проблема, потому что я попробовал почти все и изучил это столько, сколько мог. Я знаю, что с индексированием что-то не так, потому что каждое «что должно быть строкой» имеет один и тот же первый индекс «0», когда они должны идти последовательно до 199. Кроме того, имена столбцов для моего DataFrame продолжают повторяться после каждого «что должно быть» ряд ", так что я знаю, что там определенно есть проблема.
import requests
from bs4 import BeautifulSoup
from datetime import date, timedelta
from time import time
from time import sleep
from random import randint
import pandas as pd
import numpy as np
base_url = 'https://spotifycharts.com/regional/global/daily/'
r = requests.get(base_url)
soup = BeautifulSoup(r.text, 'html.parser')
chart = soup.find('table', {'class': 'chart-table'})
tbody = chart.find('tbody')
for tr in tbody.find_all('tr'):
rank_text = []
rank_text_elem = tr.find('td', {'class': 'chart-table-
position'})
for item in rank_text_elem:
rank_text = []
rank_text.append(item)
artist_text = []
artist_text_elem = tr.find('td', {'class': 'chart-table-
track'}).find_all('span')
for item in artist_text_elem:
artist_text = []
artist_text.append(item.text.replace('by ','').strip())
title_text = []
title_text_elem = tr.find('td', {'class': 'chart-table-
track'}).find_all('strong')
for item in title_text_elem:
title_text = []
title_text.append(item.text)
streams_text = []
streams_text_elem = tr.find('td', {'class': 'chart-table-streams'})
for item in streams_text_elem:
streams_text = []
streams_text.append(item)
# creating dataframe to store 4 variables
list_of_data = list(zip(rank_text, artist_text, title_text,
streams_text))
df = pd.DataFrame(list_of_data, columns =
['Rank','Artist','Title','Streams'])
print(df)
По сути, я пытаюсь создать фрейм данных, который будет содержать 4 переменные в каждой строке по 200 строк для каждой даты разбивки глобальных диаграмм. Пожалуйста, не обращайте внимания на некоторые из модулей и библиотек, которые я включил сверху, они используются для перебора каждой страницы исторических данных на основе динамических URL, которые я уже выяснил. Любая помощь с благодарностью! Спасибо!