2017-02-06 62 views
0

我正在嘗試一個簡單的python練習。代碼片段來自本網站和開放源代碼。目標是解析一個網頁並提取頁面中的一些文本。該程序如下所示,使用python3並將輸出重定向到一個文件。但該文件沒有保存我想要的正確信息,也就是說,它沒有顯示中文字符,而是使用像「\ u514d \ u8d39 \ u4e0b \ u8f7d」這樣的unicode。我如何正確地做到這一點?對於Python 3程序無法顯示中文字符

import sys, urllib.request 
import traceback 
from bs4 import BeautifulSoup 
url = "http://appstore.huawei.com/more/all" 

def uprint(*objects, sep=' ', end='\n', file=sys.stdout): 
    enc = file.encoding 
    if enc == 'UTF-8': 
     print(*objects, sep=sep, end=end, file=file) 
    else: 
     f = lambda obj: str(obj).encode(enc, errors='backslashreplace').decode(enc) 
     print(*map(f, objects), sep=sep, end=end, file=file) 

def crawl(): 
    req = urllib.request.Request(url) 
    req.add_header('User-Agent', 'PyCrawler 0.2.0') 
    data = urllib.request.urlopen(req).read() 
    soup = BeautifulSoup(data, 'lxml') 
    items_entry = soup.find_all(class_="list-game-app dotline-btn nofloat")  
    for item in items_entry:   
     title_tag = item.find_all("h4", class_="title") 
     for title in title_tag: 
      title_A = item.find_all("a") 
      for title_a_item in title_A: 
       output = str(title_a_item.string)     
       uprint(output) 
    print(u"Finishing...") 

if __name__ == "__main__": 
    crawl() 
+0

你在哪裏運行(控制檯/空閒)? – Uriel

+0

@Uriel Eli Windows 7 cmd行:python test.py> test.txt並檢查txt文件 – wason

回答

0

您的cmd字體可能不支持utf-8編碼(更具體地說是中文字符),所以它使用utf序列來顯示它們。

您可以查找支持的字體(可以通過單擊cmd圖標來更改設置的字體),也可以使用顯示utf-8字符的python空閒字體。

+0

OK。我想將它保存在MySQL數據庫中。我會試着看看它是否被正確保存。 – wason

+0

應該是。該字符串將被保存爲utf序列的一個字節序列,因此稍後閱讀它只是格式化的問題。 – Uriel

+0

我沒有嘗試空閒或cmd設置。當pymysql.connect和數據庫記錄正確時,我使用use_unicode = True,charset =「utf8」。 – wason