【发布时间】:2021-10-23 12:07:21
【问题描述】:
我想从雅虎财经网页中提取所有期权链数据,为简单起见,取看跌期权链数据。 首先,加载程序中用到的所有包:
import time
import pandas as pd
from selenium import webdriver
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
将某公司看跌期权链数据写入目录的函数:
def write_option_chain(code):
browser = webdriver.Chrome()
browser.maximize_window()
url = "https://finance.yahoo.com/quote/{}/options?p={}".format(code,code)
browser.get(url)
WebDriverWait(browser,10).until(EC.visibility_of_element_located((By.XPATH, ".//select/option")))
time.sleep(25)
date_elem = browser.find_elements_by_xpath(".//select/option")
time_span = len(date_elem)
print('{} option chains exists in {}'.format(time_span,code))
df_all = pd.DataFrame()
for item in range(1,time_span):
element_date = browser.find_element_by_xpath('.//select/option[{}]'.format(item))
print("parsing {}'s put option chain on {} now".format(code,element_date.text))
element_date.click()
WebDriverWait(browser,10).until(EC.visibility_of_all_elements_located((By.XPATH, ".//table[@class='puts W(100%) Pos(r) list-options']//td")))
time.sleep(11)
put_table = browser.find_element_by_xpath((".//table[@class='puts W(100%) Pos(r) list-options']"))
put_table_string = put_table.get_attribute('outerHTML')
df_put = pd.read_html(put_table_string)[0]
df_all = df_all.append(df_put)
browser.close()
browser.quit()
df_all.to_csv('/tmp/{}.csv'.format(code))
print('{} otpion chain written into csv file'.format(code))
使用列表测试write_option_chain:
nas_list = ['aapl','adbe','adi','adp','adsk']
for item in nas_list:
try:
write_option_chain(code=item)
except:
print("check what happens to {} ".format(item))
continue
time.sleep(5)
输出信息显示:
#i omitted many lines for simplicity
18 option chains exists in aapl
parsing aapl's put option chain on August 27, 2021 now
check what happens to aapl
check what happens to adbe
12 option chains exists in adi
parsing adi's put option chain on December 17, 2021 now
adi otpion chain written into csv file
11 option chains exists in adp
parsing adp's put option chain on August 27, 2021 now
adp otpion chain written into csv file
check what happens to adsk
我们根据以上信息做一个总结:
1.仅将adp和adi的看跌期权链数据写入所需目录。
2.仅获取aapl和adp的部分期权链数据
3.adsk的选项网页打不开。
4.执行大约需要20分钟。
如何使使用 selenium 从网页中提取数据更加健壮和高效?
【问题讨论】:
-
更健壮是什么意思?
-
它只能获取部分公司的期权数据,不能全部获取。请复制并在您的计算机上试用,并比较您得到的和我的。
-
@showkey 是
selenium必须的,我们不能使用其他库来加快速度吗? -
@showkey 你还没有回复?在您的最后一次编辑中,这是指其他人,但您做错了。您不应该发送所有
nas_list,您必须像x=write_option_chain("aapl")或可能像在您的代码中一样,一一发送,使用for loop:) -
你什么都没有,因为函数
write_option_chain()没有返回任何东西。相反,它将 CSV 文件保存在/tmp/{code}.csv。
标签: python selenium web-crawler