#python #pandas #dataframe #beautifulsoup #string-formatting
#python #pandas #фрейм данных #beautifulsoup #форматирование строки
Вопрос:
Я хочу захватить данные из таблицы, указанной на веб-сайте, и сохранить их в фрейме данных Pandas с предопределенными столбцами. Я пытался захватить то же самое, но я не могу разделить данные по столбцам. Ниже приведена моя попытка сделать это;
import pandas as pd
import lxml.html as lh
site= 'https://gadgets.ndtv.com/mobiles/guide/phone-under-10000-best-mobile-india-price-realme-redmi-samsung-vivo-camera-battery-2240177'
docc= lh.fromstring((requests.get(site)).content)
tr_= docc.xpath('//tr')
df = pd.DataFrame(columns=['Phones', 'rating (out of 10)', 'Price in India'])
for t in range(0,len(tr_)):
row= tr_[t]
for (value) in row.iterdescendants():
phone= (value.text)
#print(phone)
dataset = df.append({'Phones':str(phone)},ignore_index=True)
Но здесь я не могу получить данные для «Телефонов», «рейтинг (из 10)» и «Цена в Индии»
Комментарии:
1. Для этого конкретного случая проще просто скопировать таблицу и вставить ее в Excel. Он сохраняет формат, а затем вы можете сохранить его и импортировать с помощью pandas.
Ответ №1:
import requests
import pandas as pd
def main(url):
r = requests.get(url)
df = pd.read_html(r.content)[0]
print(df)
df.to_csv("data.csv")
main("https://gadgets.ndtv.com/mobiles/guide/phone-under-10000-best-mobile-india-price-realme-redmi-samsung-vivo-camera-battery-2240177")
Вывод:
Phones under Rs. 10,000 Gadgets 360 rating (out of 10) Price in India (as recommended)
0 Realme C3 8 Rs. 7,999
1 Realme Narzo 10A 8 Rs. 8,499
2 Redmi 8 7 Rs. 9,499
3 Realme 5 8 Rs. 9,999
4 Vivo U10 7 Rs. 9,990
5 Realme U1 8 Rs. 8,499
6 Samsung Galaxy M30 8 Rs. 10,035
Комментарии:
1. Кажется простым решением для запроса.. Но мне нужно поделиться тем же результатом в фрейме данных, созданном в моем коде. ( df = pd.DataFrame(столбцы =[‘Телефоны’, ‘рейтинг (из 10)’, ‘Цена в Индии’])