# 雪球超级爬虫
<a href="http://junit.org/"><img src="https://img.shields.io/badge/Test-JUnit-orange.svg?style=flat"></a>
<a href="http://jsoup.org/"><img src="https://img.shields.io/badge/Dependency-Jsoup-yellow.svg?style=flat"></a>
<a href="http://jackson-users.ning.com/"><img src="https://img.shields.io/badge/Dependency-Jackson-blue.svg?style=flat"></a>
<a href="http://dev.mysql.com/"><img src="https://img.shields.io/badge/Database-MySQL-red.svg?style=flat"></a>
## 更新日志
2016.4.12 -- 更新url: http -\> https
2016.4.10 -- 增加自动登录接口,用户在config.sys 下配置用户名以及密码等信息可自动登录并提高爬虫权限。 具体配置格式如下:
```
areaCode = 86 可选 默认国内
userID = 186xxxxxxxx
password = xxxx
rememberMe = true 可选 默认开启
```
2016.2.20 -- 修复雪球后台cookie设置变更所导致的程序更新cookie失效问题 Issues #2
2015.12.4 -- 增加根据股票获取公司信息功能(公司名称、组织形式、成立日期、经营范围、主营业务、地区代码、所属板块)
2015.12.7 -- 游资追踪增加模糊匹配特性
2015.12.10 -- 添加了必要的代码注释,添加了统计一阳穿三线个股的example,另外:雪球网貌似因为我大量抓取数据已经采取反爬虫措施
各位用的时候最好修改一下抓取频率,或者不要一次性抓取太多信息,对于雪球网的输入验证码,应对措施如下:
当日志超时重试次数达到阈值时,很可能雪球封住了你的IP,这时候人工登录雪球网输入验证码后,代码经过重试等待时间后会自动恢复
抓取数据流程。
2015.12.14 -- 更新高级特性,增加RMI分布式数据抓取特性,可将需要访问网络的组件部署至Slave集群,分散流量,
防止被反爬虫机制锁定。 [RMI高级特性](https://github.com/decaywood/XueQiuSuperSpider/blob/master/info/RMI.md)
2020.10.07 -- 移除了RMI特性,精简框架内容。增加股票讨论区爬取、评论爬取以及相关用户信息爬取
2020.10.08 -- 移除了自动获取cookie功能,雪球目前这块做的比较好了,不好获取了,需要从浏览器自己copy下来加到config.sys文件中
## 前言
雪球网或者东方财富或者同花顺目前已经提供了很多种股票筛选方式,但是筛选方式是根据个人操作
风格来定义的,三个网站有限的筛选方式显然不能满足广大股民、程序员特别是数据分析控的要求,
基于此,本人设计了一个可以任意拓展,实现任意数据搜集与分析的爬虫程序,满足股友们的需要,
只要你能想到的数据搜集与分析策略它都能实现。
(项目严重依赖JDK8新特性,偏重函数式编程思想,不熟悉的已备好教程以及例子:
[Java8 简明教程](http://decaywood.github.io/2015/12/23/Java8-guide/))
## 结构
雪球超级爬虫的所有组件互相没有任何依赖,包括参数。整体架构由Collector、Mapper
以及Consumer三个接口支撑。功能分别为数据搜集、数据相关信息(分支信息)的组装、以及最终
的数据分析,三个接口定义了整个数据抓取生命周期的三个阶段。Mapper组件可以进行多次
嵌套,就像流水线一样,不同的Mapper负责自己对应的组装任务,经过N个Mapper,
完成一个对象的N种属性组装,当然,如果你不需要某些属性,你完全可以跳过某些mapper,
这样可以节省许多抓取时间。在参数传递方面,模块在处理参数之前会对参数进行深度复制,
确保不会出现多线程同步问题,模块内部参数严格定义为只读。变量只局限在方法范围内,
完全避免了线程间数据共享。
![](https://github.com/decaywood/XueQiuSuperSpider/blob/master/info/structure.png)
## 优势
* 稳定
对模块内部数据的严格限制保证了无论是如何频繁的多线程操作都不会出现脏读,写覆盖等令人头
疼的并发问题,模块之间无依赖,非常容易进行单元测试,只要模块都通过严格的单元测试,
无论多么复杂的数据搜集以及分析逻辑,雪球超级爬虫都能稳定的工作,运行后不用死死的
盯着日志,安心睡觉。
* 高性能
所有模块顶层实现了Java8的函数式接口,能够依靠Java8的并行流进行高并发操作,用户
可以轻易配置线程池缓存工作线程数量,充分发挥网络IO资源以及CPU资源。
* 极易改造与拓展
散文式的结构决定了雪球超级爬虫是一个可以进行任意拓展的程序,任何人都可以稍作了解
后贡献自己的代码,你甚至可以爬取同花顺网站的数据然后结合东方财富的一些资料,再混合
雪球网站自己数据综合进行分析,你所做的只是添加几个Collector和Mapper而已,很多基础
的模块我已经提供好了。(是不是和Python有点像)
## 贡献模块的一些注意事项
* 参数对象请实现DeepCopy接口
对于你定义了在模块间传递的对象,请实现DeepCopy接口,就像我上面提到的,模块间是
不允许共享对象的,模块约定复制传入的参数。
```java
public interface DeepCopy <R> {
R copy();
}
```
* 对于只读的域变量请定义为final
为了防止你对域的误写,请将域定义为final,这样更加保险
* 定义可变变量默认值
对于可变变量,初始化时请使用EmptyObject类定义默认值,如果是Entity,请按规范定义好EmptyXX子类,
遵守此规范能够很好的防止空指针异常。
* 组件无状态
模块必须保证为无状态的,避免出现行为不一致的情况,尤其是分布式协同工作时,无状态的
组件能够有效保证整个程序的正确性以及稳定性。
* 定义默认行为
每个模块提供合理的默认值,减少用户在配置上消耗的精力。
* 完善的单元测试
完成一个模块后,请进行完善的单元测试,包括初始化参数合法性。
输入输出的正确性。
* 具备交换律
特别注意的是,mapper与mapper之间输入与输出参数类型如果相同,请保证遵守交换律,
即 M1.andThen(M2) equals M2.andThen(M1)
* 推荐继承模块模版
每个生命周期对应的接口皆有对应的抽象模板类,他们通过了单元测试,封装了实用的功能,
包括网络请求、Exception捕获,网络IO异常重新请求以及Cookie更新保存等有用的功能,
除非有必要,否则推荐继承模版模块,它们以Abstract开头,支持泛型。
## 一些例子
* 统计一阳穿三线个股
```java
@Test
public void yiyinsanyang() {
List<Stock> stocks = TestCaseGenerator.generateStocks();
StockToStockWithAttributeMapper attributeMapper = new StockToStockWithAttributeMapper();
StockToStockWithStockTrendMapper trendMapper = new StockToStockWithStockTrendMapper();
Predicate<Entry<String, Stock>> predicate = x -> {
if(x.getValue().getStockTrend().getHistory().isEmpty()) return false;
List<StockTrend.TrendBlock> history = x.getValue().getStockTrend().getHistory();
StockTrend.TrendBlock block = history.get(history.size() - 1);
double close = Double.parseDouble(block.getClose());
double open = Double.parseDouble(block.getOpen());
double ma5 = Double.parseDouble(block.getMa5());
double ma10 = Double.parseDouble(block.getMa10());
double ma30 = Double.parseDouble(block.getMa30());
double max = Math.max(close, open);
double min = Math.min(close, open);
return close > open && max >= MathUtils.max(ma5, ma10, ma30) && min <= MathUtils.min(ma5, ma10, ma30);
};
stocks.parallelStream()
.map(x -> new Entry<>(x.getStockName(), attributeMapper.andThen(trendMapper).apply(x)))
.filter(
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
爬虫(Web Crawler)是一种自动化程序,用于从互联网上收集信息。其主要功能是访问网页、提取数据并存储,以便后续分析或展示。爬虫通常由搜索引擎、数据挖掘工具、监测系统等应用于网络数据抓取的场景。 爬虫的工作流程包括以下几个关键步骤: URL收集: 爬虫从一个或多个初始URL开始,递归或迭代地发现新的URL,构建一个URL队列。这些URL可以通过链接分析、站点地图、搜索引擎等方式获取。 请求网页: 爬虫使用HTTP或其他协议向目标URL发起请求,获取网页的HTML内容。这通常通过HTTP请求库实现,如Python中的Requests库。 解析内容: 爬虫对获取的HTML进行解析,提取有用的信息。常用的解析工具有正则表达式、XPath、Beautiful Soup等。这些工具帮助爬虫定位和提取目标数据,如文本、图片、链接等。 数据存储: 爬虫将提取的数据存储到数据库、文件或其他存储介质中,以备后续分析或展示。常用的存储形式包括关系型数据库、NoSQL数据库、JSON文件等。 遵守规则: 为避免对网站造成过大负担或触发反爬虫机制,爬虫需要遵守网站的robots.txt协议,限制访问频率和深度,并模拟人类访问行为,如设置User-Agent。 反爬虫应对: 由于爬虫的存在,一些网站采取了反爬虫措施,如验证码、IP封锁等。爬虫工程师需要设计相应的策略来应对这些挑战。 爬虫在各个领域都有广泛的应用,包括搜索引擎索引、数据挖掘、价格监测、新闻聚合等。然而,使用爬虫需要遵守法律和伦理规范,尊重网站的使用政策,并确保对被访问网站的服务器负责。
资源推荐
资源详情
资源评论
收起资源包目录
雪球股票信息超级爬虫.zip (104个子文件)
.gitignore 217B
StreamTest.java 13KB
Stock.java 11KB
DatabaseAccessor.java 7KB
StockSlectorBaseCollectorTest.java 6KB
EmptyObject.java 5KB
MarketQuotationsQuota.java 5KB
StockTrend.java 4KB
CubeToCubeWithTrendMapper.java 4KB
StockScopeHotRankCollectorTest.java 4KB
MarketQuotationsRankCollector.java 4KB
StockToStockWithStockTrendMapper.java 4KB
MostProfitableCubeCollector.java 4KB
ShareHoldersTrend.java 4KB
LongHuBangInfo.java 4KB
Rebalancing.java 4KB
FileLoader.java 4KB
StockToVIPFollowerCountEntryMapper.java 4KB
HuShenNewsRefCollector.java 4KB
StockToStockWithCompanyInfoMapper.java 4KB
MarketQuotationsRankCollectorTest.java 4KB
StockToStockWithShareHolderTrendMapper.java 4KB
GlobalSystemConfigLoader.java 4KB
StockToStockWithAttributeMapperTest.java 3KB
CubeToCubeWithLastBalancingMapper.java 3KB
StockScopeHotRankCollector.java 3KB
Cube.java 3KB
CapitalFlow.java 3KB
StockToLongHuBangMapper.java 3KB
DateParser.java 3KB
StockToStockWithAttributeMapper.java 3KB
PostInfo.java 3KB
StockToCapitalFlowEntryMapper.java 3KB
MostProfitableCubeCollectorTest.java 3KB
HttpRequestHelper.java 3KB
XueQiuQuota.java 3KB
CommentSetMapper.java 3KB
IndustryToStocksMapper.java 2KB
BasicQuota.java 2KB
CubeTrend.java 2KB
CookieProcessor.java 2KB
StockToStockWithShareHolderTrendMapperTest.java 2KB
CommentCollector.java 2KB
MarketIndexTrend.java 2KB
CompanyInfo.java 2KB
AbstractCollector.java 2KB
StockSlectorBaseCollector.java 2KB
UserCommentCollector.java 2KB
DateParserTest.java 2KB
StockCommentCollector.java 2KB
AbstractMapper.java 2KB
URLMapper.java 2KB
AbstractAcceptor.java 2KB
DateToLongHuBangStockMapper.java 2KB
UserInfoToDBAcceptor.java 2KB
CommissionIndustryCollector.java 2KB
AbstractFilter.java 2KB
Comment.java 2KB
CubeToCubeWithTrendMapperTest.java 2KB
TestCaseGenerator.java 2KB
DateRangeCollector.java 1KB
StockToStockWithCompanyInfoMapperTest.java 1KB
StringUtilsTest.java 1KB
StringUtils.java 1KB
StockToLongHuBangMapperTest.java 1KB
Industry.java 1KB
DefaultTimeWaitingStrategy.java 1KB
QuotaChainNode.java 1KB
PageKeyFilter.java 1KB
AbstractRequester.java 1KB
UserSetMapper.java 1KB
JsonParser.java 1KB
User.java 1KB
MathUtils.java 1KB
DateRangeCollectorTest.java 1KB
DateToLongHuBangStockMapperTest.java 1KB
IndustryToStocksMapperTest.java 1KB
RequestParaBuilder.java 1KB
AbstractQuotaNode.java 942B
CubeToCubeWithLastBalancingMapperTest.java 935B
QuotaHead.java 898B
CommissionIndustryCollectorTest.java 868B
StockToVIPFollowerCountEntryMapperTest.java 805B
PageKeyFilterTest.java 800B
HuShenNewsRefCollectorTest.java 756B
StockToCapitalFlowEntryMapperTest.java 732B
StockToStockWithStockTrendMapperTest.java 701B
StockCommentCollectorTest.java 619B
Trend.java 508B
FileLoaderTest.java 427B
GlobalSystemConfigLoaderTest.java 373B
Entry.java 371B
TimeWaitingStrategy.java 352B
DeepCopy.java 189B
ITrendBlock.java 179B
testJson.json 0B
LICENSE 1KB
README.md 17KB
RMI.md 4KB
structure.png 43KB
共 104 条
- 1
- 2
资源评论
JJJ69
- 粉丝: 6352
- 资源: 5918
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- training_plan_db.sql
- 2c4f3adc7be59975e81fa0c1f24cb6ea.JPG
- python爬虫入门,分享给有需要的人,仅供参考
- 722bf4c3ee17fa231ad9efcb12407aa0.JPG
- 15da2b5d3ceeddc8af2f6a7eed26d7e0.JPG
- 7ae59002be36a13ad6de32c4e633a196.JPG
- spark中文文档,spark操作手册以及使用规范
- WPF-Halcon算法平台,类似于海康威視VisionMater.zip
- Fake Location,可用来王者荣誉修改战区及企业微信定位打卡等
- the fire level NULL
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功