Я пытался очистить этот сайт в течение прошлой недели. Я хочу думать, что я продвинулся довольно далеко, но есть последняя ошибка, которую я не могу решить. Я надеюсь, что кто-то может указать мне в правильном направлении.
Сайт: https://everynoise.com/new_releases_by_genre.cgi?genre=local®ion=NL&date=20230428&hidedupes=on
Проблема с приведенным ниже кодом заключается в том, что он теоретически получает все, что я хочу. Однако при извлечении релизов в определенном жанре df не форматируется таким образом, чтобы у вас был исполнитель и релизы, классифицированные по жанру в каждой строке.
Теперь я получаю все релизы и исполнителей для определенного жанра в виде списка в одной строке/ячейке... но жанр возвращается в моем df в виде нескольких строк, как и должно быть.
Я пробовал несколько вещей;
Я потерялся... это код, который я использовал;
genre_divs = soup.find_all('div', class_='genrename')
for genre_div in genre_divs:
# Extract the genre name from the h2 element
genre_name = genre_div.text
# Extract the genre link from the div element
genre_link = genre_div.find('a').get('href')
# Find all albumbox div elements under this genre div
album_divs = genre_div.find_next_siblings('div', class_='albumbox album')
for album_div in album_divs:
# Extract the artist name from the b element
artist_names = [b.text for b in album_div.find_all('b')]
# Extract the title attributes from the a elements
title_attrs = [a.get('title') for a in album_div.find_all('a')]
# Extract the artist links from the a elements that contain 'Aartist' in the href attribute
artist_links = [a.get('href') for a in album_div.find_all('a') if 'Aartist' in a.get('href')]
# Extract the album urls from the a elements that contain 'onclick' in the attribute
album_urls = [a.get('href') for a in album_div.find_all('a') if 'onclick' in a.attrs]
# append a dictionary for each album to the data list
for artist_name, title, artist_link, album_url in zip(artist_names, title_attrs, artist_links, album_urls):
data["Genre"].append(genre_name)
data["Artist"].append(artist_name)
data["Title"].append(title)
data["Artist_Link"].append(artist_link)
data["Album_URL"].append(album_url)
data["Genre_Link"].append(genre_link)
# create a pandas dataframe from the data list
df = pd.DataFrame(data)
вывод ДФ.
Список исполнителей в первом ряду должен относиться только к одному жанру \nelectro house 30. Второй ряд/список исполнителей должен относиться ко второму жанру, указанному на веб-сайте. Я хочу, чтобы релизы/исполнители отображались в каждой строке. Отсутствует в списке внутри ячейки и неправильно сопоставлен re. жанр.
0 \nelectro house 30
1 \nelectro house 30
2 \nelectro house 30
3 \nelectro house 30
4 \nelectro house 30
... ...
2551 \ndutch dnb 2
2552 \ndutch dnb 2
2553 \ngospel papiamento 1
2554 \ngospel papiamento 1
2555 \ngrunneger muziek 1
Artist \
0 [Dyro, Dannic, Nicky Romero, Quintino, Bassjac...
1 [Disfunktion, KAAZE, Basto, Tristan Garner, Na...
2 [Dennis Cartier, Charmes, Jay Lima, BODYWORX, ...
3 [Rank 1, Ferry Corsten, Armin van Buuren, Armi...
4 [Dastic, Wyko, MR.BLACK, Ryos, Meikle, Timmy T...
... ...
2551 [Eliazar-El Mensajero]
2552 [Kriegel]
2553 [Eliazar-El Mensajero]
2554 [Kriegel]
2555 [Kriegel]
title_attrs \
0 [artist 2 in genre\nNL rank 13,638, None, arti...
1 [artist 105 in genre\nNL rank 98,054, None, ar...
2 [artist 107 in genre\nNL rank 175,230, None, a...
3 [artist 15 in genre\nNL rank 16,021, None, art...
4 [artist 15 in genre\nNL rank 19,476, None, art...
... ...
2551 [artist 29 in genre\nNL rank 2,039,570, None]
2552 [artist 43 in genre\nNL rank 2,146,816, None]
2553 [artist 29 in genre\nNL rank 2,039,570, None]
2554 [artist 43 in genre\nNL rank 2,146,816, None]
2555 [artist 43 in genre\nNL rank 2,146,816, None]
artist_links \
0 [?genre=%21spotify%3Aartist%3A03MVmfitJTVJIxYm...
1 [?genre=%21spotify%3Aartist%3A1sXOD5MDspxw6Me8...
2 [?genre=%21spotify%3Aartist%3A0Iyc9gAnfeZEwZnt...
3 [?genre=%21spotify%3Aartist%3A1eQe86RbDKRIiGZk...
4 [?genre=%21spotify%3Aartist%3A1wdU1J2NHzcDYarT...
... ...
2551 [?genre=%21spotify%3Aartist%3A4t793XpAv8YS1EwS...
2552 [?genre=%21spotify%3Aartist%3A0sI0xeN6TwvJ1djK...
2553 [?genre=%21spotify%3Aartist%3A4t793XpAv8YS1EwS...
2554 [?genre=%21spotify%3Aartist%3A0sI0xeN6TwvJ1djK...
2555 [?genre=%21spotify%3Aartist%3A0sI0xeN6TwvJ1djK...
album_urls \
0 [spotify:album:4u42n51sa2xF2urqL1VgzK, spotify...
1 [spotify:album:3Pc6lNhhKMEgYzYjJr4xh8, spotify...
2 [spotify:album:0TIEn7BCmwZlv3iHRuKlMr, spotify...
3 [spotify:album:7nv70z42Hk4gMJoLQAEeHK, spotify...
4 [spotify:album:7d7AOxGnjwIaJ1niuNBIk3, spotify...
... ...
2551 [spotify:album:41BRZt3SZrK7ttRhkiSAHF]
2552 [spotify:album:3o9MVU9Y1TOMrQvK1zjqpo]
2553 [spotify:album:41BRZt3SZrK7ttRhkiSAHF]
2554 [spotify:album:3o9MVU9Y1TOMrQvK1zjqpo]
2555 [spotify:album:3o9MVU9Y1TOMrQvK1zjqpo]
Genre_Link
0 ?genre=electro%20house®ion=NL&date=20230428...
1 ?genre=electro%20house®ion=NL&date=20230428...
2 ?genre=electro%20house®ion=NL&date=20230428...
3 ?genre=electro%20house®ion=NL&date=20230428...
4 ?genre=electro%20house®ion=NL&date=20230428...```
добавлено в мой первоначальный пост
@AbhayChaudhary есть мысли? :)






Я не уверен на 100% в ожидаемом вами результате, но я внес незначительные исправления, и он будет генерировать такие данные, не внося никаких изменений в ту часть, где вы извлекаете данные альбома, я не был уверен в этом Полный код
url = "https://everynoise.com/new_releases_by_genre.cgi?genre=local®ion=NL&date=20230428&hidedupes=on"
data = {
"Genre": [],
"Artist": [],
"Title": [],
"Artist_Link": [],
"Album_URL": [],
"Genre_Link": []
}
soup = BeautifulSoup(requests.get(url).text, 'html.parser')
genre_divs = soup.find_all('div', class_='genrename')
for genre_div in genre_divs:
# Extract the genre name from the h2 element
genre_name = genre_div.text
# Extract the genre link from the div element
genre_link = genre_div.find('a').get('href')
# Find all albumbox div elements under this genre div
album_divs = genre_div.find_next_sibling('div').findChildren("div", class_='albumbox album')
for album_div in album_divs:
# Extract the artist name from the b element
artist_names = [b.text for b in album_div.find_all('b')]
# Extract the title attributes from the a elements
title_attrs = [a.get('title') for a in album_div.find_all('a')]
# Extract the artist links from the a elements that contain 'Aartist' in the href attribute
artist_links = [a.get('href') for a in album_div.find_all('a') if 'Aartist' in a.get('href')]
# Extract the album urls from the a elements that contain 'onclick' in the attribute
album_urls = [a.get('href') for a in album_div.find_all('a') if 'onclick' in a.attrs]
# append a dictionary for each album to the data list
for artist_name, title, artist_link, album_url in zip(artist_names, title_attrs, artist_links, album_urls):
data["Genre"].append(genre_name)
data["Artist"].append(artist_name)
data["Title"].append(title)
data["Artist_Link"].append(artist_link)
data["Album_URL"].append(album_url)
data["Genre_Link"].append(genre_link)
# create a pandas dataframe from the
# create a pandas dataframe from the data list
df = pd.DataFrame(data)
df.to_excel("data.xlsx")
ты герой! это работает :))
Рад узнать, что это сработало
каков окончательный результат, который вы ожидаете, можете ли вы добавить образец