爬取知乎百万用户信息之总结篇

第一个大错误是没能及时释放非托管资源,导致程序运行长的之后抛出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

时间: 2024-10-13 04:56:40

爬取知乎百万用户信息之总结篇的相关文章

爬去知乎百万用户信息之UserTask

UserTask是获取用户信息的爬虫模块 public class UserManage { private string html; private string url_token; } 构造函数 用户主页的uRL格式为"https://www.zhihu.com/people/"+url_token+"/following"; public UserManage(string urltoken) { url_token = urltoken; } 先封装一个获

运维学python之爬虫高级篇(七)scrapy爬取知乎关注用户存入mongodb

首先,祝大家开工大吉!本篇将要介绍的是从一个用户开始,通过抓关注列表和粉丝列表,实现用户的详细信息抓取并将抓取到的结果存储到 MongoDB. 1 环境需求 基础环境沿用之前的环境,只是增加了MongoDB(非关系型数据库)和PyMongo(Python 的 MongoDB 连接库),默认我认为大家都已经安装好并启动 了MongoDB 服务. 项目创建.爬虫创建.禁用ROBOTSTXT_OBEY设置略(可以参考上一篇) 2 测试爬虫效果 我这里先写一个简单的爬虫,爬取用户的关注人数和粉丝数,代码

爬取知乎百万信息之UrlTask

这个模块的作用是从nexturl队列获取用户的关注列表的url,获取关注列表.服务器返回的Json的数据 封装一个对象的序列化和反序列化的类 public class SerializeHelper { /// <summary> /// 对数据进行序列化 /// </summary> /// <param name="value"></param> /// <returns></returns> public s

利用 Scrapy 爬取知乎用户信息

思路:通过获取知乎某个大V的关注列表和被关注列表,查看该大V和其关注用户和被关注用户的详细信息,然后通过层层递归调用,实现获取关注用户和被关注用户的关注列表和被关注列表,最终实现获取大量用户信息. 一.新建一个scrapy项目 scrapy startproject zhihuuser 移动到新建目录下: cd zhihuuser 新建spider项目: scrapy genspider zhihu 二.这里以爬取知乎大V轮子哥的用户信息来实现爬取知乎大量用户信息. a) 定义 spdier.p

【大数据实战】:知乎百万用户分析

背景 这几天,同事都去出差,稍有感冒的我提前在办公室感受到了"孤独终老"的恐惧. 于是,我想在自己有能力并且还有激情的时候,去做一些以后值得回忆的事.我萌生了去"探望"下知乎的念头. 前言 我个人是15年注册知乎,三年过去了,我个人主页数据是: 我一直不喜欢知乎上面的氛围,但是通过知乎我确实拿到了很多学习.设计.阅读和产品灵感的资源,都是通过知乎链接到其他平台:在此也感谢这个平台给每一个求知者带来的帮助和启发.这次我将利用知乎用户的数据,从数据分析的角度,以用户.区

爬取豆瓣上某个用户标记的想读的图书信息

一,程序的功能和适用人群 程序的功能是爬取豆瓣用户标记的想读的图书,将图书信息保存为excel文件.适用于想备份在豆瓣上标记的图书的用户. 二,执行效果 程序执行后会得到一个excel文件,保存了用户想要读的图书信息,如下图: 三,技术路线 技术路线是选取用户在豆瓣上标记的想读的图书的首页url作为种子url,如下图 遍历这一页中所有的图书信息,通过每本图书链接抓取每本图书的具体信息,以下左图是首页的图书信息,右图是通过左图的链接进入的要爬取的具体的图书信息. 在爬取首页的url中的所有图书时,

爬取知乎Python中文社区信息

爬取知乎Python中文社区信息,https://zhuanlan.zhihu.com/zimei 1 import requests 2 from urllib.parse import urlencode 3 from pyquery import PyQuery as pq 4 from pymongo import MongoClient 5 import json 6 import time 7 8 base_url = 'https://www.zhihu.com/api/v4/co

Python爬虫爬取知乎小结

博客首发至Marcovaldo's blog (http://marcovaldong.github.io/) 最近学习了一点网络爬虫,并实现了使用python来爬取知乎的一些功能,这里做一个小的总结.网络爬虫是指通过一定的规则自动的从网上抓取一些信息的程序或脚本.我们知道机器学习和数据挖掘等都是从大量的数据出发,找到一些有价值有规律的东西,而爬虫则可以帮助我们解决获取数据难的问题,因此网络爬虫是我们应该掌握的一个技巧. python有很多开源工具包供我们使用,我这里使用了requests.Be

scrapy 爬取知乎问题、答案 ,并异步写入数据库(mysql)

  python版本  python2.7 爬取知乎流程: 一 .分析 在访问知乎首页的时候(https://www.zhihu.com),在没有登录的情况下,会进行重定向到(https://www.zhihu.com/signup?next=%2F)这个页面, 爬取知乎,首先要完成登录操作,登陆的时候观察往那个页面发送了post或者get请求.可以利用抓包工具来获取登录时密码表单等数据的提交地址. 1.利用抓包工具,查看用户名密码数据的提交地址页就是post请求,将表单数据提交的网址,经过查看