如何使用pandas将HTML正确解析为Unicode字符串?

时间:2018-01-28 04:56:17

标签: python pandas html5lib

我正在运行一个Python程序,它获取一个UTF-8编码的网页,我使用pandas(read_html)从HTML表中提取一些文本并将结果写入csv文件

但是,当我将此文本写入文件时,其中的所有空格都会以意外编码形式写入(例如\ xd0 \ xb9 \ xd1 \ x82 \ xd0 \ xb8)。 解决问题我添加了一行i = i.split(“”) 之后,csv文件中的所有空格都替换字符,如下例所示:

['0', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '1', '', '', '', '', '', '', '', '', '', '', '', '', '', '2', '', '', '3\n0', '', '', '', '', '', '', '', 'number', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'last name', '', 'number', 'plan', 'NaN\n1', '', '', '', '', '', '', '', '', '', 'NaN', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'NaN', '', '', 'not', 'NaN\n2', '', '', '', '', '53494580', '', '', '', '', '', '', '', '', '', '+', '(53)494580', '', '', '', '', '', '', '', '', 'NP_551', 'NaN\n3', '', '', '', '', '53494581', '', '', '', '', '', '', '', '', '', '+', '(53)494581', '', '', '', '', '', '', '', '', 'NP_551', 'NaN\n4', '', '', '', '']

我想摆脱角色('',)有没有办法解决这个问题? 任何指针都会非常感激。

代码python:

import pandas as pd
import html5lib

filename="1.csv" 
file=open(filename,"w",encoding='UTF-8', newline='\n'); 
output=csv.writer(file, dialect='excel',delimiter =' ') 

r = requests.get('http://10.45.87.12/og?sh=1&CallerName=&Sys=.79.83.86.51&')
pd.set_option('max_rows',10000) 
df = pd.read_html(r.content)

for i in df:
    i = str(i)
    i = i.strip()
    i = i.encode('UTF-8').decode('UTF-8')
    i = i.split(" ")
    output.writerow(i)
 file.close()

1 个答案:

答案 0 :(得分:0)

您可以使用 filter 方法删除空值。您可以在' i = i.split("")'

之后添加以下代码段
A = ['0', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '1', '', '', '', '', '', '', '', '', '', '', '', '', '', '2', '', '', '3\n0', '', '', '', '', '', '', '', 'number', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'last name', '', 'number', 'plan', 'NaN\n1', '', '', '', '', '', '', '', '', '', 'NaN', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'NaN', '', '', 'not', 'NaN\n2', '', '', '', '', '53494580', '', '', '', '', '', '', '', '', '', '+', '(53)494580', '', '', '', '', '', '', '', '', 'NP_551', 'NaN\n3', '', '', '', '', '53494581', '', '', '', '', '', '', '', '', '', '+', '(53)494581', '', '', '', '', '', '', '', '', 'NP_551', 'NaN\n4', '', '', '', '']
print filter(None, A)

<强>输出:

['0', '1', '2', '3\n0', 'number', 'last name', 'number', 'plan', 'NaN\n1', 'NaN', 'NaN', 'not', 'NaN\n2', '53494580', '+', '(53)494580', 'NP_551', 'NaN\n3', '53494581', '+', '(53)494581', 'NP_551', 'NaN\n4']