web-dev-qa-db-fra.com

AttributeError: le module 'sys' n'a pas d'attribut 'setdefaultencoding'

Mon code d'origine est le suivant.

#py3.6, windows10   
import time
from Selenium import webdriver
import codecs
import sys

reload(sys)
sys.setdefaultencoding('utf-8')

Le rechargement n'est pas pris en charge. C'était réparé.

Import importlib
Importlib.reload (sys)

Mais il y avait aussi une erreur.

AttributeError: le module 'sys' n'a pas d'attribut 'setdefaultencoding'

Comment dois-je résoudre ce problème? J'apprécierais votre aide.

Je joins également tout mon code.

import time
from Selenium import webdriver
import codecs
import sys

reload(sys)
sys.setdefaultencoding('utf-8')

browser = webdriver.PhantomJS('C:\phantomjs-2.1.1-windows/bin/phantomjs')
url = u'https://Twitter.com/search?f=tweets&vertical=default&q=%EB%B0%B0%EA%B3%A0%ED%8C%8C%20since%3A2017-07-19%20until%3A2017-07-20&l=ko&src=typd&lang=ko'

browser.get(url)
time.sleep(1)

body = browser.find_element_by_tag_name('body')
browser.execute_script("window.scrollTo(0,document.body.scrollHeight);")

start = time.time()
for _ in range(500):
    now = time.time()
    browser.execute_script("window.scrollTo(0, 
    document.body.scrollHeight);")
    print str(_) + "    seconds: " + str(now - start) 
    time.sleep(0.2)

tweets=browser.find_elements_by_class_name('Tweet-text')

with codecs.open("test.txt", "w","utf-8") as f:
    i = 1
    for i, Tweet in enumerate(tweets):
        data = Tweet.text
        data = data.encode('utf-8')
        print i, ":", data
        msg = (str(data) +'\n')
        f.write(msg)
        i += 1

end = time.time()
print(end - start)
browser.quit()
8
yome

Vous devez supprimer le sys.setdefaultencoding. Notez que cela a été un abus de sys.setdefaultencoding Tout au long de Python 2 aussi. De Python 2 :

sys.setdefaultencoding(name)

Définissez le codage de chaîne par défaut actuel utilisé par l'implémentation Unicode. Si le nom ne correspond à aucun codage disponible, LookupError est déclenchée. Cette fonction est uniquement destinée à être utilisée par l'implémentation du module site et, si nécessaire, par sitecustomize. Une fois utilisé par le module site, il est supprimé de l'espace de noms du module sys.

Nouveau dans la version 2.0.

Cela définit l'encodage des chaînes de 8 bits dans Python 2. Puisque les bytestrings ont no l'encodage dans Python 3, et les chaînes unicode (str) n'en ont pas (elles sont Unicode, mais avec un encodage interne opaque), cette fonction n'aurait aucun sens sur Python 3 - il y a rien pour définir l'encodage par défaut pour.

9
Antti Haapala