Selenimu做爬虫续
前面曾写过一篇Selenimu做爬虫的文章,大概只说了些如何爬取信息,这篇文章主要接着来说下比较具体的用途。
假设你是某个财经网站的质量人员,上头很想知道自己网站的数据是否正确,(这里插一句,做财经的应该知道,例如国内股票的原始数据都是从上证或深证来的,之后有很多的数据提供商从2大交易所购买数据,这个不是一般公司可以做到的,看看level-2和超赢等卖得那么红火就知道了,国外的blomberg也类似。),那么就需要提供一个dashboard来展示自己的数据和其他同行(多数是竞争对手啦)的数据,这样直观且方便跟踪,同时对其他人也有说服力。
我了解下来,很多都是通过人工采样的方式来对比,比如建个excel表把自己和其他网站数据填充,这个做法费时又费力,其实selenium可以帮助我们提高效率。
大致的思路如下:
1. 获取交易所信息及股票代码
在Selenimu做爬虫已经介绍过,找某个网站股票综合页面,例如新浪就能获取到某交易所的股票代码,并抓取下来,当然,如果自己后台数据库有这个数据,那就更好了。
2. 创建一个CrawlSettings.py文件,用来存取比较网站的信息,如网站名称、URL、财经指标的xpath,示例如下,
![](/assets/blank.gif)
![](/assets/blank.gif)
2 # -*- coding: utf8 -*-
3
4 import codecs
5
6 PageProfiles = (
7 {
8 " Name " : " sina " ,
9 " Link " : {
10 " sz " : " http://finance.sina.com.cn/realstock/company/sz%s/nc.shtml " ,
11 " sh " : " http://finance.sina.com.cn/realstock/company/sh%s/nc.shtml " ,
12 },
13 " Pattern " : {
14 " PriceClose " : " //span[@id='itemPrevious2'] " ,
15 " QuoteLast " : " //h3[@id='itemCurrent'] " ,
16 " BookValuePerShareYear " : " //td[@id='cwjk_mgjzc'] " ,
17 " EPS " : " //td[@id='cwjk_mgsy'] " ,
18 " MarketCap " : " //span[@id='totalMart2'] " ,
19 " PE " : " //td[@id='pe_ratio_lyr'] " ,
20 " Float " : " //div[@id='con04-0']/table/tbody/tr[4]/td[2] " ,
21 " CashPerShareYear " : " //div[@id='con04-0']/table/tbody/tr[2]/td[1] " ,
22 " Volume " : " //span[@id='itemVolume2'] " ,
23 },
24 " PostProcess " : {
25 " all " : {
26 " RemoveString " : [r " , " , r " % " , r " 元 " ]
27 },
28 },
29 ...
30 )
31
32 SiteProfiles = {
33 " sina " : {
34 " BaseLink " : " http://finance.sina.com.cn " ,
35 " PageProfileNames " : [ " sina " , " sina_DPSRecentYear " , " sina_other " ]
36 },
37 ...
38 }
39
40 CrawlProfiles = {
41 " test " : {
42 " Sites " : [ " baidu " , " sina " , " yahoo " ],
43 " Criteria " : [ " Float " , " PE " , " MarketCap " , " EPS " , " PriceClose " , " QuoteLast " , " BookValuePerShareYear " ,
44 " CurrentRatioYear " , " NetProfitMarginPercent " , " GrossMargin " , " CashPerShareYear " ,
45 " DPSRecentYear " , " High52Week " , " Low52Week " , " Volume " ],
46 " TickerListFile " : " tickerList.txt " ,
47 " ResultFiles " : " result_%s.txt " ,
48 " NumTickerPerSite " : " 20 "
49 },
50 ...
51 }
52
53 ExchangesProfiles = {
54 " HongKong " : " HKG " ,
55 " UK " : " LON " ,
56 " Canada " :[ " CVE " , " TSE " ],
57 " France " : " EPA " ,
58 " Italy " :[ " ISE " , " BIT " ],
59 " TaiWan " : " TPE " ,
60 # "China Mainland":["SHA","SHE"],
61 ...
62 }
63
64 class CrawlSettings:
65
66 def GetCrawlProfile(self, name):
67 if name in CrawlProfiles:
68 return CrawlProfiles[name]
69 return None
70
71 def GetSiteProfile(self, name):
72 if name in SiteProfiles:
73 return SiteProfiles[name]
74 return None
75
76 def GetPageProfile(self, name):
77 for prof in PageProfiles:
78 if prof[ " Name " ] == name:
79 return prof
80 return None
81
82 def LoadTickerList(self, filename):
83 f = codecs.open(filename, ' r ' , ' utf-8 ' )
84 list = []
85 for line in f:
86 list.append(line.strip())
87
88 f.close()
89 return list
90
91 def GetStockType(self, ticker):
92 if str(ticker)[0] == ' 0 ' or str(ticker)[0] == ' 2 ' :
93 return " sz "
94 elif str(ticker)[0] == ' 6 ' or str(ticker)[0] == ' 9 ' :
95 return " sh "
96 else :
97 return " all "
3. 爬取页面数据,FinanceAutomationCrawler.py;参考Selenimu做爬虫
4. 比较和保存数据,FinanceAutomationResult.py
![](/assets/blank.gif)
![](/assets/blank.gif)
2 # -*- coding: utf8 -*-
3
4 import sys
5 import codecs
6
7
8 class FinanceAutomationResult:
9 # ## Save / Load / Generate the result comparison ###
10
11 def SaveAsSiteResults(self, results, siteList, criteriaList, tickerList, fileName):
12 # ## results[site][criteria][ticker]
13 # ## Save as "result_site.txt":
14 # ## ticker criteria1 criteria2 ..
15 # ## ticker1 1 2
16 # ## ticker2 1 2
17 # ##
18 for site in siteList:
19 ...
20
21 def SaveAsCriteriaResults(self, results, siteList, criteriaList, tickerList, fileName):
22 # ## results[site][criteria][ticker]
23 # ## Save as "result_criteria.txt":
24 # ## ticker site1 site2 ..
25 # ## ticker1 1 2
26 # ## ticker2 1 2
27 # ##
28 for criteria in criteriaList:
29 ...
30
31 def CompareResult(self, results, siteList,criteriaList, tickerList):
32
33 for criteria in criteriaList:
34 ...
好了,废话不多说,大概的思路如下图:
最后祝大家清明节快乐!
Selenimu做爬虫续相关推荐
- Selenimu做爬虫 - oscarxie - 博客园
Selenimu做爬虫 - oscarxie - 博客园 Selenimu做爬虫 前面有介绍过Selenium作为开源的自动化测试框架,其实Selenium还可以作为爬虫工具. 举个例子,我想爬取中国 ...
- php和python写爬虫-为什么选择用python做爬虫
什么是网络爬虫? 网络爬虫是一个自动提取网页的程序,它为搜索引擎从万维网上下载网页,是搜索引擎的重要组成.传统爬虫从一个或若干初始网页的URL开始,获得初始网页上的URL,在抓取网页的过程中,不断从当 ...
- python的爬虫库_python做爬虫常用库
python做爬虫常用库 一.总结 一句话总结: urllib:一系列用于操作URL的功能. requests:基于 urllib 编写的,阻塞式 HTTP 请求库,发出一个请求,一直等待服务器响应后 ...
- 爬虫python下载视频_用python做爬虫下载视频
用python有一段时间了,对python是十二分喜爱,在我看来python是个好工具,可以轻松简洁的帮我完成一些我想要完成的工作.下面和大家分享一下我用python爬取某网站视频的案例.用pytho ...
- 爬虫python能做什么-Python除了能做爬虫之外还能做什么?
原标题:Python除了能做爬虫之外还能做什么? 1.web开发python拥有非常完善的与web服务器进行交互的库,以及大量的免费的前端网页模板.更具优势的是,有非常优秀且成熟的Django Web ...
- python做爬虫 怎么样效率最高_公认8个效率最高的爬虫框架
一些较为高效的Python爬虫框架.分享给大家. 1.Scrapy Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中 ...
- 为什么网上Python爬虫教程这么多,但是做爬虫的这么少呢?爬虫发展又该是如何呢?
1.很多人一上来就要爬虫,其实没有弄明白要用爬虫做什么,最后学完了却用不上. 大多数人其实是不需要去学习爬虫的,因为工作所在的公司里有自己的数据库,里面就有数据来帮助你完成业务分析 什么时候要用到爬虫 ...
- 不仅仅可以用来做爬虫,Puppeteer 还可以干这个!
Python 自动化测试工具大家可能知道 Pyppeteer,其实它就是 Puppeteer 的 Python 版本的实现,二者功能类似.但其实 Puppeteer 和 Pyppeteer 不仅仅可以 ...
- 深圳java培训:Java也能做爬虫。
深圳java培训:Java也能做爬虫. 现在提到爬虫人第一个想到的就是python,其实使用Java编写爬虫也是很好的选择, 下面给大家展示一个使用Java基础语言编写的爬取小说的案例: 实现功能: ...
最新文章
- Silverlight中服务通信方式的选择(WCF、Data Service、Ria Service)
- 修改了系统时间后,myeclipse 和tomcat下的代码不同步了
- 【转】C++中#include包含头文件带 .h 和不带 .h 的区别
- expdp导出表结构_(转)oracle使用expdp、impdp和exp、imp导入导出表及表结构
- 回炉Spring--事务及Spring源码
- 像素级复制!荣威R品牌“撞车”小鹏P7剪刀门,还是手动的?
- vue-cli的webpack模板项目配置文件说明
- Linux 网桥 brctl
- 王超(清华大学博士)Linux期末考核
- NS3使用Eclipse配置
- 第九章 虚拟内存 第八节 内存映射
- 《三天三夜》创作者去世,曾一边写歌一边编程
- Arduino与Proteus仿真实例-HC-SRF04超声波测距仿真
- 计算机右键菜单更换顺序,电脑图标排列顺序怎么自己改变了
- 掌握python和js_新华字典:掌_“掌”的意思,五笔,笔画,拼音,五行_HttpCN
- 献给小白的笔记day6
- Python—reverse()和reversed()方法介绍
- 数据库----------约束、主键约束
- canvas制作简单钟表
- 微信小程序API----授权登录拿到用户头像昵称等信息
热门文章
- URAL 1181 Cutting a Painted Polygon【递归+分治】
- 实战PyQt5:090-处理一个QPaintDevice错误
- jar包制作Docker镜像
- 湖北省大学程序设计竞赛(网络同步赛) D. Who killed Cock Robin
- 最简单的视音频播放示例3 Direct3D播放YUV,RGB(通过Surface)
- flink cdc MySQL2Doris 案例分享 解决分库多表同步
- ZABBIX 监控原理及架构
- 【b802】火柴棒等式
- python中函数返回值是函数的函数的用法 func()()
- win7+ubuntu 16.04双系统安装方法