爬取知乎百万信息之UrlTask

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了爬取知乎百万信息之UrlTask相关的知识,希望对你有一定的参考价值。

这个模块的作用是从nexturl队列获取用户的关注列表的url,获取关注列表。服务器返回的Json的数据

封装一个对象的序列化和反序列化的类

public   class SerializeHelper
    {
        /// <summary>
        /// 对数据进行序列化
        /// </summary>
        /// <param name="value"></param>
        /// <returns></returns>
        public static string SerializeToString(object value)
        {
            return JsonConvert.SerializeObject(value);
        }
        /// <summary>
        /// 反序列化操作
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="str"></param>
        /// <returns></returns>
        public static T DeserializeToObject<T>(string str)
        {
          
            return JsonConvert.DeserializeObject<T>(str);
        }
}

封装UrlTask类

 public class UrlTask
    {
        private  string url { get; set; }
        private string JSONstring { get; set; }
        public UrlTask(string _url)
        {
            url = _url;  
        }
}

添加一个获取资源的方法

 private bool Gethtml()
        {
            JSONstring= HttpHelp.DownLoadString(url);
            Console.WriteLine("Json下载完成");
            return !string.IsNullOrEmpty(JSONstring);
        }
解析json方法
 public  void  Analyse() 
        {
            try
            {
                if (GetHtml())
                {
                    Stopwatch watch = new Stopwatch();
                    watch.Start();
               
                    followerResult result = SerializeHelper.DeserializeToObject<followerResult>(JSONstring);
                     if (!result.paging.is_end)
                     {
                         RedisCore.PushIntoList(1, "nexturl", result.paging.next);                
                      }                           
                    foreach (var item in result.data)
                    {
                         int type=Math.Abs(item.GetHashCode())% 3 + 3;
                         if (RedisCore.InsetIntoHash(type, "urltokenhash", item.url_token, "存在"))
                         {
                             RedisCore.PushIntoList(1, "urltoken", item.url_token);
                           
                         }
                      
                    }
                    watch.Stop();
                    Console.WriteLine("解析json用了{0}毫秒",watch.ElapsedMilliseconds.ToString());
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }
          
        }

解析:如果result.paging.is_end为true,那么这个是用户关注列表的最后一页,那么它的nexturl应该加入队列,负责不要加入,对于后面的用户数组,因为信息不去全,不要了,有了Id前往主页获取详细信息。


 

 

 

以上是关于爬取知乎百万信息之UrlTask的主要内容,如果未能解决你的问题,请参考以下文章

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

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

爬取知乎Python中文社区信息

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

爬虫实战--利用Scrapy爬取知乎用户信息

Scrapy爬取知乎用户信息