Я застрял в очистке этого сайта - добрался до 85%

Я пытался очистить этот сайт в течение прошлой недели. Я хочу думать, что я продвинулся довольно далеко, но есть последняя ошибка, которую я не могу решить. Я надеюсь, что кто-то может указать мне в правильном направлении.

Сайт: https://everynoise.com/new_releases_by_genre.cgi?genre=local&region=NL&date=20230428&hidedupes=on

Проблема с приведенным ниже кодом заключается в том, что он теоретически получает все, что я хочу. Однако при извлечении релизов в определенном жанре df не форматируется таким образом, чтобы у вас был исполнитель и релизы, классифицированные по жанру в каждой строке.

Теперь я получаю все релизы и исполнителей для определенного жанра в виде списка в одной строке/ячейке... но жанр возвращается в моем df в виде нескольких строк, как и должно быть.

Я пробовал несколько вещей;

  • разная структура петель
  • различные элементы класса div
  • разные методы добавления в 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&region=NL&date=20230428...  
1     ?genre=electro%20house&region=NL&date=20230428...  
2     ?genre=electro%20house&region=NL&date=20230428...  
3     ?genre=electro%20house&region=NL&date=20230428...  
4     ?genre=electro%20house&region=NL&date=20230428...```

каков окончательный результат, который вы ожидаете, можете ли вы добавить образец

Abhay Chaudhary 12.05.2023 13:53

добавлено в мой первоначальный пост

jsb92 12.05.2023 14:02

@AbhayChaudhary есть мысли? :)

jsb92 15.05.2023 07:30
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
3
73
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я не уверен на 100% в ожидаемом вами результате, но я внес незначительные исправления, и он будет генерировать такие данные, не внося никаких изменений в ту часть, где вы извлекаете данные альбома, я не был уверен в этом Полный код

url = "https://everynoise.com/new_releases_by_genre.cgi?genre=local&region=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")

ты герой! это работает :))

jsb92 15.05.2023 17:03

Рад узнать, что это сработало

Abhay Chaudhary 15.05.2023 17:50

Другие вопросы по теме