调用Python文件后,Excel CSV输出出现错误

时间:2018-12-15 20:32:58

标签: python excel csv web-scraping export-to-csv

当前在.csv中的以下输出中处于挣扎状态,其中输出中的各种随机字符是不应包含的玩家名称和值

(我在输出下方提供了图片)

我想知道我在努力消除随机字符的代码中哪里出了错

我正在尝试删除下面的字符,例如Â,Ã,©,‰等。 有什么建议吗?

Python代码

#importing

import requests
from bs4 import BeautifulSoup
import pandas as pd

headers = {'User-Agent': 
       'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like 
Gecko) Chrome/47.0.2526.106 Safari/537.36'}

#calling websites
page = "https://www.transfermarkt.co.uk/transfers/transferrekorde/statistik/top/plus/0/galerie/0?saison_id=2000"
pageTree = requests.get(page, headers=headers)
pageSoup = BeautifulSoup(pageTree.content, 'html.parser')

#calling players names
Players = pageSoup.find_all("a", {"class": "spielprofil_tooltip"})
#Let's look at the first name in the Players list.
Players[0].text

#calling value of players
Values = pageSoup.find_all("td", {"class": "rechts hauptlink"})
#Let's look at the first name in the Values list.
Values[0].text

PlayersList = []
ValuesList = []

for i in range(0,25):
   PlayersList.append(Players[i].text)
   ValuesList.append(Values[i].text)

df = pd.DataFrame({"Players":PlayersList,"Values":ValuesList})

df.to_csv('2000.csv', index=False)

df.head()

================================================ =====================

我的Excel输出

The Output

3 个答案:

答案 0 :(得分:2)

time

说明:BOM是byte order mark(q.v。)。如果Excel在CSV文件的开头找到了它,它将使用它来确定编码,在您的情况下为UTF-8(对于Python 3,默认编码是正确的)。


编辑

正如Mark Tolonen所指出的,上述代码的精简版是以下代码:

setinterval

编码名称中的let isint = (num) => { if(num % 1 == 0 ) { return true } else { return false } } function numlength(num) { return num.toString().length } let time = 0 setInterval(() => time += 1, 1); let primes = [2,3] console.log(1) console.log(2) console.log(3) function primecalc(primearray) { let isprime = true let NOP = 2 for(let num = 3; num > 2 ;num += 2){ isprime = true for(i of primearray) { if(isint(num / i) == true ) { isprime = false } } if( isprime == true) { NOP += 1 primes.push(num) console.log(`prime:${num} number of primes:${NOP} number of miliseconds:${time}`) if(numlength(num) > 10000) { return num } } } } 代表“签名”,即开头的BOM,Microsoft软件使用它来检测编码。另请参见Encodings and Unicode手册的codecs部分。

答案 1 :(得分:1)

您的系统似乎正在写入编码为UTF-8的文件。 Excel希望UTF-8文件具有BOM签名,否则它假定文本文件以特定于语言环境的ANSI编码进行编码。由于Windows在UTF-8之前已经存在,因此是为了向后兼容。

Python的编码可以写入UTF-8 BOM签名utf-8-sig,因此只需使用:

df.to_csv('2000.csv', encoding='utf-8-sig', index=False)

答案 2 :(得分:0)

更新:

我已经通过下面链接中的以下答案解决了这种情况。

https://stackoverflow.com/a/6488070/10675615

  
      
  1. 在cmd提示符下将导出的文件另存为csv
  2.   
  3. 打开Excel
  4.   
  5. 使用数据导入数据->导入外部数据/获取文本/ CSV->导入数据
  6.   
  7. 选择“ csv”文件类型并浏览到您的文件
  8.   
  9. 在导入向导中,将File_Origin更改为“ 65001 UTF”(或选择正确的语言字符标识符)
  10.   
  11. 将定界符更改为逗号
  12.   
  13. 选择要导入的位置并完成,这样可以正确显示特殊字符。
  14.   

**