Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 文本编码和列排列在2.x中给出了UnicodeEncodeError_Python_Pandas_Csv_Web Scraping_Beautifulsoup - Fatal编程技术网

Python 文本编码和列排列在2.x中给出了UnicodeEncodeError

Python 文本编码和列排列在2.x中给出了UnicodeEncodeError,python,pandas,csv,web-scraping,beautifulsoup,Python,Pandas,Csv,Web Scraping,Beautifulsoup,已解决 这在2.x中是一个Unicode问题,在升级到3.x时不是问题 我正在尝试学习使用Python和BeautifulSoup进行Web垃圾处理,以便将数据导出到可读的电子表格中。我有两个问题: 问题1:我在尝试不同的网站时遇到了多次障碍,遇到了商标符号(tm)等符号。我如何删除该符号或将其编码为允许pandas将数据输出到csv的表单 问题2:当我导出数据时(通过省略包含问题1中引用的字符的行),列不一定是我想要的顺序。如何指定列的列出顺序 问题1:尝试的解决方案: 忽略包含无法识别字符

已解决 这在2.x中是一个Unicode问题,在升级到3.x时不是问题

我正在尝试学习使用Python和BeautifulSoup进行Web垃圾处理,以便将数据导出到可读的电子表格中。我有两个问题:

问题1:我在尝试不同的网站时遇到了多次障碍,遇到了商标符号(tm)等符号。我如何删除该符号或将其编码为允许pandas将数据输出到csv的表单

问题2:当我导出数据时(通过省略包含问题1中引用的字符的行),列不一定是我想要的顺序。如何指定列的列出顺序

问题1:尝试的解决方案:

  • 忽略包含无法识别字符的行(有效但不是最佳)
  • 调用变量并使用.encode('utf-8')不起作用
问题2:尝试的解决方案:

  • 在df中重新排列变量
  • 在列名之前添加一个数值(同样有效,但不是最佳)

我希望前100名股票的输出以Sym、名称、价格的列顺序导出到csv


实际结果是,在第一次遇到不受支持的字符时停止,并要求我将数字放在列名之前以获得所需的顺序。

使用
pandas
中的
read\u html
函数会更容易,遇到的问题也会更少。只要安装
lxml
library,如果遇到错误,pandas将使用该库进行HTML处理

import csv
import requests
from bs4 import BeautifulSoup
import pandas as pd

data = requests.get('https://finance.yahoo.com/most-active?offset=0&count=100')
soup = BeautifulSoup(data.text, 'html.parser')

div = soup.find('div', { 'id': 'scr-res-table' })
table = div.find('table')

df = pd.read_html(table.prettify())[0][["Symbol", "Name", "Price (Intraday)"]]
df.to_csv("output.csv", index=False, encoding="utf-16")

非常感谢您如此及时的回复。此功能正常,但仍存在上述问题1的错误。由于ItaúUnibanco Holding S.A.@RichBiggs中的ú字符,我没有得到那个错误。您使用的url是什么?我复制了您的代码并为其创建了一个新的.py。错误太长,无法全部粘贴,但以UnicodeEncodeError结尾:“ascii”编解码器无法对位置3中的字符u'\xfa'进行编码:序号不在范围内(128)错误屏幕截图:Python 2或3?Python3更好地处理Unicode。商标符号(tm)的确切障碍是什么?它只是被弄坏了,还是抛出了一个异常(如果是,请发布)?您在对已删除答案的评论中说,您的问题是一个异常“UnicodeEncodeError:'ascii'编解码器无法在位置对字符u'\xfa'进行编码…:序号不在范围(128)“2.7…”。。。我将升级到新版本,然后重试。tm符号抛出了与特殊u字符相同的错误,当用不同的脚本为前100名游戏创建steam统计页面时。让您的生活变得轻松,并像几年前我们其他人一样迁移到Python 3。你会发现Unicode的处理更好。好的,我现在已经升级到3.6了,它的功能非常完美。在安装PIP时,没有记住以管理员身份运行cmd,所以就这样了。非常感谢你的帮助!
import csv
import requests
from bs4 import BeautifulSoup
import pandas as pd

data = requests.get('https://finance.yahoo.com/most-active?offset=0&count=100')
soup = BeautifulSoup(data.text, 'html.parser')

div = soup.find('div', { 'id': 'scr-res-table' })
table = div.find('table')

df = pd.read_html(table.prettify())[0][["Symbol", "Name", "Price (Intraday)"]]
df.to_csv("output.csv", index=False, encoding="utf-16")