,,Python学习笔记之抓取某只基金历史净值数据实战案例

,,Python学习笔记之抓取某只基金历史净值数据实战案例

本文主要介绍了Python的学习笔记抓取基金历史净值数据的案例,并结合具体实例分析了基于selenium库的Python的数据抓取和mysql交互相关实现技巧。有需要的可以参考一下。

本文讲述了Python捕捉一只基金的历史净值数据的故事。分享给你,供你参考,如下:

http://fund.eastmoney.com/f10/jjjz_519961.html

1.接下来,我们需要手动抓取这些html(这些知识我们之前学过,现在不妨重温一下)

#编码:utf-8

从selenium.webdriver.support.ui导入WebDriverWait

从selenium导入web驱动程序

从bs4导入BeautifulSoup

从螺纹导入螺纹,锁紧

导入操作系统

导入csv

#下面是用selenium抓取html页面的代码

#初始化函数

def initSpider():

driver=web driver . phantomjs(executable _ path=r '您的phantom js可执行文件的绝对路径')

driver . get(' 3358 fund . eastmoney . com/F10/jjjz _ 519961 . html ')#要抓取的网页的地址

#找到‘下一页’按钮,前面可以得到一个标签,就是总页数。

get page _ text=driver . find _ element _ by _ id(' page bar ')。通过xpath查找元素(

div[@ class=' page btns ']/label[text()='下一页']/preceding-sibling: label [1]')。get _ attribute(“innerhtml”)

#获取总共有多少页

total_page=int(')。join(filter(str.isdigit,getPage_text)))

#返回

返回(驱动程序,total_page)

#获取html内容

def getData(myrange,driver,lock):

对于myrange中的x:

#锁定

lock.acquire()

tonum=driver . find _ element _ by _ id(' page bar ')。通过xpath查找元素(

div[@ class=' page btns ']/input[@ class=' pnum ']')#获取页码文本框

jump BTN=driver . find _ element _ by _ id(' page bar ')。通过xpath查找元素(

div[@ class=' pagebtns ']/input[@ class=' pgo ']')#跳转到按钮

第x页的Tonum.clear() #输入框

Tonum.send_keys(str(x)) #转到第x页

Jumpbtn.click() #单击按钮

#抓取

WebDriverWait(驱动程序,20)。until(lambda driver:driver . find _ element _ by _ id(' page bar ')。find _ element _ by _ XPath(' div[@ class=' page btns ']/label[@ value={ 0 } and @ class=' cur ']')。格式(x))!=无)

#保存到项目

带开(’./htmls/details/{0}。' txt '。格式(x),‘WB’)为f:

f . write(driver . find _ element _ by _ id(' JZ table ')。get_attribute('innerHTML ')。编码(' utf-8 '))

f.close()

#解锁

lock.release()

#开始抓取功能

def beginSpider():

#初始化爬网程序

(driver,total_page)=initSpider()

#创建一个锁

lock=Lock()

r=range(1,int(total_page) 1)

步骤=10

range _ list=[r[x:x step]for x in range(0,len (r),step)] #分段页码

thread_list=[]

对于range_list中的r:

t=Thread(target=getData,args=(r,driver,lock))

线程列表附加(t)

启动()

对于线程列表中的t:

T.join() #这一步是需要的,等待所有线程执行。

打印(“捕获完成”)

# # # # # # # # # # #上面的代码完成了抓取远程网站的html内容并保存到项目中的过程。

需要解释这三个功能:

InitSpider函数,初始化selenium的webdriver对象,首先获取我们需要抓取的页面的总页数。

GetData函数,有3个参数,myrange,我们还是要分段爬行。之前我们学了太多进程抓取,这里是多线程抓取;lock参数用于锁定线程,防止线程冲突;Driver是我们在initSpider函数中初始化的webdriver对象。

在getData函数中,我们循环myrange并将捕获的html内容保存到项目目录中。

BeginSpider函数,在这个函数中,我们对总页数进行分段,并创建一个线程来调用getData。

所以最后执行:

beginSpider()

我开始在http://fund.eastmoney.com/f10/jjjz_519961.html,抓取这只基金总共31页的“历史净值明细”。

2.根据已经学过的python和mysql交互的知识,我们也可以把这些数据写入数据表。

这里就不赘述了,给出基金的详细表格结构:

创建表' fund_detail `(

` id ' int(11)unsigned NOT NULL AUTO _ INCREMENT

` fcode ' varchar(10)不为空默认值''注释'基金代码,

日期时间默认空注释'基金日期,

`导航'十进制(10,4)默认空注释'单位净值,

' ACCNAV '十进制(10,4)默认空注释'累计净值,

` DGR ' varchar(20)默认空注释'日增长率,

` pstate ' varchar(20)默认空注释'申购状态,

` rstate ' varchar(20)默认空注释'赎回状态,

主键(` id `)

)ENGINE=InnoDB DEFAULT CHARSET=utf8mb 4 COMMENT='基金详细数据表;

更多关于计算机编程语言相关内容可查看本站专题: 《Python Socket编程技巧总结》 、 《Python正则表达式用法总结》 、 《Python数据结构与算法教程》 、 《Python函数使用技巧总结》 、 《Python字符串操作技巧汇总》 、 《Python入门与进阶经典教程》 及《Python文件与目录操作技巧汇总》

希望本文所述对大家计算机编程语言程序设计有所帮助。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: