我从这个tutorial获得了以下代码:
Traceback (most recent call last):
File ".\scr3.py", line 7, in <module>
print(letters)
File "C:\Users\adi\AppData\Local\Programs\Python\Python35\lib\encodings\cp437.py", line 19, in encode
return codecs.charmap_encode(input,self.errors,encoding_map)[0]
UnicodeEncodeError: 'charmap' codec can't encode character '\u2019' in position 7787: character maps to <undefined>
我收到以下错误:
encode('utf-8')
如果我尝试将letters
方法应用于 = f.select :year, options_for_select(["one", "two", "three", "four"], selected: f.object.year), {class: 'form-control'}
对象,则会收到属性错误,指出“ResultSet对象没有属性编码”。
任何人都知道打印字母对象的解决方法吗?我在Windows 7上使用Python 3.5和BeautifulSoup 4。
答案 0 :(得分:2)
回答我自己的问题。
我使用Windows命令行来执行Python脚本。事实证明,命令行无法处理打印输出。我意识到当我将输出发送到文本文件时:
python script.py > text.txt
没有抛出错误。或者,如果我仍想在命令行中显示输出,我可以先为它设置utf-8:
chcp 65001
然后执行脚本。
答案 1 :(得分:0)
因为find_all()
会返回一组结果。使用for循环遍历每个返回的元素:
from bs4 import BeautifulSoup
import requests
req=requests.get("http://www.aflcio.org/Legislation-and-Politics/Legislative-Alerts")
data=req.text
soup=BeautifulSoup(data)
letters=soup.find_all("div",class_="ec_statements")
for letter in letters:
print(letter.encode('utf-8'))
print(letter.text)
您还可以使用.text
函数,该函数为您提供找到的元素的文本并自动处理编码。
使用.find()
时,你会得到一个单独的元素并可以打印出来,.findAll()
(或通常用Python编写为.find_all()
)返回一组元素,没有函数.encode()
,因为它是一个Unicode对象。
另一种可能的解决方案是在脚本的开头写上# -*- coding: utf-8 -*-
。
print(letters)
之后, # -*- coding: utf-8 -*-
为我工作,没有它我也能为我工作,但我使用的是Python 2.7