Python 3.4:';str';不支持缓冲区接口
我目前正在编写一个程序,从csv文件的第一列中提取字符串列表,然后将其存储在.txt文件中,最后使用urllib解析Yahoo Finance对应的价格。然而,我不断得到错误:Python 3.4:';str';不支持缓冲区接口,python,python-3.x,urllib,Python,Python 3.x,Urllib,我目前正在编写一个程序,从csv文件的第一列中提取字符串列表,然后将其存储在.txt文件中,最后使用urllib解析Yahoo Finance对应的价格。然而,我不断得到错误: TypeError:“str”不支持缓冲区接口。 以下是我迄今为止的代码: import csv import urllib.request completeList = open('complete.txt', 'r+') def ReadNasdaq(): with open('NASDAQ_compan
TypeError:“str”不支持缓冲区接口。
以下是我迄今为止的代码:
import csv
import urllib.request
completeList = open('complete.txt', 'r+')
def ReadNasdaq():
with open('NASDAQ_companylist.csv', newline='') as csvfile:
spamreader = csv.reader(csvfile, delimiter=',')
for column in spamreader:
completeList.write(column[0]+'\n')
print(column[0]," - ",column[1])
ReadNasdaq()
def ParsePrice():
for line in completeList:
yahooFinance = urllib.request.urlopen("http://finance.yahoo.com/q?s="+line).read()
price = yahooFinance.split('<span id="yfs_l84_'+line.lower()+'">' )[1].split("</span>")[0]
print(line, " - ", price)
ParsePrice()
导入csv
导入urllib.request
completeList=open('complete.txt','r+'))
def ReadNasdaq():
以open('NASDAQ_companylist.csv',newline='')作为csvfile:
spamreader=csv.reader(csvfile,分隔符=',')
对于spamreader中的列:
completeList.write(列[0]+'\n')
打印(列[0],“-”,列[1])
ReadNasdaq()
def ParsePrice():
对于完整列表中的行:
yahooFinance=urllib.request.urlopen(“http://finance.yahoo.com/q?s=“+行)。读取()
price=yahooFinance.split(“”)[1]。split(“”[0]
打印(行“-”,价格)
价格
错误在以下行中:
price = yahooFinance.split('<span id="yfs_l84_'+line.lower()+'">' )[1].split("</span>")[0]
price=yahooFinance.split(“”)[1]。split(“”[0]
我知道我必须将字符串转换为Unicode或二进制,但你知道我该怎么做吗 某些内容需要字节字符串,但您提供了Unicode字符串 在本例中,您尝试使用Unicode字符串拆分从read()返回的二进制数据 试试这个:
price = yahooFinance.split(b'<span id="yfs_l84_'+line.lower()+b'">' )[1].split(b"</span>")[0]
price=yahooFinance.split(b'')[1]。split(b'')[0]
哪一行?Martijn指出,如果你正在做任何复杂的HTML处理,你需要使用一个库,比如BeautifulSoup或lxml。byte.split()
更有可能。或者他们可以先尝试解码HTTP响应。。有response.info().get_param('charset')
查看服务器是否包含提示。或者他们应该停止手工破解HTML,开始使用BeautifulSoup,它将自动检测编解码器。是的,这取决于他们想用它做什么。