python
  • beautifulsoup
  • 2014-01-27 107 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

    相关问题