爬虫算是第一个小任务吧,因为每天要统计数据,比较繁琐,如果有一个程序能帮助我,解决这个问题就好了。
首先 要知道爬虫的流程
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;
//}
}