Сохранить данные парса в CSV файл
Товарищи, доброго времени суток.
Помогите, пожалуйста, сохранить результат парса в файл csv.
Имеется функция:
def parse_page(self, text):
soup = bs4.BeautifulSoup(text, "lxml")
container_port = soup.find("table", class_="port")
tr_list = container_port.find_all("tr")
for tr in tr_list:
td_list = tr.find_all("td")
for td in td_list:
line = (str(td.text)).strip()
print(line, end=";")
print("\n")
Результат принта:
0;tcp;trojan;REx;Trojans;
0;tcp,udp;;Reserved;IANA;
1;udp;tcpmux;TCP Port Service Multiplexer (IANA registered)
Нужно всё это сохранить в CSV с разделителем ;
Я в этом деле новичок, прошу помощи, большое спасибо.
Ответы (2 шт):
Входного xml/html, к сожалению, не представили. Делал на глаз.
Особо ничего не меняем. В цикле по tr_list все ячейки td из строки tr объединяем в одну строку с разделителем ';' через join(). После, если нужно, печатаем, а после выводим в файл.
def parse_page(self, text, filename='out.csv', delimiter=';'):
soup = bs4.BeautifulSoup(text, "lxml")
container_port = soup.find("table", class_="port")
with open(filename, 'w') as file:
tr_list = container_port.find_all("tr")
for tr in tr_list:
line = delimiter.join([(str(td.text)).strip() for td in tr.find_all("td")])
if line: # Проверка пустой строки
print(line)
file.write('{}\n'.format(line))
Если не мудрствовать лукаво, то надо использовать pandas.
import pandas as pd
# Введённую строку преобразуем в DataFrame
df = pd.DataFrame(StringIO(csv_data))
# DataFrame сохраняем в виде CVS файла
df.to_csv( "tmp.csv")
Работа с pandas подробно описана в отличной книжке
Абдрахманов М.И. Pandas. Работа с данными. - devpractice.ru. 2018. - 141 с.: ил. На странице 53 ответ на Ваш вопрос.