python3和urllib3中的编码问题

python3和urllib3中的编码问题,python,python-3.x,encoding,beautifulsoup,urllib3,Python,Python 3.x,Encoding,Beautifulsoup,Urllib3,我正在尝试编写一个python程序,它将帮助我自动从不同的网站获取一些新闻。 目前,我正在使用python3和beautifulsoup4和urllib3来获取远程页面并对其进行解析 当我试图从这些页面读取文本时,问题就出现了,因为它们包含非ascii字符,如Àáéó…等等 在检索到utf-8后,我尝试从utf-8解码页面,将其放入变量中,然后将其写入文件,但没有成功。。。即使在阅读了不同的方法来解决这个问题之后,我也无法找到一个有效的解决方案 我想知道你们中是否有人和我有同样的处境 这是我的密

我正在尝试编写一个python程序,它将帮助我自动从不同的网站获取一些新闻。 目前,我正在使用python3和beautifulsoup4和urllib3来获取远程页面并对其进行解析

当我试图从这些页面读取文本时,问题就出现了,因为它们包含非ascii字符,如Àáéó…等等

在检索到utf-8后,我尝试从utf-8解码页面,将其放入变量中,然后将其写入文件,但没有成功。。。即使在阅读了不同的方法来解决这个问题之后,我也无法找到一个有效的解决方案

我想知道你们中是否有人和我有同样的处境

这是我的密码

# -*- coding: utf-8 -*-
from bs4 import BeautifulSoup
import urllib3

http = urllib3.PoolManager()
req = http.request('GET', 'http://www.....')
page = req.data.decode('utf-8')
soup = BeautifulSoup(page)

elements = soup.find_all('div', class_='content')

fp = open('results.xml', 'a')

for element in elements:
  link  = element.find('a')
  descr = element.find('div', class_='description')

  v_link  = u'%s' % link.get('href')
  v_description = u'%s' % descr.text

  xml = "<news>\n"
  xml = xml+ "  <description>"+ v_description+ "</description>\n"
  xml = xml+ "  <page_link>"+ v_link+ "</page_link>\n"
  xml = xml+ "</news>\n"

  fp.write(xml+ '\n')

#END FOR LOOP

fp.close()
只需对字符串进行编码并写入文件,如下所示:

desc = 'À à é ó...and so on...'.encode('utf-8')
with open('utf8.xml', 'a') as f:
    f.write(desc)

cat utf8.xml
À à é ó...and so on...
因此,在您的情况下,您可能需要更改:

fp.write(xml+ '\n')
为此:

fp.write(xml.encode('utf-8') + '\n')

没有例子,很难说。听起来您正在解码非UTF8文本,可能是ISO-8859-1,或者BS正在根据文档的元数据或猜测对其进行重新解码

有关该代码的一些无关提示:


使用纯字符串编写XML时要小心。如果v_description或v_link包含一个>,你至少应该转义它,你有一些示例URL吗?问题出来了,问题到底是什么?有错误吗?这是怎么一回事?在哪一条线上?