我正在尝试编写一个python程序,它将帮助我自动从不同的网站获取一些新闻。 目前我正在使用带有beautifulsoup4和urllib3的python3来获取远程页面并解析它。
当我尝试从这个页面读取文本时问题出现了,因为它们包含非ascii字符,例如Ààéó......等等......
我试图在检索到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()
答案 0 :(得分:0)
只需对string
进行编码并写入文件,如下所示:
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')
答案 1 :(得分:0)
没有例子,很难说。听起来你正在解码非UTF8文本(可能是ISO-8859-1),或者BS 重新 - 根据文档的元数据(或猜测)对其进行解码。
该代码的一些不相关的提示:
v_description
或v_link
包含>
,<
,&
等,您将创建无效的XML) 。更好的是 - 以编程方式构建XML(参见:Best way to generate xml?)with
构造来确保文件已关闭(自动)。