python
  • beautifulsoup
  • 2014-01-27 140 views 1 likes 
    1
    import urllib, urllib2 
    from bs4 import BeautifulSoup, Comment 
    strg="" 
    iter=1 
    url='http://www.amazon.in/product-reviews/B00EOPJEYK/ref=cm_cr_pr_top_link_1? ie=UTF8&pageNumber=1&showViewpoints=0&sortBy=bySubmissionDateDescending' 
    content = urllib2.urlopen(url).read() 
    soup = BeautifulSoup(content, "html.parser") 
    rows =soup.find_all('div',attrs={"class" : "reviewText"}) 
    for row in soup.find_all('div',attrs={"class" : "reviewText"}): 
         strg = strg +str(iter)+"." + row.text + "\n\n" 
         iter=iter+1 
    
    with open('outp.txt','w') as f: 
         f.write(strg) 
    f.close() 
    

    我需要此代碼來寫入變量的內容,strg到文件outp.txt。Python-如何解決UnicodeEncodeError

    相反,我得到這個錯誤:

    Traceback (most recent call last): 
    File "C:\Python27\demo_amazon.py", line 14, in <module> 
    f.write(strg) 
    UnicodeEncodeError: 'ascii' codec can't encode character u'\u2022' in position 226: ordinal not in range(128)  
    

    STRG存儲所需output.There是在寫作聲明我guess.How來解決這個問題,一些?

    請幫忙。

    謝謝。

    +1

    Python版本? –

    +1

    使用'u'string'' –

    +0

    @PauloBu版本:2.7 – keshr3106

    回答

    2

    好,首先,如果你想擺脫unicode的錯誤,你要切換到Python 3默認爲unicode字符串,而不是ASCII字符串中蟒蛇2.

    也就是說,擺脫UnicodeEncodeError例外,你該怎麼辦:

    with open('outp.txt','w') as f: 
        f.write(strg.encode('utf8')) 
    

    作爲參考,請參閱that question。並嘗試使用unicode字符串儘可能避免儘可能改變字符集,用u"this is an unicode string",而不是"this is an ascii string"

    從而在for循環:

    strg = strg +str(iter)+"." + row.text + "\n\n" 
    

    應改爲:

    strg = strg +unicode(iter)+u"." + row.text + u"\n\n" 
    

    和STRG應該被定義爲strg = u""

    注:在f.close()你代碼與使用with關鍵字是多餘的,當您退出with塊時,通過File對象的__exit__()方法實際負責關閉文件。

    +0

    非常感謝!這工作! :d – keshr3106

    1

    基本上你有一個非ASCII字符。我建議使用Unidecode,它會嘗試找到違規的「最接近」的ASCII字符。所以,比如它會變成e。

    所以你只是做

    from unidecode import unidecode 
    f.write(unidecode(strg)) 
    
    +0

    非常感謝! – keshr3106

    相關問題