爬取知乎百万信息之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的主要内容,如果未能解决你的问题,请参考以下文章
月薪30k的资深程序员用Python爬取了知乎百万用户!并数据分析!