2017-08-11 12 views
0

Ich habe Probleme beim Extrahieren von chinesischen Text und Schreiben in eine Datei.Wie schreibe ich chinesischen Text in eine Datei in Python

str = "全球紧张致富豪财富缩水 贝索斯丁磊分列跌幅前两位"; 
f=open('test.txt','w'); 
f.write(str); 

obigen Code läuft gut. beim Schreiben in die Datei unter dem Code, der Kauderwelsch zeigt.

import requests; 
from bs4 import BeautifulSoup 

f=open('data.txt','w'); 

def techSinaCrawler(): 
    url="http://tech.sina.com.cn/" 
    source_code = requests.get(url) 
    plain_text = source_code.text 
    soup = BeautifulSoup(plain_text, "html.parser") 
    for li in soup.findAll('li',{'data-sudaclick': 'yaowenlist-1'}): 
     for link in li.findAll('a'): 
      href = link.get('href') 
      techSinaInsideLinkCrawler(href);    

def techSinaInsideLinkCrawler(url): 

    source_code = requests.get(url) 
    plain_text = source_code.text 
    soup = BeautifulSoup(plain_text, "html.parser") 
    for data in soup.findAll('h1',{'id': 'main_title'}): 
     str='main_title'+':'+ data.string 
     f.write(str); 
     f.write('\n'); 

techSinaCrawler(); 

Danke für die Hilfe

+0

Welchen Zeichensatz verwenden Sie? – Jay

+0

die Website verwendet UTF-8-Zeichensatz –

+0

[This] (https://stackoverflow.com/questions/20205455/how-to-correctly-parse-utf-8-encoded-html-to-unicode-strings-with- beautifulsoup) und [this] (https://stackoverflow.com/questions/7219361/python-and-beautifulsoup-encoding-issues) könnte nützlich sein, wenn man sich mit BeautifulSoup-Codierungsproblemen beschäftigt. – Ramon

Antwort

0

Gelöst ..

verändert einfach die .text

plain_text = source_code.text to plain_text = source_code.content 

.content die Ausgabe als chinesischen Text zu erhalten.

Haben Sie das gewünschte Ergebnis

0

In Python 2, dann ist es eine gute Idee zu verwenden codecs.open(), wenn Sie mit Codierungen andere als ASCII zu tun sind. Auf diese Weise müssen Sie nicht alles, was Sie schreiben, manuell codieren. Auch os.walk() soll ein Unicode-String übergeben werden, wenn Sie nicht-ASCII-Zeichen in Dateinamen erwar:

import codecs 
with codecs.open("c:/Users/me/filename.txt", "a", encoding="utf-8") as d: 
    for dir, subdirs, files in os.walk(u"c:/temp"): 
     for f in files: 
     fname = os.path.join(dir, f) 
     print fname 
     d.write(fname + "\n") 

Keine Notwendigkeit zu nennen d.close(), der mit dem Block nimmt bereits um Das.

Verwandte Themen