UnicodeEncodeError: 'ascii' codec ne peut pas encoder les caractères u'\xc7' à la position 0: quand écrire à .csv
J'ai ce code:
#!/usr/local/bin/python
# -*- coding: utf-8 -*-
import re
import urllib2
import BeautifulSoup
import csv
origin_site = 'http://typo3.nimes.fr/index.php?id=annuaire_assos&theme=0&rech=&num_page='
get_url = re.compile(r"""window.open\('(.*)','','toolbar=0,""", re.DOTALL).findall
pages = range(1,2)
for page_no in pages:
req = ('%s%s' % (origin_site, page_no))
user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
headers = { 'User-Agent' : user_agent }
try:
urllib2.urlopen(req)
except urllib2.URLError, e:
pass
else:
# do something with the page
doc = urllib2.urlopen(req)
soup = BeautifulSoup.BeautifulSoup(doc)
infoblock = soup.findAll('tr', { "class" : "menu2" })
for item in infoblock:
assoc_data = []
soup = BeautifulSoup.BeautifulSoup(str(item))
for tag in soup.recursiveChildGenerator():
if isinstance(tag,BeautifulSoup.Tag) and tag.name in ('td'):
if tag.string is not None:
assoc_name = (tag.string)
if isinstance(tag,BeautifulSoup.Tag) and tag.name in ('u'):
if tag.string is not None:
assoc_theme = (tag.string)
get_onclick = str(soup('a')[0]['onclick']) # get the 'onclick' attribute
url = get_url(get_onclick)[0]
try:
urllib2.urlopen(url)
except urllib2.URLError, e:
pass
else:
assoc_page = urllib2.urlopen(url)
#print assoc_page, url
soup_page = BeautifulSoup.BeautifulSoup(assoc_page)
assoc_desc = soup_page.find('table', { "bgcolor" : "#FFFFFF" })
#print assoc_desc
get_address = str(soup_page('td', { "class" : "menu2" }))
soup_address = BeautifulSoup.BeautifulSoup(get_address)
for tag in soup_address.recursiveChildGenerator():
if isinstance(tag,BeautifulSoup.Tag) and tag.name in ('a'):
if tag.string is not None:
assoc_email = (tag.string)
assoc_data.append(assoc_theme)
assoc_data.append(assoc_name)
assoc_data.append(assoc_email)
for tag in soup_address.recursiveChildGenerator():
if isinstance(tag,BeautifulSoup.Tag) and tag.name in ('td'):
if tag.string is not None:
if tag.string != ' ':
get_string = BeautifulSoup.BeautifulSoup(tag.string)
assoc_data.append(get_string)
#data.append(get_string)
c = csv.writer(open("MYFILE.csv", "wb"))
for item in assoc_data:
c.writerow(item)
mais obtiens cette erreur:
UnicodeEncodeError: 'ascii' codec can't encode character u'\xc7' in position 0: ordinal not in range(128)
Comment puis-je passer les caractères français dans le MYFILE.fichier csv? Et puis-je améliorer le code?
- double possible de Python csv: UnicodeDecodeError
- Similaire, mais il est écrit plutôt que de les lire afin de décoder devient coder
Vous devez vous connecter pour publier un commentaire.
Faites défiler vers le bas: http://docs.python.org/library/csv.html
plus précisément, l'utilisation de cet écrivain:
Alors, au lieu de
utilisation
Il semblerait que les résultats de urllib2 sont en unicode, mais le CSV module n'est pas compatible Unicode, mais est de 8 bits compatible.
Au lieu de cela, vous devez convertir chaque chaîne de caractères UTF-8 avant de vous écrire. Par exemple:
item
une liste. Gardez à l'esprit dans votre code, vous êtes seulement à l'écriture d'un élément par ligne.item
est une chaîne valide et n'est pas aucun . Voir mon 2ème editionassoc_data
sont en fait BeautifulSoup des objets et non des chaînes Unicode. La finale semble ajouter pour ajouter un objet qui renvoie Aucun objet lorsque le texte est vide. J'ai modifié cette ligne de retourner une chaîne Unicode à la place. Le problème suivant est que la normalif item
ne retourne pas false vide des chaînes Unicode, de sorte que vous avez à faireif item != u''
à la place. Voir pastie.org/5061056 pour les mises à jour de votre code. Vous pouvez convertir tous les assoc_data objets Unicode avant d'écrire pour être sur le côté sécuritaire.le problème était que je n'étais pas à l'aide de l'unicode correctement, voici le dernier code
merci à tous pour votre aide et de [email protected] liste de diffusion