【问题标题】:How do i convert from unicode to string and write it to a file in python 2.7?如何从 unicode 转换为字符串并将其写入 python 2.7 中的文件?
【发布时间】:2017-04-30 05:26:09
【问题描述】:
import urllib
import re
from bs4 import BeautifulSoup

url="http://www.thehindu.com/sci-tech/science/iit-bombay-birds-eye-view-and-quantum-biology/article18191268.ece"
htmltext = urllib.urlopen(url).read()
soup = BeautifulSoup(htmltext,"lxml")

webpage_title = soup.find_all('h1', attrs = {"class": "title"})
webpage_title = webpage_title[0].get_text(strip=True)

f_obj=open("E:\\Crawler_paras_sorted_test_webpages_title.txt","w+")
file_obj.write(webpage_title)
file_obj.close

它给了我以下错误:

Traceback (most recent call last):
File "C:\Users\PJM\working_extractor_sorted_title.py", line 37, in <module>
file_obj.write(webpage_title)
UnicodeEncodeError: 'ascii' codec can't encode character u'\u2019' in position 16: ordinal not in range(128)

我现在该如何解决这个问题?我希望它在文件中保存为字符串。

【问题讨论】:

  • import io; f_obj = io.open('E:\\.........txt', 'w+', encoding='utf-8')
  • 回溯(最近一次调用最后):文件“C:\Users\PJM\working_extractor_sorted_title.py”,第 39 行,在 f_obj=open("E:\\Crawler_paras_sorted_test_webpages_title"+str (c)+".txt","w+",encoding='utf-8') TypeError: 'encoding' is an invalid keyword argument for this function
  • 请阅读我的全部评论。
  • 抱歉这个错误......但即使在插入“io.open”之后......我也会收到这个错误:Traceback(最近一次调用最后一次):文件“C:\ Users \ PJM \ working_extractor_sorted_title。 py",第 40 行,在 file_obj.write(webpage_title) UnicodeEncodeError: 'ascii' codec can't encode character u'\u2019' in position 16: ordinal not in range(128)
  • 请发布您的webpage_title 变量的内容;我认为它可能只包含 unicode 转义字符串。

标签: python-2.7 compiler-errors python-unicode


【解决方案1】:

你需要对包含unicode字符点\u2019的字符串进行编码,试试这个:

file_obj=open("E:\\Crawler_paras_sorted_test_webpages_title.txt","w+")
file_obj.write(webpage_title.encode('utf-8'))
file_obj.close() # <-- you were missing the ()

【讨论】:

    【解决方案2】:

    终于自己搞定了。代码如下:

    import urllib
    import re
    import codecs
    from bs4 import BeautifulSoup
    
    url="http://www.thehindu.com/sci-tech/science/iit-bombay-birds-eye-view-and-quantum-biology/article18191268.ece"
    htmltext = urllib.urlopen(url).read()
    soup = BeautifulSoup(htmltext,"lxml")
    
    webpage_title = soup.find_all('h1', attrs = {"class": "title"})
    webpage_title = webpage_title[0].get_text(strip=True)
    
    with codecs.open("E:\\Crawler_paras_sorted_test_webpages_title_"+str(c)+".txt", "w+", encoding="utf-8") as f:
        f.write(webpage_title)
    

    Codecs 库确实有帮助。

    【讨论】:

    • 你写的代码不会运行,因为没有file_obj
    【解决方案3】:

    Python 2.7.12+(默认,2016 年 9 月 17 日,12:08:02) 输入“copyright”、“credits”或“license”了解更多信息。

    要解决您的问题,只需使用: f_obj.write(webpage_title.encode('ascii', 'ignore'))

    In [8]: import urllib
    In [8]: import re
    In [9]: from bs4 import BeautifulSoup
    In [10]: url = 'http://www.thehindu.com/sci-tech/science/iit-bombay-birds-eye-view-and-quantum-biology/article18191268.ece'
    
    In [11]: htmltext = urllib.urlopen(url)
    
    In [12]: soup = BeautifulSoup(htmltext,'lxml')
    
    In [13]: webpage_title = soup.find_all('h1',attrs={'class':'title'})
    
    In [14]: print webpage_title
    

    [\nIIT 孟买:鸟瞰和量子生物学\n]

    In [15]: webpage_title = webpage_title[0].get_text(strip=True)
    
    In [16]: print webpage_title
    

    IIT 孟买:鸟瞰图和量子生物学

    In [17]: f_obj = open('Crawler_paras_sorted_test_webpages_title.txt', 'w')
    

    [18] 中:f_obj.write(webpage_title)

    UnicodeEncodeError Traceback(最近一次调用) 在 () ----> 1 f_obj.write(webpage_title)

    UnicodeEncodeError: 'ascii' codec can't encode character u'\u2019' in position 16: ordinal not in range(128)

    In [19]: f_obj.write(webpage_title.encode("utf8"))
    
    In [21]: f_obj.close()
    

    好的,解决这个问题: pages_title.encode("utf8")

    【讨论】:

    • 唯一的问题是实际标题是:IIT Bombay: Bird’s eye view and quantum biology
    猜你喜欢
    • 2014-01-13
    • 1970-01-01
    • 2018-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-30
    • 2010-12-08
    • 1970-01-01
    相关资源
    最近更新 更多