Python爬虫爬取天天基金

爬取天天基金网站获取单位净值,日增长率等等。

web爬虫初学者,不足之处,请多多指教

最初思路:使用requests+etree解析获取其数据信息,但最终未能得到所需的数据,求教了许多人,才知道问题是出在哪里。
此图片是爬取下来的html文本

此图片是通过访问浏览器检查到的HTML文本

很明显看出的是,如果用requests爬取的界面,获取数据的部分是动态加载的,所以就造成了爬取不到数据,xpath解析为空的情况。

使用selenium爬取动态页面

通过selenium模拟浏览器动作,从而获取到包含数据的源码html文本,再通过xpath解析我们所要的内容,此后在进行数据处理,最终成功爬取。

在selenium爬取模拟点击动作时,发现了个很有意思的事情:
模拟点击的时候,发现了两个节点,原因是客服精灵的位置与要点击的地方重合了。最终还是通过获取该标签<‘点击查询全部基金净值’>的href属性,然后通过访问该网址进行后续操作。

最后贴上我的代码:

from selenium import webdriver
import time
url = 'https://fund.eastmoney.com/'
#无浏览器界面化
options = webdriver.ChromeOptions()
options.add_argument('--headless')
brower = webdriver.Chrome(options=options)
brower.get(url)data = brower.find_element_by_xpath('//*[@id="jjjz"]/div[4]/table/tfoot/tr/td/a')data_information = data.get_attribute('href')
time.sleep(2)
brower.get(data_information)
table_data = {}
#find_element寻找第一个 find_elements寻找所有的
for i in range(int(brower.find_element_by_xpath('//*[@id="pager"]/span[9]').text[1:-1])):tags = brower.find_elements_by_xpath('//*[@id="oTable"]/tbody/tr')with open("CompanyUrl{}.txt".format(i+1),'w') as f:for i in tags:name = i.find_element_by_xpath('./td[5]/nobr/a[1]').textnum = i.find_element_by_xpath('./td[5]/nobr/a[1]').get_attribute('href')num = num[:-5]f.write(name+'\t'+num+'\n')table_data[name] = 'http://fundf10.eastmoney.com/jjjz_{}.html'.format(num[-6:])brower.find_element_by_xpath('//*[@id="pager"]/span[8]').click()time.sleep(5)with open('Url.txt','a')as f:for i in table_data.values():f.write(i+'\n')time.sleep(5)
brower.close()

第一步获取包含不同基金的代码的url,代码是由六位数字组成。

from selenium import webdriver
# from selenium.webdriver.support.ui import WebDriverWait
# from selenium.webdriver.common.by import By
# from selenium.webdriver.support import expected_conditions as EC
import pandas as pd
from matplotlib import pyplot as plt
from matplotlib import font_manager
import timedef getdata(url):brower.get(url)next_page = 1# 获取文件名table_name = brower.find_element_by_xpath('//*[@id="jzpng"]').get_attribute('alt')[:-4]#获取总页数 all_page = int(brower.find_element_by_xpath('//*[@id="pagebar"]/div[1]/label[7]').text)tables = brower.find_element_by_xpath('//div[@class="txt_in"]/div[2]/div/div[2]')line_menu = [i  for j in tables.text.split('\n') for i in j.split(" ")][:6]line_data = []while(next_page < 6):tables = brower.find_elements_by_xpath('//div[@class="txt_in"]/div[2]/div/div[2]//tbody/tr')for table in tables:for i in table.find_elements_by_xpath('./td')[:6]:# print(i.text)line_data.append(i.text)   next_page += 1time.sleep(10)brower.find_element_by_xpath('//*[@id="pagebar"]/div[1]/label[@value="{}"][2]'.format(next_page)).click()# button.click()time.sleep(2)# brower.close()#数据处理df = pd.DataFrame()for i in line_menu:df[i] = pd.Series(dtype='float64')for i in range((len(line_data))//6):df = df.append(pd.Series(line_data[i*6:i*6+6],index=line_menu),ignore_index=True)b = [i[:-1] for i in df['日增长率']]numn = len(b)df['日增长率'] = pd.Series([float(a)*0.01 if a!='-' else 0 for a in b])data = []for i in df['日增长率'][:numn]:if i>0:j = 1elif i == 0:j = 0else:j = -1data.append(j)df["持续天数"] = pd.Series(data)lists = []data = []sume = 0# print(df['净值日期'])for i in range(numn):if df["持续天数"][numn-i-1] == 1:sume +=1elif df["持续天数"][numn-i-1] == 0:sume = sumeelse:sume -=1lists.append(sume)tim = str(df['净值日期'][numn-i-1]).split(' ')[0].split('-')# print(tim)data.append(tim[1]+"-"+tim[2])# print(df,lists,numn,data,table_name)return df,lists,numn,data,table_namedef drawpict(url):df,lists,numn,data,table_name = getdata(url)my_font = font_manager.FontProperties(fname=r"c:\windows\fonts\simsun.ttc", size=15)plt.figure(figsize=(18,9))#处理连续增长天数plt.plot(range(numn),lists,label=u"增长天数")plt.plot(range(numn),df['日增长率'][numn-1::-1]*100,label=u"日增长率")d_start,d_end = str(df['净值日期'][numn-1])[:10],str(df['净值日期'][0])[:10]plt.title(table_name+u"\n(近{0}天){1} --- {2}".format(numn,d_start,d_end),fontproperties=my_font)plt.grid(alpha=0.8,ls="-.")plt.xticks(range(numn),[data[i] if i%3 == 0 else '' for i in range(numn)],rotation=45)miny = int(min(min(lists),min(df['日增长率'][numn-1::-1]*100)))maxy = int(max(max(lists),max(df['日增长率'][numn-1::-1]*100)))plt.yticks(range(miny-1,maxy+1,1))plt.axhline(c='red')plt.xlabel(u"日期",fontproperties=my_font)plt.ylabel(u"增长天数/日增长率",fontproperties=my_font)plt.legend(loc='upper left',fontsize='x-large')plt.savefig(table_name+"增长天数日增长率(近{}天).png".format(numn))if __name__ == '__main__':plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签plt.rcParams['axes.unicode_minus']=False #用来正常显示负号options = webdriver.ChromeOptions()options.add_argument('--headless')brower = webdriver.Chrome(options=options)# brower = webdriver.Chrome()with open('Url.txt','r') as f:lines = f.readlines()for line in lines:print(line)try:drawpict(line)except IOError:print('IOError')else:print('Else Error!!!!!!')

第二步,获取数据,处理画图。
需要注意的一点就是,不能在循环处理过程中brower.close(),当程序爬取完数据之后方可关掉。

Python爬虫爬取天天基金网相关推荐

  1. 在当当买了python怎么下载源代码-python爬虫爬取当当网

    [实例简介]python爬虫爬取当当网 [实例截图] [核心代码] ''' Function: 当当网图书爬虫 Author: Charles 微信公众号: Charles的皮卡丘 ''' impor ...

  2. python爬虫代码实例-Python爬虫爬取百度搜索内容代码实例

    这篇文章主要介绍了Python爬虫爬取百度搜索内容代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 搜索引擎用的很频繁,现在利用Python爬 ...

  3. python爬虫数据分析可以做什么-python爬虫爬取的数据可以做什么

    在Python中连接到多播服务器问题,怎么解决你把redirect关闭就可以了.在send时,加上参数allow_redirects=False 通常每个浏览器都会设置redirect的次数.如果re ...

  4. python爬虫爬取csdn博客专家所有博客内容

    python爬虫爬取csdn博客专家所有博客内容: 全部过程采取自动识别与抓取,抓取结果是将一个博主的所有 文章存放在以其名字命名的文件内,代码如下 #coding:utf-8import urlli ...

  5. python网易云_用python爬虫爬取网易云音乐

    标签: 使用python爬虫爬取网易云音乐 需要使用的模块 只需要requests模块和os模块即可 开始工作 先去网易云音乐网页版找一下你想要听的歌曲点击进去.按键盘F12打开网页调试工具,点击Ne ...

  6. 使用Python爬虫爬取网络美女图片

    代码地址如下: http://www.demodashi.com/demo/13500.html 准备工作 安装python3.6 略 安装requests库(用于请求静态页面) pip instal ...

  7. python如何爬取网站所有目录_用python爬虫爬取网站的章节目录及其网址

    认识爬虫 网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本.另外一些不常使用的名字还有蚂蚁.自动索引.模拟 ...

  8. 运用Python爬虫爬取一个美女网址,爬取美女图

    运用Python爬虫爬取一个美女网址,爬取美女图 要运用到的python技术: 导入库 1.request 发送请求,从服务器获取数据 2.BeautifulSoup 用来解析整个网页的源代码 imp ...

  9. Python爬虫|爬取喜马拉雅音频

    "GOOD Python爬虫|爬取喜马拉雅音频 喜马拉雅是知名的专业的音频分享平台,用户规模突破4.8亿,汇集了有声小说,有声读物,儿童睡前故事,相声小品等数亿条音频,成为国内发展最快.规模 ...

最新文章

  1. b temia 外骨骼机器人_只能提高工作效率?现代外骨骼正在突破重重壁垒,走向融合的未来...
  2. android系统属性获取及设置
  3. easyexcel中的常用注解
  4. 科大星云诗社动态20210824
  5. 库函数、系统调用和内核函数的区别
  6. CentOS、Ubuntu、Gentoo
  7. Linux如何查看所有用户和用户组信息(cat groups whoami)
  8. 城市发展规律及未来走向进行认知与预测的机构
  9. Angular进阶教程一
  10. Codejock Xtreme MFC 图形界面控件包
  11. 黑站利器-中国菜刀的功能介绍和使用方法
  12. linux文件传输阻塞了,Linux 中的read系统调用到底是阻塞还是非阻
  13. Svn分支管理的使用(三)
  14. 学习数据库(1)——初始数据库
  15. ES9218PC SABRE HiFi 移动 DAC 便携式耳放
  16. 学Java编程数学一定要很好吗?
  17. 那些值得我们用心体会的惊艳歌词
  18. 【AAC 系列一】Android 应用架构新时代来临!
  19. 已知ip地址和其子网掩码如何求网络号子网号主机号
  20. win10雷电3接口驱动_[九猫win10系统]Intel处理器福利普及雷电3接口:微软/苹果强烈支...

热门文章

  1. 只有干过才知道:一位来自滴滴、字节的两年程序员自诉
  2. 龙族幻想最新东京机器人位置_龙族幻想凌晨四点的东京机器人位置在哪?
  3. 2023年网络安全专家都在用的学习资料笔记,收藏这个就够了!
  4. Python在线聊天
  5. 仿真4. 仿真平台架构设计
  6. 【Springboot系列】Springboot接管所有Controller,magic-api源码阅读
  7. oracle 导入导出dum文件
  8. 【cf】Codeforces 题解等汇总
  9. 定时器(脚本定时执行)
  10. 【HDU 6217 2017ACM/ICPC亚洲区沈阳站】BBP Formula