2016-03-19 16 views
0

Ich versuche, einige Sachen von einer Seite mit Selen zu kratzen. Aber das ist ein Teil des Textes hat ASCII-Text drin ... also bekomme ich das.Python wie ASCII-Text zu "ignorieren"?

f.write(database_text.text) 
UnicodeEncodeError: 'ascii' codec can't encode character u'\xed' in position 1462: ordinal not in range(128) 

Ich frage mich, gibt es sowieso nur simply ascii?

Danke!

print("â") 

Ich suche nicht in meiner Textdatei zu schreiben, aber es ignorieren. Hinweis: Es ist nicht nur "â" es hat auch andere Zeichen.

window_before = driver.window_handles[0] 

nmber_one = 1 
f = open(str(unique_filename) + ".txt", 'w') 
for i in range(5, 37): 
    time.sleep(3) 
    driver.find_element_by_xpath("""/html/body/center/table[2]/tbody/tr[2]/td/table/tbody/tr""" + "[" + str(i) + "]" + """/td[2]/a""").click() 
    time.sleep(3) 
    driver.switch_to.window(driver.window_handles[nmber_one]) 
    nmber_one = nmber_one + 1 
    database_text = driver.find_element_by_xpath("/html/body/pre") 
    f = open(str(unique_filename) + ".txt", 'w',) 
    f.write(database_text.text) 
    driver.switch_to.window(window_before) 



import uuid 
import io 
unique_filename = uuid.uuid4() 

was einen neuen Dateinamen erzeugt, naja es sollte eh, es hat vorher geklappt.

+0

Stört es Sie, [MCVE] (https://stackoverflow.com/help/mcve) zur Verfügung zu stellen? –

+0

Ja, tut mir leid. – user6069863

Antwort

2

Das Problem ist, dass ein Teil des Textes nicht ascii ist. database_text.text ist wahrscheinlich Unicode-Text (Sie können print type(database_text.text) zu überprüfen) und enthält nicht-englischen Text. Wenn Sie Windows verwenden, kann es sich um einen "Codepage" -Text handeln, der davon abhängt, wie Ihr Benutzerkonto konfiguriert ist.

Oft will man Text wie dies als utf-8 speichern, damit Ihre Ausgabedatei öffnet entsprechend

import io 
text = u"â" 
with io.open('somefile.txt', 'w', encoding='utf-8') as f: 
    f.write(text) 

Wenn Sie wirklich fallen lassen wollen, nur die Nicht-ASCII-Zeichen aus der Datei vollständig können Sie Setup einen Fehler Politik

text = u"ignore funky â character" 
with io.open('somefile.txt', 'w', encoding='ascii', errors='ignore') as f: 
    f.write(text) 

Am Ende müssen Sie entscheiden, welche Darstellung Sie für nicht-ascii verwenden möchten (grob gesprochen, nicht-englischen) Text.

+0

Hmm ... okay, wie würde ich das in meinem Code obwohl? Ich habe meine Frage mit dem größten Teil des Skripts aktualisiert. – user6069863

+1

Zuerst 'import io' und dann wo du es gerade machst' f = open (...) 'ersetze das mit' f = io.open (...) 'und der' encoding' und 'errors' Richtlinie die du willst . – tdelaney

+1

Ich dachte, du machst Python 2, aber habe gerade bemerkt, dass du es mit 2 und 3 versehen hast. In Python 3 funktioniert der Standard 'open' genauso wie'io.open' in Python 2. Und in 3 ist' str' Unicode während in Python 2 ist "str" ​​ascii und "unicode" ist Unicode. – tdelaney

0

Ein Versuch Außer Block funktionieren würde:

try: 
    f.write(database_text.text) 
except UnicodeEncodeError: 
    pass 
+0

aber das schreibt nicht den Text, von dem ich vermute, dass der Benutzer es tun möchte. – tdelaney

+0

Stimmt, würde es nicht. Ich wusste nicht, wie er das Ding eigentlich rannte. Nette Arbeit an der Antwort @tdelaney – Shaun

Verwandte Themen