TypeError: se requiere un objeto similar a bytes, no 'str'
obtener el error anterior mientras se ejecuta el código python debajo para guardar los datos de la tabla HTML en el archivo Csv. no sé cómo obtener rideup.pls ayúdame.
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)
encima de la última línea.
csv
python-3.x
beautifulsoup
html-table
ShivaGuntuku
fuente
fuente
Respuestas:
Está utilizando la metodología Python 2 en lugar de Python 3.
Cambio:
A:
y obtendrá un archivo con el siguiente resultado:
En Python 3, csv toma la entrada en modo texto, mientras que en Python 2 la toma en modo binario.
Editado para agregar
Aquí está el código que ejecuté:
fuente
csv
módulo, Python 3open
también debe tenernewline=''
como parámetro [ref ]Tuve el mismo problema con Python3. Mi código estaba escribiendo
io.BytesIO()
.Sustitución por
io.StringIO()
resuelto.fuente
io.StringIO()
es la codicia de la memoria y puede ser un dolor de cabeza con archivos grandes.En mi caso, utilicé BeautifulSoup para escribir un archivo .txt con Python 3.x. Tuvo el mismo problema. Tal como dijo @tsduteba, cambie el 'wb' en la primera línea a 'w'.
fuente
solo cambia wb a w
a
fuente
Está abriendo el archivo csv en modo binario, debería ser
'w'
fuente