[原创][爬虫学习·一]爬取天天基金网的基金收益排行信息
[原创][爬虫学习·一]爬取天天基金网的基金收益排行信息
最近在学习爬虫,实验了几个简单的小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')
[原创][爬虫学习·一]爬取天天基金网的基金收益排行信息相关推荐
- Python爬虫学习笔记 -- 爬取糗事百科
Python爬虫学习笔记 -- 爬取糗事百科 代码存放地址: https://github.com/xyls2011/python/tree/master/qiushibaike 爬取网址:https ...
- Python爬虫学习之爬取淘宝搜索图片
Python爬虫学习之爬取淘宝搜索图片 准备工作 因为淘宝的反爬机制导致Scrapy不能使用,所以我这里是使用selenium来获取网页信息,并且通过lxml框架来提取信息. selenium.lxm ...
- Python爬虫入门 | 5 爬取小猪短租租房信息
小猪短租是一个租房网站,上面有很多优质的民宿出租信息,下面我们以成都地区的租房信息为例,来尝试爬取这些数据. 小猪短租(成都)页面:http://cd.xiaozhu.com/ 1.爬取租房标题 ...
- python抓取文献关键信息,python爬虫——使用selenium爬取知网文献相关信息
python爬虫--使用selenium爬取知网文献相关信息 写在前面: 本文章限于交流讨论,请不要使用文章的代码去攻击别人的服务器 如侵权联系作者删除 文中的错误已经修改过来了,谢谢各位爬友指出错误 ...
- 笨方法学 python3 豆瓣_python3 爬虫学习:爬取豆瓣读书Top250(一)
本节课,我们试着来写一个基础的爬虫,来爬取一下豆瓣读书top250的内容:主要涉及的知识就是我们之前讲过的requests库. 网页分析 我们先选取一个待会准备爬取的网站,咱们选个较好爬的网页,豆瓣读 ...
- 为了部落 来自艾泽拉斯勇士的python爬虫学习心得 爬取大众点评上的各种美食数据并进行数据分析
为了希尔瓦娜斯 第一个爬虫程序 csgo枪械数据 先上代码 基本思想 问题1 问题2 爬取大众点评 URL分析 第一个难题 生成csv文件以及pandas库 matplotlib.pyplot库 K- ...
- Python爬虫练习(爬取OJ题目和学校信息通知)
爬取OJ题目和学校信息通知 一.爬取南阳理工OJ题目 1. 初步分析 2. 代码编写 二.爬取学校信息通知 1. 每页url分析 2. 每页内容爬取 总代码 三.总结 参考 一.爬取南阳理工OJ题目 ...
- Python爬虫使用selenium爬取qq群的成员信息(全自动实现自动登陆)
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: python小爬虫 PS:如有需要Python学习资料的小伙伴可以 ...
- 【爬虫】Scrapy爬取腾讯社招信息
目标任务:爬取腾讯社招信息,需要爬取的内容为:职位名称,职位的详情链接,职位类别,招聘人数,工作地点,发布时间. 一.预备基础 1.Scrapy简介 Scrapy是用纯Python实现一个为了爬取网站 ...
- python爬取网上租房信息_Python爬虫入门 | 5 爬取小猪短租租房信息
小猪短租是一个租房网站,上面有很多优质的民宿出租信息,下面我们以成都地区的租房信息为例,来尝试爬取这些数据. 1.爬取租房标题 按照惯例,先来爬下标题试试水,找到标题,复制xpath. 多复制几个房屋 ...
最新文章
- CUDA C++程序设计模型
- 微信小程序进度条样式_微信小程序组件progress进度条解读和分析
- 数据结构c语言函数大全,数据结构习题库(c语言版).doc
- Android中开发习惯
- ABAP:区别CALL SCREEN/SET SCREEN/LEAVE TO SCREEN
- 数据库和ORMS:使用SQLAlchemy与数据库通信
- php获取字符串长度函数strlen和mb_strlen
- DataSet 添加数据集、行、列、主键和外键等操作示例
- unity算法面试_Unity面试准备
- 计算机科学与技术和软件工程区别
- java号码池_Java常量池详解
- qt实现涂鸦板_Qt涂鸦板程序图文详细教程
- 微机大作业—— 24秒倒计时器
- 摄影场景拍摄方法笔记
- 【CAD二次开发】-ObjectARX-双击实体的响应 (AcDbDoubleClickEdit)
- 美国顶尖大学特别的感恩节传统……
- windows7 系统下载
- 论文导读:Deep Attentive Learning for Stock Movement Prediction From Social Media Text and Company Correl
- 探讨魔兽dota改建原理
- C语言实现cuckoo hash
热门文章
- win10解决无法远程桌面连接问题(参考)
- R语言基于visreg 包COX回归和连续变量交互效应(交互作用)的可视化分析
- java 生成水印_Java生成文字水印
- Excel提升(一)-----如何做经济学人风格的图表
- 2018最新版省市区三级联动数据
- DSP CCS12.00 芯片:TMS320F28335 外部中断 XINT1, 和映射区域的 k1 -- k4 按键的功能实现
- PS薄纱飘带字体制作
- 论文翻译:(BMVC 2022)You Only Need 90K Parameters to Adapt Light:a Light Weight Transformer
- 视频 码率控制类型和内涵
- 关于开发板不断eth0: link up, 100Mbps, full-duplex, lpa 0x45E1 eth0: link down的问题