Преобразование результатов find_all() в текст, чтобы их можно было использовать в фрейме данных pandas

#python #pandas #beautifulsoup

Вопрос:

Мне нужно очистить содержимое, которое находится внутри div класса, внутри другого div класса, который повторяется, поэтому мне нужно было использовать a find_all , чтобы получить их. Я хочу, чтобы они были в виде текста, поэтому, когда я помещаю их в фрейм данных, в нем указывается имя объекта внутри, как это было бы при выполнении а find(...).text вместо всей строки html

 import requests
from bs4 import BeautifulSoup
import pandas as pd


url = 'https://www.grammy.com/grammys/awards/winners-nominees/138'
page = requests.get(url).text
soup = BeautifulSoup(page,'lxml')
category = soup.find_all('div', class_ = "view-grouping-content")
print(len(category))
for c in category:
    artistName = c.find_all('div', class_ = "views-field views-field-field-description")
 

Комментарии:

1. пожалуйста, укажите желаемый вывод первых одной-трех строк фрейма данных.

Ответ №1:

 import requests
from bs4 import BeautifulSoup


def main(url):
    r = requests.get(url)
    soup = BeautifulSoup(r.text, 'lxml')
    goal = [x.text for x in soup.select(
        '.freelink.freelink-nid.freelink-internal')]
    print(goal)


main('https://www.grammy.com/grammys/awards/winners-nominees/138')
 

Ответ №2:

Другой угол атаки (если это может быть с другого сайта)…

 import pandas as pd
import requests

url = r'https://en.wikipedia.org/wiki/Grammy_Award_for_Record_of_the_Year'

page = requests.get(url)
tables = pd.read_html(page.text)
df = pd.concat(tables[1:9])
df.dropna(thresh=3, inplace=True)
df = df.rename(columns={'Year[I]':'Year'})
df['Year'] = df['Year'].str.replace('[d ]', '', regex=True)
df['Record'] = df['Record'].str.replace('"', '', regex=False)
print(df)
 

Выходы:

введите описание изображения здесь