2017-03-07 27 views
0

In letzter Zeit Python lernen, und ich versuche eine kleine Übung zu machen. Dann zeigt sich dieser Fehler.TypeError: kann Bytes nicht zu str darstellen, dann TypeError: write() muss str sein, nicht bytes

File "/Users/Alexis/.spyder-py3/temp.py", line 29, in <module> 
    f.write(txt+'\n') 

TypeError: can't concat bytes to str 

Könnte mir bitte jemand sagen, was hier falsch läuft?

import requests 
from bs4 import BeautifulSoup 
import re 

r=requests.get(url='http://news.qq.com/world_index.shtml') 
soup=BeautifulSoup(r.text,'lxml') 
f=open('/Users/Alexis/Desktop/news.text','w') 
f.seek(0) 

f.write('Today News') 

    news=soup.find_all('a',href=re.compile('http://news.qq.com/a/20170307/')) 

for i in news: 
    txt=i.text.encode('utf-8').strip() 
    if txt=='': 
     continue 
    else: 
     u=i.attrs['href'] 
     ur=requests.get(url=u) 
     usoup=BeautifulSoup(ur.text,'lxml') 
     f.write(txt+'\n') 
     f.write('Text:\n') 

     p=usoup.find('div',id='Cnt-Main-Article-QQ').find_all('p') 
     for i in p:    
      f.write(i.text+'\n') 

    break 

f.close() 
print('Finish') 

Ich habe

Ich habe

versucht ein paar verschiedene Methoden ausprobiert
f.write(txt+'\n'.encode('ascii')) 

TypeError: write() argument must be str, not bytes 
f.write(txt+'\n'.encode('utf-8')) 

TypeError: write() argument must be str, not bytes 
TypeError: write() argument must be str, not bytes 

Dank für die Hilfe !!

+1

Warum codierst du 'i.text' in UTF-8? Wenn Sie nicht 'txt' codieren, wird es ein 'str'-Objekt und Sie können mehr Text in Ordnung bringen, ** und ** schreiben Sie es in Ihre Textdatei, ohne erneut dekodieren zu müssen. –

Antwort

0

Try this: f.write(str(txt)+'\n', 'utf-8') #or whichever way you are encoding

Von der Fehlermeldung, write() einen String will, aber sie geben es Bytes, daher müssen Sie str() rufen txt str Typ zu konvertieren.

+1

Könnten Sie bitte ausarbeiten? Warum denkst du, das ist die Lösung? – Matthias

+0

Ich entschuldige mich für die Kürze! Sollte das Erklärung genug sein? @Matthias – Priyank

+0

Dies erklärt, wie man den Fehler los wird, aber der Hauptgrund für das Problem ist, dass 'txt' vorher in UTF-8 kodiert wurde und es gibt keinen Grund dafür. – Matthias

Verwandte Themen