[Python] 纯文本查看 复制代码# selenium请求[基金持仓股票详情页面url]的方法,爬取基金的持仓股票名称、持仓量;
def hold_a_position(url):
stock_name = [] # 定义一个数组,存储证券的名称
amount = [] #定义一个数组,存储证券的持仓
# 浏览器动作
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')
driver = webdriver.Chrome(options=chrome_options) # 初始化浏览器,无浏览器界面的,保持后台运行;
driver.get(url) # 请求基金持仓的信息
element_result = is_element(driver, "tol") # 是否存在这个元素,用于判断是否有持仓信息;
#print(url + '\n')
if element_result == True: # 如果有持仓信息则爬取;
wait = WebDriverWait(driver, 3) # 设置一个等待时间
input = wait.until(EC.presence_of_element_located((By.CLASS_NAME, 'tol'))) # 等待这个class的出现;
ccmx_page = driver.page_source # 获取页面的源码
ccmx_xpath = etree.HTML(ccmx_page) # 转换成成 xpath 格式
trs = ccmx_xpath.xpath("//div[@class='txt_cont']//div[@id='cctable']//div[@class='box'][1]//tr")
if trs:
#print("开始获取基金持仓信息")
for tr in trs:
stock_name_t = tr.xpath("./td[3]//text()")
if len(stock_name_t) != 0: #获取成功才返回数据
stock_amount_t = tr.xpath("./td[8]//text()")
if len(stock_amount_t) != 0:
stock_amount = stock_amount_t[0].replace(",", "") #去除持仓中的逗号
if stock_amount.split(".")[-1].isdigit(): #如果是数值则继续,此处还待优化,仍有字母数据返回
stock_name.append(stock_name_t[0])
amount.append(stock_amount)
#print(stock_name)
#print(amount)
driver.quit()
return stock_name,amount
else: # 如果没有持仓信息,则返回null字符;
driver.quit()
return "null","null"