TypeError: un objet de type octet est requis, pas 'str'
obtenir l'erreur ci-dessus lors de l'exécution en dessous du code python pour enregistrer les données du tableau HTML dans un fichier Csv. Je ne sais pas comment obtenir rideup.pls m'aide.
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.
Vous utilisez la méthodologie Python 2 au lieu de Python 3.
Changement:
outfile=open('./immates.csv','wb')
À:
outfile=open('./immates.csv','w')
et vous obtiendrez un fichier avec la sortie suivante:
SNo,States,Dist,Population
1,Andhra Pradesh,13,49378776
2,Arunachal Pradesh,16,1382611
3,Assam,27,31169272
4,Bihar,38,103804637
5,Chhattisgarh,19,25540196
6,Goa,2,1457723
7,Gujarat,26,60383628
.....
Dans Python 3, CSV prend l'entrée en mode texte, alors que dans Python 2, il le prend en mode binaire.
édité pour ajouter
Voici le code que j'ai couru:
url='http://www.mapsofindia.com/districts-india/'
html = urllib.request.urlopen(url).read()
soup = BeautifulSoup(html)
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','w')
writer=csv.writer(outfile)
writer.writerow(['SNo', 'States', 'Dist', 'Population'])
writer.writerows(list_of_rows)
J'ai eu le même problème avec Python3. Mon code écrivait dans io.BytesIO()
.
Remplacer par io.StringIO()
résolu.
file = open('parsed_data.txt', 'w')
for link in soup.findAll('a', attrs={'href': re.compile("^http")}): print (link)
soup_link = str(link)
print (soup_link)
file.write(soup_link)
file.flush()
file.close()
Dans mon cas, j'ai utilisé BeautifulSoup pour écrire un fichier .txt avec Python 3.x. Il y avait le même problème. Comme @tsduteba l'a dit, changez le "wb" dans la première ligne en "w".