#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)
Выходы: