Как записать names и prices в отдельные столбцы?
import csv
import requests
from bs4 import BeautifulSoup
url = 'https://www.alta.ru/currency/'
r = requests.get(url)
soup = BeautifulSoup(r.text, 'lxml')
name = soup.find_all('td',class_ = 't-left')
price = soup.find_all(class_ = 't-right')
with open('data.csv', 'w', newline = '') as file:
writer = csv.writer(file)
for names in name:
writer.writerow([names.text])
for prices in price:
writer.writerow([prices.text])
Ответы (2 шт):
Автор решения: floydya
→ Ссылка
Нужно просто упаковать имена и цены, а потом скормить элемент:
names = soup.find_all('td', class_='t-left')
prices = soup.find_all(class_='t-right')
with open('data.csv', 'w', newline = '') as file:
writer = csv.writer(file)
# Тут мы упаковываем имена и цены в виде кортежа - (имя, цена)
names_and_prices = zip([name.text for name in names], [price.text for price in prices])
# Каждый упакованный элемент - записываем
for row in names_and_prices:
writer.writerow(row)
Автор решения: SergFSM
→ Ссылка
если использовать библиотеку pandas то получится примерно так (этот код не тестировался):
import pandas as pd
df = pd.DataFrame()
df['name'] = [n.text for n in soup.find_all('td', class_='t-left')]
df['price'] = [p.text for p in soup.find_all(class_='t-right')]
df.to_csv('data.csv', index=False)