当前位置:AIGC资讯 > 数据采集 > 正文

C#实现简单爬虫

爬虫算是第一个小任务吧,因为每天要统计数据,比较繁琐,如果有一个程序能帮助我,解决这个问题就好了。
首先 要知道爬虫的流程
1、发送请求
2、响应数据
3、处理数据
4、存入数据库
也要看你要爬那个网站的信息,知道每个请求头里面包含哪些需要的内容,打开网页F12就能看到,苹果电脑就Fn+F12

我们要的cookie也在这里?
先从第一步入手,发送请求,一个url,然后就第二步响应了数据返回一个json格式的字符串。

     //这个url是你要爬的地址
     public static string HttpGet(string url)
        {
            //cookie是在要爬网页F12看到的cookie都复制粘贴到这里就可以
            string cookieStr = " ";
           
            //创建请求
            HttpWebRequest httpWebRequest = (HttpWebRequest)HttpWebRequest.Create(url);
            //请求方式
            httpWebRequest.Method = "GET";
            //设置请求超时时间
            httpWebRequest.Timeout = 20000;
            
            //设置cookie
            httpWebRequest.Headers.Add("Cookie", cookieStr);
            //发送请求
            HttpWebResponse httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse();
            //利用Stream流读取返回数据
            StreamReader streamReader = new StreamReader(httpWebResponse.GetResponseStream(), Encoding.UTF8);
            //获得最终数据,一般是json
            string responseContent = streamReader.ReadToEnd();
 
            streamReader.Close();
            httpWebResponse.Close();
            
            //结果 返回给你的一般都是json格式的字符串
            return responseContent;
        }

返回的信息其实也在网页上,我们也可以很直观的看到,还是要打开网页。

第三步来了,拿到数据如何处理?见过json不会处理 一脸懵逼
(1)首先我们先把响应的数据在控制台输出复制下来
(2)到json.cn网站,粘贴,能够很直观的看到他们的关系
(3)要了解 [ ]代表数组 {}代表对象,如何把层级关系在类里面描述出来

第一种情况:如果你想要全部的json数据,就要把响应的数据层级关系在类里描述准确,不然会出异常

        /// 参数1 jsonString 是要处理的json字符串
        /// 参数2 obj 是要把json字符串转成所创建一样类,也就是内存对象
         public static object JsonToObject(string jsonString, object obj)
         {
            DataContractJsonSerializer serializer = new DataContractJsonSerializer(obj.GetType());
            
            MemoryStream mStream = new MemoryStream(Encoding.UTF8.GetBytes(jsonString));

            return serializer.ReadObject(mStream);
         }

第二中情况,虽然返回我的数据很多,但是有的数据我不想要,我只想要我需要的数据。

//参数是响应的json数据
public void JsonToObject(string resultJson){
           
           JObject obj = JObject.Parse(resultJson);
  //data是你需要的那组数据 可以看上面响应数据那张图data是我想要的数据
            var data = obj["data"];
  //会返回一个数组,也就是你自己创建的,Preview这里需要改成你创建的那个类
            var array = data.ToObject<IList<Preview>>();
             //foreach (var item in array)
            //{
            //    var iv = item.Iv;
            //}
 }

#这种方式跟上面的差不多,这个用JsonConvert,还是觉得上面那个简单点

public void JsonToObject(){
 var JsonObj = JsonConvert.DeserializeObject<IDictionary<string, object>>(result);

var dataObj = JsonConvert.DeserializeObject<IList<Preview>>(JsonObj["data"].ToString());
            //foreach (var item in dataObj)
            //{
            //    var iv = item.Iv;
            //}
}

更新时间 2023-11-08