TypeError: Ein byteähnliches Objekt ist erforderlich, nicht 'str'
Fehler beim Ausführen des folgenden Python-Codes zum Speichern der HTML-Tabellendaten in der CSV-Datei. Ich weiß nicht, wie ich Rideup bekommen soll. Bitte helfen Sie mir.
import csv
import requests
from bs4 import BeautifulSoup
url='http://www.mapsofindia.com/districts-india/'
response=requests.get(url)
html=response.content
soup=BeautifulSoup(html,'html.parser')
table=soup.find('table', attrs={'class':'tableizer-table'})
list_of_rows=[]
for row in table.findAll('tr')[1:]:
list_of_cells=[]
for cell in row.findAll('td'):
list_of_cells.append(cell.text)
list_of_rows.append(list_of_cells)
outfile=open('./immates.csv','wb')
writer=csv.writer(outfile)
writer.writerow(["SNo", "States", "Dist", "Population"])
writer.writerows(list_of_rows)
auf über der letzten Zeile.
csv
python-3.x
beautifulsoup
html-table
ShivaGuntuku
quelle
quelle
Antworten:
Sie verwenden die Python 2-Methode anstelle von Python 3.
Veränderung:
Zu:
und Sie erhalten eine Datei mit der folgenden Ausgabe:
In Python 3 übernimmt csv die Eingabe im Textmodus, während sie in Python 2 im Binärmodus erfolgt.
Bearbeitet, um hinzuzufügen
Hier ist der Code, den ich ausgeführt habe:
quelle
csv
Modul sollte Python 3open
auchnewline=''
als Parameter [ref ]Ich hatte das gleiche Problem mit Python3. Mein Code schrieb in
io.BytesIO()
.Ersetzen durch
io.StringIO()
gelöst.quelle
io.StringIO()
ist Speichergier und kann bei großen Dateien Kopfschmerzen verursachen.In meinem Fall habe ich BeautifulSoup verwendet, um mit Python 3.x eine TXT-Datei zu schreiben. Es hatte das gleiche Problem. Ändern Sie, wie @tsduteba sagte, das 'wb' in der ersten Zeile in 'w'.
quelle
ändere einfach wb in w
zu
quelle
Sie öffnen die CSV-Datei im Binärmodus, sollte es sein
'w'
quelle