Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.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 3.4:';str';不支持缓冲区接口_Python_Python 3.x_Urllib - Fatal编程技术网

Python 3.4:';str';不支持缓冲区接口

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

我目前正在编写一个程序,从csv文件的第一列中提取字符串列表,然后将其存储在.txt文件中,最后使用urllib解析Yahoo Finance对应的价格。然而,我不断得到错误:

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,它将自动检测编解码器。是的,这取决于他们想用它做什么。