文本编码和列排列在2.x中提供UnicodeEncodeError

2024-10-01 00:26:03 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我正在尝试学习用Python和BeautifulSoup来将数据导出到可读的电子表格中。我有两个问题:

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

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

问题1解决方案:

  • 忽略包含无法识别字符的行(有效但不是最佳的)。你知道吗
  • 调用变量并使用.encode('utf-8')不起作用

问题2解决方案:

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

是的。你知道吗

import csv
import requests
from bs4 import BeautifulSoup
import pandas

stocksym = []
stockname = []
stockprice = []
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')
tbody = table.find('tbody')

for tr in tbody.find_all('tr'):

        sym = tr.find_all('td')[0].text.strip()

        stocksym.append((sym))

        name = tr.find_all('td')[1].text.strip()

        stockname.append((name))

        price = tr.find_all('td')[2].text.strip()

        stockprice.append((price))

df = pandas.DataFrame({

        "1Sym": stocksym,

        "2Name": stockname,

        "3Price": stockprice

        })

df.to_csv("output.csv", index=False)

print(df)

我期望前100名股票的输出以Sym,Name,Price的顺序导出到csv。你知道吗

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


Tags: csv数据textimportdf顺序table符号
1条回答
网友
1楼 · 发布于 2024-10-01 00:26:03

pandas中使用read_html函数会更容易,遇到的问题也会更少。只需安装lxml库,如果遇到错误,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")

相关问题 更多 >