爬去知乎百万用户信息之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;
         }

先封装一个获取html页面的方法

 private bool GetHtml()

        {                

            string url="https://www.zhihu.com/people/"+url_token+"/following";

            html = HttpHelp.DownLoadString(url);

            return  !string.IsNullOrEmpty(html);

        }

拿到了html页面,接下来是剥取页面中的JSON,借助HtmlAgilityPack

public  void  analyse()
        {
                if (GetHtml())
                {
                    try
                    {
                        Stopwatch watch = new Stopwatch();
                        watch.Start();
                        HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
                        doc.LoadHtml(html);
                        HtmlNode node = doc.GetElementbyId("data");
                        StringBuilder stringbuilder =new StringBuilder(node.GetAttributeValue("data-state", ""));
                        stringbuilder.Replace(""", "‘");
                        stringbuilder.Replace("&lt;", "<");
                        stringbuilder.Replace("&gt;", ">");

                        watch.Stop();
                       Console.WriteLine("分析Html用了{0}毫秒", watch.ElapsedMilliseconds.ToString());

                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine(ex.ToString());
                    }
                }

            }    

添加用户的关注列表的链接

 private void  GetUserFlowerandNext(string json)

        {

                 string foollowed = "https://www.zhihu.com/api/v4/members/" + url_token + "/followers?include=data%5B*%5D.answer_count%2Carticles_count%2Cfollower_count%2Cis_followed%2Cis_following%2Cbadge%5B%3F(type%3Dbest_answerer)%5D.topics&offset=0&limit=20";

                 string following = "https://www.zhihu.com/api/v4/members/" + url_token + "/followees?include=data%5B%2A%5D.answer_count%2Carticles_count%2Cfollower_count%2Cis_followed%2Cis_following%2Cbadge%5B%3F%28type%3Dbest_answerer%29%5D.topics&limit=20&offset=0";

                 RedisCore.PushIntoList(1, "nexturl", following);

                 RedisCore.PushIntoList(1, "nexturl", foollowed);

        }

对json数据进一步剥取,只要用户的信息,借助JSON解析工具Newtonsoft.Json

private void  GetUserInformation(string json)
        {
                JObject obj = JObject.Parse(json);
                string xpath = "[‘" + url_token + "‘]";
                JToken tocken = obj.SelectToken("[‘entities‘]").SelectToken("[‘users‘]").SelectToken(xpath);
                RedisCore.PushIntoList(2, "User", tocken.ToString());

        }  

现在来完成下analyse函数

  public  void  analyse()
        {
                if (GetHtml())
                {
                    try
                    {
                        Stopwatch watch = new Stopwatch();
                        watch.Start();
                        HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
                        doc.LoadHtml(html);
                        HtmlNode node = doc.GetElementbyId("data");
                        StringBuilder stringbuilder =new StringBuilder(node.GetAttributeValue("data-state", ""));
                        stringbuilder.Replace("&quot;", "‘");
                        stringbuilder.Replace("&lt;", "<");
                        stringbuilder.Replace("&gt;", ">");
                        GetUserInformation(stringbuilder.ToString());
                        GetUserFlowerandNext(stringbuilder.ToString());
                        watch.Stop();
                        Console.WriteLine("分析Html用了{0}毫秒", watch.ElapsedMilliseconds.ToString());

                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine(ex.ToString());
                    }
                }

            }
        }
    
 
时间: 2024-09-29 01:11:13

爬去知乎百万用户信息之UserTask的相关文章

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

第一个大错误是没能及时释放非托管资源,导致程序运行长的之后抛出OutOfMemoryException. 这个小Demo主要的非托管资源一个是http请求的httpWebresopne和流,另外一个是RedisCline.导致这个问题出现不是我不知道要释放非托管资源,而是代码疏忽.这个写代码习惯应该是很久了,因为以前程序并没有运行很久在,这个问题并没有暴露出来 刚开始时候是这样写的 using (StreamReader reader = new StreamReader(stream, Enc

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

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

爬取知乎百万信息之UrlTask

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

月薪30k的资深程序员用Python爬取了知乎百万用户!并数据分析!

数据量:3,289,329 人. 数据采集工具:分布式 python 爬虫 分析工具:ElasticSearch + Kibana 分析角度:地理位置.男女比例.各类排名.所在高校.活跃程度等. 请各位注意: 以下所有分析结果都基于我抓取到的这300万用户的个人信息,非权威分析,仅供参考. 数据抓取时间为2017年7月份,用户数据会随着时间推移而变化,所以该报告具有一定时效性. 蓝色为男生,红色为女生.具体数据为: 男生:1,202,234 人,占 51.55%. 女生:1,129,874 人,

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

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

利用 Scrapy 爬取知乎用户信息

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

[Python爬虫] Selenium爬取新浪微博客户端用户信息、热点话题及评论 (上)

一. 文章介绍 前一篇文章"[python爬虫] Selenium爬取新浪微博内容及用户信息"简单讲述了如何爬取新浪微博手机端用户信息和微博信息. 用户信息:包括用户ID.用户名.微博数.粉丝数.关注数等. 微博信息:包括转发或原创.点赞数.转发数.评论数.发布时间.微博内容等. 它主要通过从文本txt中读取用户id,通过"URL+用户ID" 访问个人网站,如柳岩: http://weibo.cn/guangxianliuya 因为手机端数据相对精简简单,所以采用输

Python爬虫从入门到放弃(十八)之 Scrapy爬取所有知乎用户信息(上)

爬取的思路 首先我们应该找到一个账号,这个账号被关注的人和关注的人都相对比较多的,就是下图中金字塔顶端的人,然后通过爬取这个账号的信息后,再爬取他关注的人和被关注的人的账号信息,然后爬取被关注人的账号信息和被关注信息的关注列表,爬取这些用户的信息,通过这种递归的方式从而爬取整个知乎的所有的账户信息.整个过程通过下面两个图表示: 爬虫分析过程 这里我们找的账号地址是:https://www.zhihu.com/people/excited-vczh/answers我们抓取的大V账号的主要信息是:

如何爬取了知乎用户信息,并做了简单的分析

爬虫:python27 +requests+json+bs4+time 分析工具: ELK套件 开发工具:pycharm 1.性别分布 0 绿色代表的是男性 ^ . ^ 1 代表的是女性 -1 性别不确定 可见知乎的用户男性颇多. 2.粉丝最多的top30 粉丝最多的前三十名:依次是张佳玮.李开复.黄继新等等,去知乎上查这些人,也差不多这个排名,说明爬取的数据具有一定的说服力. 3.写文章最多的top30 爬虫架构图如下: 说明: 选择一个活跃的用户(比如李开复)的url作为入口url.并将已爬