爬取基金数据案例

爬虫常规思路:

1.分析网页

2.对网页发送请求,获取响应

3.提取解析数据

4.保存数据

本案例所用到的模块:

import requests
import time
import csv
import re

网址链接:http://fund.eastmoney.com/Data/Fund_JJJZ_Data.aspx

一、分析网页

其实这个网站的网页数据没有太多的反爬,就是网页需要构建一个params的参数,该参数里面包含了网页翻页的数据,时间戳的数据,这些是动态的,需要怎么自己指定一下,如图所示:

如上分析后,就可以对该链接发送请求了,但是这个网站还有一个和别的地方不一样的,他给你返回的不是html源码,也不是json数据,而是字符数据,如图:

我们可以看到这些不同html和json数据,所以就需要用到正则表达式老进行过滤提取了。
经过以上分析,我的大体思路就是,先爬取一页的数据,利用正则提取,能成功爬取到一页的数据后,只用做一个循环遍历,就可以爬取多页的数据了。

二、先构建需要请求网页所需的params参数

代码如下:

 def get_params(self):"""构建params参数的方法:return:"""params = {"t": "1","lx": "1","letter": "","gsid": "","text": "","sort": "zdf,desc","page": f"{str(self.page)},200","dt": str(self.TIMESTRF),"atfc": "","onlySale": "0",}return params

dt这个参数上面说了,是一个不正规的时间戳,那么我们怎么办,思路是,用time模块先提取出真正的当前时间戳,然后用int()把它强制转换成整数,然后乘以1000,就可以得到这个不正规的时间戳了,在构建的时候,在把这个时间戳转换成str()就可以了。

int(time.time()) * 1000

三、对网页发送请求,获取响应

    def parse_url(self, url):"""发送请求,获取响应数据的方法:param url::return:"""params = self.get_params()response = requests.get(url, headers=self.headers, params=params)if response.status_code == 200:return response.content.decode()

四、提取解析数据

    def get_data(self, data_str):"""提取基金数据的方法:param data_str::return:"""str_data = re.findall('var db=.*,datas:(.*),count:.*}', data_str, re.S)[0]data_list = eval(str_data)for data in data_list:yield {'基金代码': data[0],'基金简称': data[1],'单位净值': data[3],'累计净值': data[4],'日增长值': data[6],'日增长率': data[7],'手续费': data[17]}

这一步就是提取数据的时候,先把这些请求到的字符数据,使用正则表达式,提取出像列表一样的字符数据,然后转换成真正的列表数据,遍历这个列表数据,这个列表数据是一个,大列表里面包含了很多小列表,每一个小列表里面就是我们需要爬取的数据,我们通过索引取值的方法,把我们需要的数据给提取出来。

五、完整思路和保存数据

    def run(self):"""实现主要逻辑思路:return:"""with open('./jjData.csv', 'a', encoding='utf-8-sig', newline="") as csvfile:fieldnames = ['基金代码', '基金简称', '单位净值', '累计净值', '日增长值', '日增长率', '手续费']write_dict = csv.DictWriter(csvfile, fieldnames=fieldnames)write_dict.writeheader()# 1,发送请求,获取响应数据data_str = self.parse_url(self.API_URL)# 2,提取数据fund_data_list = self.get_data(data_str)for fund_data in fund_data_list:print(fund_data)# 3,保存数据write_dict.writerow(fund_data)

保存后的数据效果:

六、完整代码

# 导入需要的模块
import requests
import time
import csv
import reclass TtFundSpider:"""天天基金爬取"""def __init__(self, page):self.API_URL = 'http://fund.eastmoney.com/Data/Fund_JJJZ_Data.aspx'self.headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.104 Safari/537.36 FS'}self.TIMESTRF = int(time.time()) * 1000self.page = pagedef get_params(self):"""构建params参数的方法:return:"""params = {"t": "1","lx": "1","letter": "","gsid": "","text": "","sort": "zdf,desc","page": f"{str(self.page)},200","dt": str(self.TIMESTRF),"atfc": "","onlySale": "0",}return paramsdef parse_url(self, url):"""发送请求,获取响应数据的方法:param url::return:"""params = self.get_params()response = requests.get(url, headers=self.headers, params=params)if response.status_code == 200:return response.content.decode()def get_data(self, data_str):"""提取基金数据的方法:param data_str::return:"""str_data = re.findall('var db=.*,datas:(.*),count:.*}', data_str, re.S)[0]data_list = eval(str_data)for data in data_list:yield {'基金代码': data[0],'基金简称': data[1],'单位净值': data[3],'累计净值': data[4],'日增长值': data[6],'日增长率': data[7],'手续费': data[17]}def run(self):"""实现主要逻辑思路:return:"""with open('./jjData.csv', 'a', encoding='utf-8-sig', newline="") as csvfile:fieldnames = ['基金代码', '基金简称', '单位净值', '累计净值', '日增长值', '日增长率', '手续费']write_dict = csv.DictWriter(csvfile, fieldnames=fieldnames)write_dict.writeheader()# 发送请求,获取响应数据data_str = self.parse_url(self.API_URL)# 提取数据fund_data_list = self.get_data(data_str)for fund_data in fund_data_list:print(fund_data)# 保存数据write_dict.writerow(fund_data)if __name__ == '__main__':for page in range(1, 6):ttFund_spider = TtFundSpider(page)ttFund_spider.run()

Python爬取基金数据案例相关推荐

  1. 如何使用Python爬取基金数据,并可视化显示

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理 以下文章来源于Will的大食堂,作者打饭大叔 前言 美国疫情越来越严峻,大选也进入 ...

  2. 轻松入门Python爬取基金数据

    美国疫情越来越严峻,大选也进入了最后阶段,受之影响美股指数也在在下行中.最近的A股也在跟随美股没有什么起色,一直在动荡整理之中.玩股票基金的同学们,最近大家的仓位控制的怎么样?为了更好的科学分析基金, ...

  3. 钱袋子往哪走?教你用Python爬取基金数据

    年关将至,钱袋子往哪走? 有人买了定期存款,3年,年利率:3.987. 按存50w计算 0.0385 50万,3年息:6万,月息:1666.72元 0.039785 50万,3年息:6.21万,月息: ...

  4. 用python爬取基金网信息数据,保存到表格,并做成四种简单可视化。(爬虫之路,永无止境!)

    用python爬取基金网信息数据,保存到表格,并做成四种简单可视化.(爬虫之路,永无止境!) 上次 2021-07-07写的用python爬取腾讯招聘网岗位信息保存到表格,并做成简单可视化. 有的人留 ...

  5. python爬取微博数据词云_用Python爬取微博数据生成词云图片

    原标题:用Python爬取微博数据生成词云图片 欢迎关注天善智能 hellobi.com,我们是专注于商业智能BI,大数据,数据分析领域的垂直社区,学习.问答.求职,一站式搞定! 对商业智能BI.大数 ...

  6. 如何用python爬取网页数据,python爬取网页详细教程

    大家好,本文将围绕python怎么爬取网站所有网页展开说明,如何用python爬取网页数据是一个很多人都想弄明白的事情,想搞清楚python如何爬取网页数据需要先了解以下几个事情. 1.如何用Pyth ...

  7. python爬取网页公开数据_如何用Python爬取网页数据

    使用Python爬取网页数据的方法: 一.利用webbrowser.open()打开一个网站:>>> import webbrowser >>> webbrowse ...

  8. 编程python爬取网页数据教程_实例讲解Python爬取网页数据

    一.利用webbrowser.open()打开一个网站: >>> import webbrowser >>> webbrowser.open('http://i.f ...

  9. Python爬取天气数据及可视化分析!

    来源丨Python之王 Python爬取天气数据及可视化分析 说在前面 天气预报我们每天都会关注,我们可以根据未来的天气增减衣物.安排出行,每天的气温.风速风向.相对湿度.空气质量等成为关注的焦点.本 ...

最新文章

  1. archlinux安装TensorFlow带GPU
  2. 遗传算法对于神经网络的优生优育
  3. 关于移动手机端富文本编辑器qeditor图片上传改造
  4. python Binary I/O
  5. mysql数据库的操作dao vo_nutzdao+druid使用非数据库实体VO接收返回的对象一直报“Table ‘xxxxx’ doesn't exist”...
  6. Android 代码混淆 以及 反编译 的实现
  7. chrome腾讯视频网页版HTML5,谷歌浏览器无软件爬取腾讯视频源MP4视频
  8. UE4下载与存储图片
  9. jQuery入门教程
  10. 盘点机PDA搭配蓝牙便携打印机,条码标签打印,超市仓库条码管理,条码标签纸
  11. delphi 实现科学计数法
  12. 高中生都能看懂的卡方检验
  13. 字体反爬-起点网月票榜案例
  14. [Hadoop]Hadoop Archives
  15. 第一代程序员作家--王小波
  16. CentOS7安装教程,简单几步,小白也能上手装!
  17. 上班族妈妈的教子宝典:教你做事业成功的好妈妈
  18. asp.net ajax1.0基础回顾(二):经典模式
  19. linux fedora分区,Fedora32最新版本上月底公布 双系统安装分区教程(UEFI+GPT)
  20. 装配式成品支架技术要求解读

热门文章

  1. 使用dbeaver登录gp数据库出现驱动错误
  2. 前端页面的几种常用布局
  3. 动手搭建自己的web服务器
  4. 数据库学习之MySQL (九)—— 数学函数 字符串函数 CONCAT TRIM PAD
  5. 【黑盒测试】场景法和错误推断法
  6. 给input[text]添加icon,并且绑定事件
  7. 信号处理-Chirp-Z变换
  8. Mac解决端口号被占用
  9. html表单边框怎么加颜色?html form标签的边框颜色实例
  10. 解决办法 Field userService in com.sxsj.controller.RegistLoginController required a bean of type