Как преобразовать содержимое веб-сайта в CSV (python)?

#python #csv

#python #csv

Вопрос:

Я извлекаю некоторые данные с веб-сайта и просматриваю текст, чтобы дважды проверить, получаю ли я правильные данные, как указано ниже (перед этим есть некоторый код, но я просто пытаюсь упростить вопрос).

 response = requests.post('https://sisweb.tesouro.gov.br/apex/wwv_flow.accept', headers=headers, cookies=cookies, data=data)
soup = BeautifulSoup(response.content, "html.parser")
soup.text
 

soup.text возвращает следующий текст:

 'Tesouro Nacional (National Treasury)rnTipo de leilão: Venda (Auction type)rnTipo de título: LTN (Title Type)rnData inicial do leilão: 01/01/2021 (Auction start date)rnData final do leilão: 18/01/2021 (Auction end date)rnrn* TROCA = Exchange Auction / VENDA = Sale Auction / COMPRA = Purchase Auction / EXTRA COMPRA = Extraordinary Purchase Auction / EXTRA VENDA = Extraordinary Sale AuctionrnData do leilão;Título;Tipo de leilão;Volta;Data de liquidação;Data de vencimento;Oferta;Taxa média;Taxa de corte;Venda;Financeiro (R$);Venda para Bacen;Financeiro para Bacen (R$)rnAuction Date;Bond Type;Auction Type;Round;Settlement Date;Maturity Date;Quantity Tendered;Average Rate;Accepted Rate;Quantity Accepted;Total Amount Accepted (R$);Quantity to Central Bank;Total Amount to Central Bank (R$)rn14/01/2021;LTN;Venda;1.ª volta;15/01/2021;01/01/2023;7.000.000;5,2529;5,2580;7.000.000;6.332.858.153,49;16.500.000;14.927.451.363,00rn14/01/2021;LTN;Venda;2.ª volta;18/01/2021;01/01/2023;1.400.000;5,2529;5,2529;126.363;114.343.255,15;0;0,00rn14/01/2021;LTN;Venda;1.ª volta;15/01/2021;01/07/2024;3.000.000;6,5683;6,5700;3.000.000;2.410.886.792,00;18.600.000;14.947.498.116,60rn14/01/2021;LTN;Venda;2.ª volta;18/01/2021;01/07/2024;600.000;6,5683;6,5683;338.181;271.840.942,59;0;0,00rn14/01/2021;LTN;Venda;1.ª volta;15/01/2021;01/10/2021;15.000.000;2,9027;2,9039;15.000.000;14.698.203.631,45;0;0,00rn14/01/2021;LTN;Venda;2.ª volta;18/01/2021;01/10/2021;3.000.000;2,9027;2,9027;243.636;238.761.237,59;0;0,00rn07/01/2021;LTN;Venda;1.ª volta;08/01/2021;01/01/2023;5.000.000;4,6749;4,6898;4.800.000;4.385.591.302,37;0;0,00rn07/01/2021;LTN;Venda;2.ª volta;11/01/2021;01/01/2023;1.000.000;4,6749;4,6749;0;0,00;0;0,00rn07/01/2021;LTN;Venda;1.ª volta;08/01/2021;01/04/2022;10.000.000;3,5466;3,5624;10.000.000;9.581.654.056,22;0;0,00rn07/01/2021;LTN;Venda;2.ª volta;11/01/2021;01/04/2022;2.000.000;3,5466;3,5466;0;0,00;0;0,00rn07/01/2021;LTN;Venda;1.ª volta;08/01/2021;01/07/2024;2.500.000;6,0619;6,0798;2.032.000;1.657.984.532,52;0;0,00rn07/01/2021;LTN;Venda;2.ª volta;11/01/2021;01/07/2024;500.000;6,0619;6,0619;0;0,00;0;0,00rn'
 

Какой вид выглядит как CSV. Однако, когда я пытаюсь преобразовать его в файл CSV, выполнив следующие действия, я получаю сообщение об ошибке «teste_tesouro.csv не имеет кодировки UTF-8»

 csv = open('teste_tesouro.csv', 'wb')
csv.write(response.content)
csv.close()
 

Как я могу правильно преобразовать эти данные в файл CSV?

Спасибо!

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

1. как вы, возможно, знаете, csv означает, что файл будет иметь разделенные поля. какими будут эти поля для ваших данных? я бы начал с выяснения, какие данные вам нужны из содержимого

2. Я в замешательстве. response.content это байтовая строка, и вы открыли файл в двоичном режиме. Таким образом, я бы подумал, что кодирование не будет задействовано. Итак, как возможно, что эти 3 строки выдают ошибку, которую, по вашим словам, вы получаете?

Ответ №1:

я не совсем уверен, что это может сработать для вас, мой друг, но вы можете попробовать

сначала я бы попробовал это

 response.to_csv('name of your final ', sep = '', encoding='latin-1',)
 

часть encondig на самом деле не нужна, но, поскольку я вижу, что вы бразилец, как и я, в прошлом это вызывало у меня некоторые проблемы, поэтому указание кодировки может помочь

кроме того, я никогда не использовал в качестве разделителя, поэтому понятия не имею, каков будет результат, если это не сработает, попробуйте заменить его на; и поместить; как sep, что он должен работать

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

1. внес несколько изменений, и это сработало. большое спасибо!