版权声明:本文为博主原创文章,如果转载请给出原文链接:http://doofuu.com/article/4156231.html

目前在开发一款基于Python的基金爬取、分析、预测系统,目前已经开发到90%了。借助周末有时间,记录下开发过程中遇到的坑和自己的项目总结。

这篇文章主要介绍了Python抓取某只基金历史净值数据案例,结合具体实例形式分析了Python基于BeautifulSoup库的数据抓取及mysql交互相关实现技巧,需要的朋友可以参考下。

Python做网络爬虫需要学习额外基本知识:

1.HTML。基金所需的数据都通过HTML网页的形式返回,数据和HTML tag通过一定的规范组成渲染后的形成网页。了解HTML是为了有效地剥离数据。

2.Python的正则表达式。正则表达式对文字的筛选效率十分高。上面已经说明数据需要剥离,而正则表达式正为了完成这项工作。正则表达式一定要学,不然所有东西都白搭。同时这个也是最繁复的,需要根据结果适当调整正则表达式。

3.报文的格式及类型,为了得到需要的数据,我们需要向服务器提出请求。有的请求设置需要使用到POST的知识,如向学校教务网站登陆等等。但是这里用不上,做爬虫这个点迟早会用上,要多多钻研。

好了先来看看Python爬取基金的核心代码吧!# -*- coding: utf-8 -*-

'''

使用selenium模拟翻页

使用beautifulsoup解析网页

使用sqlacheme存储入库

'''

import os

import io

from datetime import datetime

from common.config import dburl

from bs4 import BeautifulSoup

from selenium import webdriver

from selenium.webdriver.support.ui import WebDriverWait

from sqlalchemy import create_engine

from sqlalchemy.orm import sessionmaker

from mappers.Fund import Myfund

from common.function import getText

engine = create_engine(dburl,echo=True)

##获取基金每一页的数据,并且写入到文件当中

def getFundhtml():

# 初始化selenium

driver = webdriver.PhantomJS()

driver.get('http://fund.eastmoney.com/fund.html')

totalpage = getPageTotal(driver)

getData(driver, 1, totalpage)

##获取总的页数

def getPageTotal(driver):

getTotalPage_text = driver.find_element_by_id("pager").find_element_by_xpath("span[@class='nv']").text

total_page = ''.join(filter(str.isdigit, getTotalPage_text))  ##得到一共是多少页数

return int(total_page)

##获取分页,并将每一页的数据写进htmls文件夹中

def getData(driver,start,end):

for x in range(start,end+1):

tonum=driver.find_element_by_id("tonum")#得到跳转输入框

jumbtn=driver.find_element_by_id("btn_jump")#跳转得到按钮

tonum.clear()

tonum.send_keys(str(x))#发送跳转页数

jumbtn.click()#模拟点击确定跳转按钮

#判断找到某页成功的标志

WebDriverWait(driver,30).until(lambda driver:driver.find_element_by_id('pager').find_element_by_xpath("span[@value={0} and @class!='end page']".format(x)).get_attribute(

'class').find("at") != -1)

#写入文件中

with io.open(os.path.abspath('..')+"\htmls\{0}.txt".format(x),'wb') as f:

##只抓取表格部分,方便beautifulsoup解析数据

f.write(driver.find_element_by_id("tableDiv").get_attribute("innerHTML").encode('utf-8'))

f.close()

def SoupFundData(html):

#读取htmls文件夹的每一个文件

soup=BeautifulSoup(html,'html.parser')

fCodes = soup.find("table", id="oTable").tbody.find_all("td", "bzdm")  # 基金编码集合

fDate = soup.find("table", id="oTable").thead.find("td", colspan='2').get_text()  # 基金日期

##获取基金代码

result=[]

for fCode in fCodes:

result.append({"fcode": fCode.get_text()

, "fname": fCode.next_sibling.find("a").get_text()

, "NAV": getText(fCode.next_sibling.next_sibling)

, "ACCNAV": getText(fCode.next_sibling.next_sibling.next_sibling)

, "DGV": fCode.parent.find("td", "rzzz").get_text()  # 日增长值,取fcode所在的父元素(tr),然后find

, "DGR": fCode.parent.find("td", "rzzl").get_text()  # 日增长率

, "fee": getText(fCode.parent.find("div", "rate_f"))  # 费率,注意这里不要定位到A元素,有的基金没有这个div,所以要做判断

, "updatetime": datetime.now().isoformat(sep=' ')

, "fdate": fDate}

)

##返回每一页的数据集

return result

def SaveDb():

##抓取文件的路径

datadir='./htmls'

allpath=os.listdir(datadir)

##初始化数据库连接

mysession = sessionmaker(bind=engine)()

dataList=[]

for filename in allpath:

if os.path.isfile(os.path.join(datadir, filename)):

##读取抓取的文本文件

with io.open(os.path.join(datadir,filename), "r",encoding='UTF-8') as file:

fileCnt = file.read()

file.close()

resultSet=SoupFundData(fileCnt)

for result in resultSet:

myfund = Myfund(**result)

##构造数据库实体化对象列表,方便批量插入

dataList.append(myfund)

#批量插入

mysession.add_all(dataList)  # 批量新增

mysession.commit()

mysession.close()

目前是把爬取的数据存放在txt文件了,下片博文我会数据存放在Mysql中。

祝生活愉快!

「创作不易,你的支持是本站持续更新最大的动力!」

1

谢谢你请我喝奶茶*^_^*

支付宝

微信

python基金预测分析_Python爬虫抓取基金数据分析、预测系统设计与实现相关推荐

  1. python b站 排行_Python爬虫抓取B站小视频排行榜,新手也可以跟着做哦!

    Python爬虫学到什么程度就可以去找工作了? 有朋友在群里和大家讨论,问的最多的问题就是,python 爬虫学到什么程度可以去找工作了,关于这点,和大家分享下我的理解. 看大牛用Python实现发送 ...

  2. Python进阶之Scrapy-redis分布式爬虫抓取当当图书

    Python进阶之Scrapy-redis分布式爬虫抓取当当图书 1. 准备工作 1.1 安装scrapy-redis 1.2 在windows安装redis程序 1.3 打开redis服务 2. 需 ...

  3. python唐诗分析综合_Python爬虫抓取唐诗宋词

    一 说明 Python语言的爬虫开发相对于其他编程语言是极其高校的,在上一篇文章 爬虫抓取博客园前10页标题带有Python关键字(不区分大小写) 的文章中,我们介绍了使用requests做爬虫开发, ...

  4. python爬虫资源大全_Python爬虫抓取纯静态网站及其资源(基础篇)

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理 以下文章来源于腾讯云 作者:程序员宝库 **( 想要学习Python?Python ...

  5. python爬取大众点评评论_python爬虫抓取数据 小试Python——爬虫抓取大众点评上的数据 - 电脑常识 - 服务器之家...

    python爬虫抓取数据 小试Python--爬虫抓取大众点评上的数据 发布时间:2017-04-07

  6. python爬虫app步骤_Python爬虫抓取手机APP的传输数据,python爬虫抓取app

    Python爬虫抓取手机APP的传输数据,python爬虫抓取app 大多数APP里面返回的是json格式数据,或者一堆加密过的数据 .这里以超级课程表APP为例,抓取超级课程表里用户发的话题. 1. ...

  7. python抓取数据库数据_Python爬虫抓取东方财富网股票数据并实现MySQL数据库存储...

    Python爬虫可以说是好玩又好用了.现想利用Python爬取网页股票数据保存到本地csv数据文件中,同时想把股票数据保存到MySQL数据库中.需求有了,剩下的就是实现了. 在开始之前,保证已经安装好 ...

  8. python爬虫实现股票数据存储_Python爬虫抓取东方财富网股票数据并实现MySQL数据库存储!...

    Python爬虫可以说是好玩又好用了.现想利用Python爬取网页股票数据保存到本地csv数据文件中,同时想把股票数据保存到MySQL数据库中.需求有了,剩下的就是实现了. 在开始之前,保证已经安装好 ...

  9. python爬虫抓取百度图片_Python爬虫抓取百度的高清摄影图片

    成果预览: 源代码: import requests import re url = 'https://image.baidu.com/search/index' headers = { 'User- ...

最新文章

  1. NEFU 560 半数集
  2. 李大龙:音视频技术是互联网品质生活的连接器
  3. HDU 2255 二分图最佳匹配 模板题
  4. SAP Spartacus cxOutlet里的元数据存储,outlet名称和待渲染Component的映射关系
  5. python做些什么项目_Python 的练手项目有哪些值得推荐
  6. 到底是无线最难?还是核心网最难?
  7. JavaScript之验证码--常用js特效
  8. 用opencv在图片上面添加水印
  9. 网络剧网络电影也有“龙标”了,“上线备案号”时代结束
  10. vue.js--v-show隐藏图片
  11. 模拟IC设计——反相器
  12. 电脑升级建议(加固态硬盘还是内存、CPU、显卡)
  13. intellij背景护眼色调节
  14. Mongo聚合函数使用Sort排序时内存不足导致查询失败,开启allowDiskUse=true
  15. 微信小程序跳转h5链接(web-view)
  16. java ocx调用_Java调用ocx控件以及dll
  17. 安装 catboost 的正确方式
  18. IbBBX24–IbTOE3–IbPRX17模块通过清除甘薯中的活性氧来增强甘薯对非生物胁迫耐受性
  19. 计算机二级java软件netBean安装(路径错误问题)
  20. 2021-06-05 吾日三省吾身

热门文章

  1. java--数据类型
  2. vanish高速反向代理服务器配置
  3. 感动:我奋斗了18年才和你坐在一起喝咖啡(转)
  4. 富士康java面试题
  5. 人工智能工程师学习路线/自然语言处理算法工程师
  6. 毕业设计-基于微信小程序的校园二手闲置物品交易系统
  7. 计算机模拟虚拟筛选操作流程
  8. 在Linux命令行终端中写python代码的简单操作
  9. Excel与VBA编程中的常用代码
  10. 荣耀电脑怎样更改计算机名称,王者荣耀荣耀战区怎么修改别的地区?手机电脑改荣耀战区不封号操作方法[多图]...