我想解析http://en.wikipedia.org/wiki/List_of_circulating_currencies中的货币表。问题是我没有以正确的格式获得输出。我希望输出格式为:
country currency
如果是多种货币,则货币应位于上一种货币之后的下一行或空格中。这是我能走多远
from bs4 import BeautifulSoup
import urllib2
url="http://en.wikipedia.org/wiki/List_of_circulating_currencies"
soup=BeautifulSoup(urllib2.urlopen(url).read())
i=1
fr=open("out.txt","w")
for row in soup.findAll('table')[0].findAll('tr'):
if i==1:
i+=1
continue
temp_row=row.findAll('td')
print len(temp_row)
"""Handling the case for multiple currencies"""
if(len(temp_row)==5):
ans=row.findAll('td')[0].findAll('a')
if len(ans)==0 :
ans=row.findAll('td')[0].contents
else :
ans=row.findAll('td')[0].findAll('a')[0].contents
fr.write(" "+str(ans)+"\n")
else:
first=row.findAll('td')[0].findAll('a')[0].contents
ans=row.findAll('td')[1].findAll('a')
if len(ans)==0 :
ans=row.findAll('td')[1].contents
else :
ans=row.findAll('td')[1].findAll('a')[0].contents
#print first
fr.write(str(first)+" "+str(ans)+"\n")
问题是当我使用内容[0]而不是它给出的内容时,我想要字符串:
UnicodeEncodeError: 'ascii' codec can't encode character u'\xf3' in position 15: ordinal not in range(128)
错误我也没有得到确切格式的输出。文件out.txt必须由VB编写的其他程序读取,所以我希望文件格式尽可能接近指定的格式。另外请帮我清理代码。
更新:
我使用encode获得以下错误:
File "D:/scrap.py", line 33, in <module>
first = first.encode('ascii', 'ignore')
File "C:\Python27\lib\site-packages\bs4\element.py", line 992, in encode
u = self.decode(indent_level, encoding, formatter)
File "C:\Python27\lib\site-packages\bs4\element.py", line 1056, in decode
indent_space = (' ' * (indent_level - 1))
TypeError: unsupported operand type(s) for -: 'str' and 'int'
更新:在开头添加以下行以使其正常工作
import sys
reload(sys)
sys.setdefaultencoding("utf-8")
答案 0 :(得分:1)
看看你是否获得可靠的结果尝试暂时忽略unicode,看看结果是什么。
first = first.encode('ascii', 'ignore')
ans = ans.encode('ascii', 'ignore')
print first + " " + ans
答案 1 :(得分:1)
如果你的文件中有utf chars,你可以使用encode('utf8')
将unicode对象转换为utf编码的字符串。