本文主要介绍了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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。