TypeError: un objet de type octets est requis, pas 'str'
obtenir l'erreur ci-dessus lors de l'exécution du code python ci-dessous pour enregistrer les données de la table HTML dans le fichier Csv. ne sais pas comment se débarrasser de rideup.pls aidez-moi.
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)
au-dessus de la dernière ligne.
csv
python-3.x
beautifulsoup
html-table
ShivaGuntuku
la source
la source
Réponses:
Vous utilisez la méthodologie Python 2 au lieu de Python 3.
Changement:
À:
et vous obtiendrez un fichier avec la sortie suivante:
En Python 3, csv prend l'entrée en mode texte, alors qu'en Python 2, il l'a prise en mode binaire.
Modifié pour ajouter
Voici le code que j'ai exécuté:
la source
csv
module, le Python 3open
devrait également avoirnewline=''
comme paramètre [ref ]J'ai eu le même problème avec Python3. Mon code écrivait dans
io.BytesIO()
.Remplacement par
io.StringIO()
résolu.la source
io.StringIO()
c'est la cupidité de la mémoire et peut être un casse-tête avec des fichiers volumineux.Dans mon cas, j'ai utilisé BeautifulSoup pour écrire un .txt avec Python 3.x. C'était le même problème. Tout comme @tsduteba l'a dit, changez le «wb» de la première ligne en «w».
la source
il suffit de changer wb en w
à
la source
Vous ouvrez le fichier csv en mode binaire, il devrait être
'w'
la source