[爬虫]抓取知乎百万用户信息之总结篇
2017-02-03 00:00
429 查看
第一个大错误是没能及时释放非托管资源,导致程序运行长的之后抛出OutOfMemoryException.
这个小Demo主要的非托管资源一个是http请求的httpWebresopne和流,另外一个是RedisCline。导致这个问题出现不是我不知道要释放非托管资源,而是代码疏忽。这个写代码习惯应该是很久了,因为以前程序并没有运行很久在,这个问题并没有暴露出来
刚开始时候是这样写的
之间在using语句里面执行,这样还没有释放对象就返回了
改进:
对待非托管资源,两个推荐方法
第二大错误,将异步等同与多线程
异步不等于多线程
对于I/O密集型应该使用异步,对于CPU密集型用多线程。爬虫中获取网络资源是I/O密集型,而html解析是cpu密集型的。由于爬虫中非要获取资源才能解析,我并没有采用异步
using语句,执行超出using就会被释放
巧用finallly语句 try{}catch{}不要忘了还有finally 在finally里面显示调用dispose方法
其实他们编译结果是一样的
我踩的第一大坑httpwebrequest默认连个连接,不管开多少线程还是那个速度
需要在app.config里面添加
缺陷:
sqlserver中很多表是1对多关系,由于数据不够规范导致一对多变成一对一很多数据冗余
![](https://static.oschina.net/uploads/img/201702/03180941_lhXL.png)
数据展示
采用echart,关于echart请看我的博客http://www.cnblogs.com/zuin/p/6122818.html
![](https://static.oschina.net/uploads/img/201702/03180941_czMe.png)
男女比例
![](https://static.oschina.net/uploads/img/201702/03180941_k3CS.png)
被关注量分布
![](https://static.oschina.net/uploads/img/201702/03180941_C6fu.png)
校友数最多的10个学校
![](https://static.oschina.net/uploads/img/201702/03180941_NPvw.png)
员工最多的10个公司
![](https://static.oschina.net/uploads/img/201702/03180941_hh0Q.png)
主修专业人数前10
![](https://static.oschina.net/uploads/img/201702/03180941_lEH5.png)
或赞数最多的top10
这个小Demo主要的非托管资源一个是http请求的httpWebresopne和流,另外一个是RedisCline。导致这个问题出现不是我不知道要释放非托管资源,而是代码疏忽。这个写代码习惯应该是很久了,因为以前程序并没有运行很久在,这个问题并没有暴露出来
刚开始时候是这样写的
using (StreamReader reader = new StreamReader(stream, Encoding.UTF8)) { return reader.ReadToEnd(); }
之间在using语句里面执行,这样还没有释放对象就返回了
改进:
string Source = string.Empty; … using (Stream stream = response.GetResponseStream())//原始 { using (StreamReader reader = new StreamReader(stream, Encoding.UTF8)) { Source = reader.ReadToEnd(); } } … return Source;
对待非托管资源,两个推荐方法
第二大错误,将异步等同与多线程
异步不等于多线程
对于I/O密集型应该使用异步,对于CPU密集型用多线程。爬虫中获取网络资源是I/O密集型,而html解析是cpu密集型的。由于爬虫中非要获取资源才能解析,我并没有采用异步
using语句,执行超出using就会被释放
巧用finallly语句 try{}catch{}不要忘了还有finally 在finally里面显示调用dispose方法
其实他们编译结果是一样的
我踩的第一大坑httpwebrequest默认连个连接,不管开多少线程还是那个速度
需要在app.config里面添加
<system.net> <connectionManagement> <add address="*" maxconnection="100000"></add> </connectionManagement> </system.net>
缺陷:
sqlserver中很多表是1对多关系,由于数据不够规范导致一对多变成一对一很多数据冗余
![](https://static.oschina.net/uploads/img/201702/03180941_lhXL.png)
数据展示
采用echart,关于echart请看我的博客http://www.cnblogs.com/zuin/p/6122818.html
![](https://static.oschina.net/uploads/img/201702/03180941_czMe.png)
男女比例
![](https://static.oschina.net/uploads/img/201702/03180941_k3CS.png)
被关注量分布
![](https://static.oschina.net/uploads/img/201702/03180941_C6fu.png)
校友数最多的10个学校
![](https://static.oschina.net/uploads/img/201702/03180941_NPvw.png)
员工最多的10个公司
![](https://static.oschina.net/uploads/img/201702/03180941_hh0Q.png)
主修专业人数前10
![](https://static.oschina.net/uploads/img/201702/03180941_lEH5.png)
或赞数最多的top10
![](https://static.oschina.net/uploads/img/201702/03180941_rkdh.png)
相关文章推荐
- [爬虫]抓取知乎百万用户信息之爬虫模块
- [爬虫]抓取知乎百万用户信息之自建代理池
- [爬虫]抓取知乎百万用户信息之Redis篇
- [爬虫]抓取百万知乎用户信息之HttpHelper的迭代
- [爬虫]抓取百万知乎用户设计之实体设计
- [python和大数据-1]利用爬虫登录知乎进行BFS搜索抓取用户信息本地mysql分析【PART1】
- [爬虫]抓取百万知乎用户数据之爬取思路
- java研发爬虫,抓取知乎,CSDN用户信息
- 【php爬虫】百万级别知乎用户数据爬取与分析
- 用Python Requests抓取知乎用户信息
- 爬虫系列之抓取知乎的公开收藏夹信息
- 百万级别知乎用户数据抓取与分析之PHP开发
- Python爬虫从入门到放弃(十九)之 Scrapy爬取所有知乎用户信息(下)
- Python爬虫爬取知乎用户信息+寻找潜在客户
- 【php爬虫】百万级别知乎用户数据爬取与分析
- PHP爬虫:百万级别知乎用户数据爬取与分析
- PHP爬虫之百万级别知乎用户数据爬取与分析
- 百万级别知乎用户数据抓取与分析之PHP开发
- Android(Java) 模拟登录知乎并抓取用户信息
- PHP爬虫:百万级别知乎用户数据爬取与分析