[原创][爬虫学习·一]爬取天天基金网的基金收益排行信息

最近在学习爬虫,实验了几个简单的小demo,记录一二。

首先我们打开天天基金网的基金收益排行页面,了解一下要爬取的页面,网址和截图如下:

http://fund.eastmoney.com/trade/hh.html?spm=001.1.swh#zwf_,sc_1n,st_desc


现在要爬取该页面下所有基金的代码、名称、日增长率、近一周和近一月的增长率(也就是红框内的内容),并保存在Excel文件中。思路如下,

(1)设置Excel文件的格式。

1)引入xlwt工具

import xlwt

2)添加FundSheet页,并设置Excel文件的表头,用的是worksheet.write(row,col,label)方法,row为excel表的行,col为列,label是表格内容。

workbook = xlwt.Workbook(encoding ='utf-8')
worksheet = workbook.add_sheet('FundSheet')
worksheet.write(0, 0, label='基金代码')
worksheet.write(0, 1, label='基金名称')
worksheet.write(0, 2, label='日增长率')
worksheet.write(0, 3, label='周增长率')
worksheet.write(0, 4, label='月增长率')

这几行代码的设置效果如下:


(2)分析页面和爬取网站内容。

选取Selenium爬取工具,模拟浏览器对该网址发出请求。如果没有安装该工具,通过在cmd中执行

pip install selenium

安装selenium,并在python文件中通过

from selenium import webdriver

引入webdriver。之后需要下载chromedriver.exe,在Chrome浏览器中,输入chrome://version/,查看版本。


下载对应的驱动:

http://chromedriver.storage.googleapis.com/index.html

将下载好的chromedriver.exe放置在合适的路径,如:

D:\anaconda\Lib\site-packages\selenium\webdriver\chrome\chromedriver.exe

之后通过co.headless=False语句,设置在可视化的界面下调试,如果设置为True,爬虫运行时就看不到浏览器界面了。

声明chromedriver.exe的启动路径(上一步设置的路径)和基金排行的url。使用browser对象的get方法打开url。

co = webdriver.ChromeOptions()
#是否有浏览界面,False:有;True:无
co.headless = False
#chrome_driver路径
chrome_driver = r'D:\anaconda\Lib\site-packages\selenium\webdriver\chrome\chromedriver.exe'
browser = webdriver.Chrome(executable_path=chrome_driver, options=co)
#基金排行的url
url = 'http://fund.eastmoney.com/trade/hh.html?spm=001.1.swh#zwf_,sc_1n,st_desc'
browser.get(url)

在弹出的浏览器界面,打开F12开发者工具,如下:


观察可知,所有基金的信息,都位于类名为mainTb的table标签中,且每一栏基金的信息由table标签下属的tbody标签下的一个tr标签描述,而日、月、周增长率信息,则由tr标签下的td标签描述。层级关系为:

<table><tbody><tr><!- 基金1 -><td><!- 基金1的日增长率 -></td><td><!- 基金1的周增长率 -></td>...</tr><tr><!- 基金2 -><td><!- 基金2的日增长率 -></td><td><!- 基金2的周增长率 -></td>...</tr>...    </tbody>
</table>

我们注意到,基金的日、周、月增长率的数据,分别为tr标签下的第4、5、6个td标签,因此,需要用CSS选择器对其进行选择,语法为

'p:nth-child(n)'

其中p为标签名称,n为第几个p标签。如选择第四个td标签,在Python中就可以写为:

day_increase = fund.find_element_by_css_selector('td:nth-child(4)')

总之,写出爬虫代码如下:

mainTb = browser.find_element_by_class_name('mainTb')
tbody = mainTb.find_element_by_tag_name('tbody')
funds = tbody.find_elements_by_tag_name('tr')
#excel文件的行
row = 1
#excel文件的列
col = 0
for fund in funds:fund_code = fund.find_element_by_tag_name('td')fund_name = fund.find_element_by_class_name('fname')a_fund_name = fund_name.find_element_by_tag_name('a')#通过CSS样式选择器选择第n个td标签day_increase = fund.find_element_by_css_selector('td:nth-child(4)')week_increase = fund.find_element_by_css_selector('td:nth-child(5)')month_increase = fund.find_element_by_css_selector('td:nth-child(6)')worksheet.write(row, col, label=fund_code.text)worksheet.write(row, col+1, label=a_fund_name.text)worksheet.write(row, col+2, label=day_increase.text)worksheet.write(row, col+3, label=week_increase.text)worksheet.write(row, col+4, label=month_increase.text)row += 1
workbook.save('Fund_Excel_test.xls')

解释一下,通过browser的寻找类名方法,找到类名为mainTb的table元素,再找到该table元素下的tbody标签,之后找到tbody标签下的tr标签集合,注意find_elements和find_element的区别。

之后解析集合中的每一个fund信息,找到基金的代码、名称和增长率,将这些信息写入Excel文件,最后保存。

爬取完成后,在项目目录下就生成了Fund_Excel_test.xls文件,打开该Excel文件,内容如下:

爬取成功!

demo的完整代码如下:

import xlwt
from selenium import webdriver
workbook = xlwt.Workbook(encoding ='utf-8')
worksheet = workbook.add_sheet('FundSheet')
worksheet.write(0, 0, label='基金代码')
worksheet.write(0, 1, label='基金名称')
worksheet.write(0, 2, label='日增长率')
worksheet.write(0, 3, label='周增长率')
worksheet.write(0, 4, label='月增长率')
co = webdriver.ChromeOptions()
#是否有浏览界面,False:有;True:无
co.headless = False
#chrome_driver路径
chrome_driver = r'D:\anaconda\Lib\site-packages\selenium\webdriver\chrome\chromedriver.exe'
browser = webdriver.Chrome(executable_path=chrome_driver, options=co)
#基金排行的url
url = 'http://fund.eastmoney.com/trade/hh.html?spm=001.1.swh#zwf_,sc_1n,st_desc'
browser.get(url)
mainTb = browser.find_element_by_class_name('mainTb')
tbody = mainTb.find_element_by_tag_name('tbody')
funds = tbody.find_elements_by_tag_name('tr')
#excel文件的行
row = 1
#excel文件的列
col = 0
for fund in funds:fund_code = fund.find_element_by_tag_name('td')fund_name = fund.find_element_by_class_name('fname')a_fund_name = fund_name.find_element_by_tag_name('a')#通过CSS样式选择器选择第n个td标签day_increase = fund.find_element_by_css_selector('td:nth-child(4)')week_increase = fund.find_element_by_css_selector('td:nth-child(5)')month_increase = fund.find_element_by_css_selector('td:nth-child(6)')worksheet.write(row, col, label=fund_code.text)worksheet.write(row, col+1, label=a_fund_name.text)worksheet.write(row, col+2, label=day_increase.text)worksheet.write(row, col+3, label=week_increase.text)worksheet.write(row, col+4, label=month_increase.text)row += 1
workbook.save('Fund_Excel_test.xls')

[原创][爬虫学习·一]爬取天天基金网的基金收益排行信息相关推荐

  1. Python爬虫学习笔记 -- 爬取糗事百科

    Python爬虫学习笔记 -- 爬取糗事百科 代码存放地址: https://github.com/xyls2011/python/tree/master/qiushibaike 爬取网址:https ...

  2. Python爬虫学习之爬取淘宝搜索图片

    Python爬虫学习之爬取淘宝搜索图片 准备工作 因为淘宝的反爬机制导致Scrapy不能使用,所以我这里是使用selenium来获取网页信息,并且通过lxml框架来提取信息. selenium.lxm ...

  3. Python爬虫入门 | 5 爬取小猪短租租房信息

    小猪短租是一个租房网站,上面有很多优质的民宿出租信息,下面我们以成都地区的租房信息为例,来尝试爬取这些数据. 小猪短租(成都)页面:http://cd.xiaozhu.com/   1.爬取租房标题 ...

  4. python抓取文献关键信息,python爬虫——使用selenium爬取知网文献相关信息

    python爬虫--使用selenium爬取知网文献相关信息 写在前面: 本文章限于交流讨论,请不要使用文章的代码去攻击别人的服务器 如侵权联系作者删除 文中的错误已经修改过来了,谢谢各位爬友指出错误 ...

  5. 笨方法学 python3 豆瓣_python3 爬虫学习:爬取豆瓣读书Top250(一)

    本节课,我们试着来写一个基础的爬虫,来爬取一下豆瓣读书top250的内容:主要涉及的知识就是我们之前讲过的requests库. 网页分析 我们先选取一个待会准备爬取的网站,咱们选个较好爬的网页,豆瓣读 ...

  6. 为了部落 来自艾泽拉斯勇士的python爬虫学习心得 爬取大众点评上的各种美食数据并进行数据分析

    为了希尔瓦娜斯 第一个爬虫程序 csgo枪械数据 先上代码 基本思想 问题1 问题2 爬取大众点评 URL分析 第一个难题 生成csv文件以及pandas库 matplotlib.pyplot库 K- ...

  7. Python爬虫练习(爬取OJ题目和学校信息通知)

    爬取OJ题目和学校信息通知 一.爬取南阳理工OJ题目 1. 初步分析 2. 代码编写 二.爬取学校信息通知 1. 每页url分析 2. 每页内容爬取 总代码 三.总结 参考 一.爬取南阳理工OJ题目 ...

  8. Python爬虫使用selenium爬取qq群的成员信息(全自动实现自动登陆)

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: python小爬虫 PS:如有需要Python学习资料的小伙伴可以 ...

  9. 【爬虫】Scrapy爬取腾讯社招信息

    目标任务:爬取腾讯社招信息,需要爬取的内容为:职位名称,职位的详情链接,职位类别,招聘人数,工作地点,发布时间. 一.预备基础 1.Scrapy简介 Scrapy是用纯Python实现一个为了爬取网站 ...

  10. python爬取网上租房信息_Python爬虫入门 | 5 爬取小猪短租租房信息

    小猪短租是一个租房网站,上面有很多优质的民宿出租信息,下面我们以成都地区的租房信息为例,来尝试爬取这些数据. 1.爬取租房标题 按照惯例,先来爬下标题试试水,找到标题,复制xpath. 多复制几个房屋 ...

最新文章

  1. CUDA C++程序设计模型
  2. 微信小程序进度条样式_微信小程序组件progress进度条解读和分析
  3. 数据结构c语言函数大全,数据结构习题库(c语言版).doc
  4. Android中开发习惯
  5. ABAP:区别CALL SCREEN/SET SCREEN/LEAVE TO SCREEN
  6. 数据库和ORMS:使用SQLAlchemy与数据库通信
  7. php获取字符串长度函数strlen和mb_strlen
  8. DataSet 添加数据集、行、列、主键和外键等操作示例
  9. unity算法面试_Unity面试准备
  10. 计算机科学与技术和软件工程区别
  11. java号码池_Java常量池详解
  12. qt实现涂鸦板_Qt涂鸦板程序图文详细教程
  13. 微机大作业—— 24秒倒计时器
  14. 摄影场景拍摄方法笔记
  15. 【CAD二次开发】-ObjectARX-双击实体的响应 (AcDbDoubleClickEdit)
  16. 美国顶尖大学特别的感恩节传统……
  17. windows7 系统下载
  18. 论文导读:Deep Attentive Learning for Stock Movement Prediction From Social Media Text and Company Correl
  19. 探讨魔兽dota改建原理
  20. C语言实现cuckoo hash

热门文章

  1. win10解决无法远程桌面连接问题(参考)
  2. R语言基于visreg 包COX回归和连续变量交互效应(交互作用)的可视化分析
  3. java 生成水印_Java生成文字水印
  4. Excel提升(一)-----如何做经济学人风格的图表
  5. 2018最新版省市区三级联动数据
  6. DSP CCS12.00 芯片:TMS320F28335 外部中断 XINT1, 和映射区域的 k1 -- k4 按键的功能实现
  7. PS薄纱飘带字体制作
  8. 论文翻译:(BMVC 2022)You Only Need 90K Parameters to Adapt Light:a Light Weight Transformer
  9. 视频 码率控制类型和内涵
  10. 关于开发板不断eth0: link up, 100Mbps, full-duplex, lpa 0x45E1 eth0: link down的问题