Python和Excel连接

我如何连接27行? 我得到“TypeError:不能连接'str'和'列表'对象。 是因为我在符号列表中使用了一个变化的variables吗?

这是我正在谈论的路线:

ws.cell(1,i+1).value = "The price of" + symbolslist[i] + " is " + price 

下面是我的代码和第27行的消息。

 from openpyxl import Workbook import urllib import re from openpyxl.cell import get_column_letter wb = Workbook() dest_filename = r'empty_book.xlsx' ws = wb.create_sheet() ws.title = 'Stocks' symbolslist = ["aapl","spy","goog","nflx"] i=0 while i<len(symbolslist): #counts each object as 1 in the list url = "http://finance.yahoo.com/q?s="+symbolslist[i]+"&q1=1" htmlfile = urllib.urlopen(url) htmltext = htmlfile.read() regex = '<span id="yfs_l84_'+symbolslist[i]+'">(.+?)</span>' pattern = re.compile(regex) price = re.findall(pattern,htmltext) print "The price of", symbolslist[i], " is ", price ws.cell(1,i+1).value = "The price of" + symbolslist[i] + " is " + price i+=1 wb.save(filename = dest_filename) 

re.findall()总是返回一个列表; 也许你想把它变成一个string:

 ws.cell(1,i+1).value = "The price of" + symbolslist[i] + " is " + ','.join(price) 

或者,只打印第一个元素:

 ws.cell(1,i+1).value = "The price of" + symbolslist[i] + " is " + price[0] 

使用HTMLparsing器parsingHTML更容易; BeautifulSoup会是一个更好的工具:

 import urllib from bs4 import BeautifulSoup for symbol in symbolslist: url = "http://finance.yahoo.com/q?s={}&q1=1".format(symbol) response = urllib.urlopen(url) soup = BeautifulSoup(response, from_encoding=response.headers.getparam('charset')) price = soup.find('span', id='yfs_l84_' + symbol).text text = "The price of {} is {}".format(symbol, price) print text ws.cell(1,i+1).value = text 

快速演示:

 >>> import urllib2 >>> from bs4 import BeautifulSoup >>> symbolslist = ["aapl","spy","goog","nflx"] >>> for symbol in symbolslist: ... url = "http://finance.yahoo.com/q?s={}&q1=1".format(symbol) ... response = urllib.urlopen(url) ... soup = BeautifulSoup(response, from_encoding=response.headers.getparam('charset')) ... price = soup.find('span', id='yfs_l84_' + symbol).text ... text = "The price of {} is {}".format(symbol, price) ... print text ... The price of aapl is 483.03 The price of spy is 168.89 The price of goog is 872.35 The price of nflx is 327.26