我对python比较陌生,我正在使用一个屏幕抓取应用程序,它从多个金融站点收集数据。我现在有四个程序。两个在几分钟内跑完,另外两个。。。每个小时。这两个查找我在csv文件中的特定股票符号的信息。我用了4000多个符号。我知道得很清楚,绝大多数时间花在了IO上。重要的是我要把这些时间缩短到1/2小时。是不是太野心勃勃了?)这对我有任何实际的用处。我使用的是python3和beauthoulsoup。在
我有下面我要做的事情的总体结构。我对概念上不重要的部分进行了缩写。我在一次阅读多个调用/线程的多个线程,以加快速度,而且似乎有很多选择。有人能根据我目前所拥有的结构,给我指出我应该追求的正确方向吗?那将是一个巨大的帮助。我确信这是显而易见的,但是这个过程与主驱动模块中的其他数据下载过程一起被调用。提前谢谢。。。在
from bs4 import BeautifulSoup
import misc modules
class StockOption:
def __init__(self, DateDownloaded, OptionData):
self.DateDownloaded = DateDownloaded
self.OptionData = OptionData
def ForCsv(self):
return [self.DateDownloaded, self.Optiondata]
def extract_options(TableRowsFromBeautifulSoup):
optionsList = []
for opt in range(0, len(TableRowsFromBeautifulSoup))
optionsList.append(StockOption(data parsed from TableRows arg))
return optionsList
def run_proc():
symbolList = read in csv file of tickers
for symb in symbolList:
webStr = #write the connection string
try:
with urllib.request.urlopen(webStr) as url: page = url.read()
soup = BeautifulSoup(page)
if soup.text.find('There are no All Markets results for') == -1:
tbls = soup.findAll('table')
if len(tbls[9]) > 1:
expStrings = soup.findAll('td', text=True, attrs={'align': 'right'})[0].contents[0].split()
expDate = datetime.date(int(expStrings[6]), int(currMonth), int(expStrings[5].replace(',', '')))
calls = extract_options(tbls[9], symb, 'Call', expDate)
puts = extract_options(tbls[13], symb, 'Put', expDate)
optionsRows = optionsRows + calls
optionsRows = optionsRows + puts
except urllib.error.HTTPError as err:
if err.code == 404:
pass
else:
raise
opts = [0] * (len(optionsRows))
for option in range(0, len(optionsRows)):
opts[option] = optionsRows[option].ForCsv()
#Write to the csv file.
with open('C:/OptionsChains.csv', 'a', newline='') as fp:
a = csv.writer(fp, delimiter=',')
a.writerows(opts)
if __name__ == '__main__':
run_proc()
下面的帖子给我指出了正确的方向(感谢作者btw):
How to scrape more efficiently with Urllib2?
你所给的缩写代码中有一些错误,所以要理解这些代码有点困难。如果您可以显示更多的代码并进行检查,那么您的问题将更容易理解。在
从代码和问题描述中,我有一些建议可以与您分享:
在
run_proc()
函数中,它读取每个符号的网页。如果URL是相同的或某些URL是重复的,那么只读取一次网页并将其写入内存或硬件,然后分析每个符号的页面内容如何?它将节省BeautifulSoup
很容易编写代码,但性能有点慢。如果lxml
可以完成您的工作,它将节省大量分析网页内容的时间。希望能有所帮助。在
相关问题 更多 >
编程相关推荐