• [爬虫]抓取知乎百万用户信息之总结篇


                 点击我前往Github查看源代码   别忘记star

    本项目github地址:https://github.com/wangqifan/ZhiHu     

    第一个大错误是没能及时释放非托管资源,导致程序运行长的之后抛出OutOfMemoryException.

    这个小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密集型的。由于爬虫中非要获取资源才能解析,我并没有采用异步

    1. using语句,执行超出using就会被释放
    2. 巧用finallly语句 try{}catch{}不要忘了还有finally 在finally里面显示调用dispose方法

    其实他们编译结果是一样的

    我踩的第一大坑httpwebrequest默认连个连接,不管开多少线程还是那个速度

    需要在app.config里面添加

    <system.net>
            <connectionManagement>
                <add address="*" maxconnection="100000"></add>
            </connectionManagement>
        </system.net>

    缺陷:

    sqlserver中很多表是1对多关系,由于数据不够规范导致一对多变成一对一很多数据冗余

     

    数据展示

    采用echart,关于echart请看我的博客http://www.cnblogs.com/zuin/p/6122818.html

    男女比例

    被关注量分布

     

    校友数最多的10个学校

    员工最多的10个公司

    主修专业人数前10

    或赞数最多的top10

     

  • 相关阅读:
    《花好月圆夜》
    关于Url重写
    三大WEB服务器对比分析(apache ,lighttpd,nginx)
    APC 和 Memcache 有什么区别,哪个更好效率更高?
    URL优化不仅仅是静态化重写URL
    php中的静态变量和动态变量的区别框架加载变量时运用
    msicuu.exe (msizap.exe),程序的作用
    显示器接口针脚定义(Dsub15)
    图文教程:DIY全屏开机LOGO详解
    ASP.NET中的媒体播放
  • 原文地址:https://www.cnblogs.com/zuin/p/6261772.html
Copyright © 2020-2023  润新知