如何加速我的拖网python代码?
我一直在使用Python代码从股票交易模拟软件中提取数据(我获取我正在交易的证券的股票代码,例如VTI、AAPL、GOOG等),然后搜索晨星的股票代码,并从该网站提取定价信息和我想要的任何其他信息。我将所需列表中的数据保存到.csv文件中,以便在Excel中使用。我使用Selenium来运行一个webdriver(我使用Chrome来直观地查看流程,或者使用PhantomJS来运行无头程序,而不使用浏览器GUI),并使用beautifulsoup来访问网站和使用HTML 我的程序运行正常,但只需120秒就可以完成一个只有11种证券的投资组合,我希望能扩展这个程序来做更精细的操作 在我的编码风格中,有没有什么可以改变的东西可以加速网页垃圾处理的过程?有没有编写Python代码的通用方法来实现快速执行 代码如下:如何加速我的拖网python代码?,python,selenium,web-scraping,finance,Python,Selenium,Web Scraping,Finance,我一直在使用Python代码从股票交易模拟软件中提取数据(我获取我正在交易的证券的股票代码,例如VTI、AAPL、GOOG等),然后搜索晨星的股票代码,并从该网站提取定价信息和我想要的任何其他信息。我将所需列表中的数据保存到.csv文件中,以便在Excel中使用。我使用Selenium来运行一个webdriver(我使用Chrome来直观地查看流程,或者使用PhantomJS来运行无头程序,而不使用浏览器GUI),并使用beautifulsoup来访问网站和使用HTML 我的程序运行正常,但只需
from selenium import webdriver
from bs4 import BeautifulSoup
import csv
#browser = webdriver.Chrome() #replace with .Firefox(), or with the browser of your choice
browser = webdriver.PhantomJS()
security_links_list = list()
equitysim_ticker_list = list()
url = ['https://www.equitysim.com/Home'
]
for item in url:
browser.get(item) #navigate to page behind login
username = browser.find_element_by_id('placeholderContent_txtUserName')
username.send_keys('EDITED_FOR_SECURITY')
password = browser.find_element_by_id('placeholderContent_txtPassword')
password.send_keys('EDITED_FOR_SECURITY')
form = browser.find_element_by_id("placeholderContent_LoginButton")
form.click()
innerHTML = browser.execute_script("return document.body.innerHTML") #returns the inner HTML as a string
innerHTML = browser.page_source
html = browser.page_source
soup = BeautifulSoup(html, 'html.parser')
table_a = soup.find('table', 'ba-tbl admintable')
for a in table_a.find_all('a', href=True):
security_links_list.append(a['href'])
links_set = set(security_links_list)
links_set.remove('#')
print(links_set)
mystring = "https://www.equitysim.com"
links_set_revised = [mystring + link_text for link_text in links_set]
print(links_set_revised)
for item in links_set_revised:
browser.get(item)
innerHTML = browser.execute_script("return document.body.innerHTML") #returns the inner HTML as a string
innerHTML = browser.page_source
html = browser.page_source
soup = BeautifulSoup(html, 'html.parser')
title_element = soup.find("title")
title = title_element.text
ticker = title.split(':', 1)[0]
ticker = ticker.replace('\n','')
ticker = ticker.replace('\t','')
equitysim_ticker_list.append(ticker)
print(equitysim_ticker_list)
morningstar_ticker_search = "http://quote.morningstar.com/TickerLookup.html"
uri_links = list()
for ticker in equitysim_ticker_list:
browser.get(morningstar_ticker_search)
enter_ticker = browser.find_element_by_xpath("//input[@value='Ticker']")
enter_ticker.click()
search_ticker = browser.find_element_by_class_name('F3')
search_ticker.send_keys(ticker)
go_box = browser.find_element_by_xpath("//input[@src='http://im.morningstar.com/im/go.gif']")
go_box.click()
html = browser.page_source
soup = BeautifulSoup(html, 'html.parser')
outer_div = soup.find('div', attrs={'id': 'quote_quicktake'})
iframe = outer_div.find('iframe').get('src')
full_url = 'https:' + iframe
uri_links.append(full_url)
print(uri_links)
price_list = list()
ticker_list = list()
nav_list = list()
for item in uri_links:
browser.get(item) #navigate to page behind login
innerHTML = browser.execute_script("return document.body.innerHTML") #returns the inner HTML as a string
innerHTML = browser.page_source
html = browser.page_source
soup = BeautifulSoup(html, 'html.parser')
price_element = soup.find("div", attrs={"id": "lastPrice"})
price = price_element.text # strip() is used to remove starting and trailing
nav_element = soup.find("span", attrs={"id": "NAV"} or {"vkey": "NAV"})
nav = nav_element.text
nav_split1 = nav.split('\n \t\t', 1)[1]
nav_split2 = nav_split1.split(' ', 1)[0]
title_element = soup.find("title")
title = title_element.text
ticker = title.split(' ', 1)[0]
price_list.append(price)
nav_list.append(nav_split2)
ticker_list.append(ticker)
print(ticker)
print(price)
print(nav_split2)
#ticker =
print(ticker_list)
print(price_list)
print(nav_list)
csvfile = "C:\\Users\\USERNAME\\AppData\\Local\\Programs\\Python\\Python36\\personal\\exampleCsv.csv"
#Assuming res is a flat list
with open(csvfile, "w") as output:
writer = csv.writer(output,lineterminator='')
writer.writerow(ticker_list)
writer.writerow('\n')
writer.writerow(price_list)
writer.writerow('\n')
writer.writerow(nav_list)
这是一个公平的问题,但这对于StackOverflow来说有点离题了,因为这个问题可能有许多不同的正确答案。对这个问题的典型回答是并行运行更多浏览器,通常使用芹菜之类的队列。将所有URL放在一个队列中,然后跨越硬件/网络可以处理的尽可能多的工作人员来获取它们。如果你不需要JavaScript,可以考虑使用SoRy或机器人。为了加速网络浏览,不要使用硒。使用http库获取页面,并使用XML库对其进行解析。@SiKing我仔细研究了您的建议,了解到Beautifulsoup的解析器可以与lxml解析器交换。这就是您所说的使用XML库进行解析的意思吗?另外,关于您关于使用http库获取页面的建议,您是指使用诸如请求之类的库吗?我明天也会亲自调查,但任何直接的建议都会很好。谢谢你给我指明了正确的方向!