在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
前言,想利用小程序导航页面来提升网站的流量,找到www.xcxdh666.com该小程序导航网站。 分析网页 1发现网站其实也是用异步分页请求加载数据的,所以根本用不着xpath解析html,直接分析其请求URL 2点击加载更多找到请求,发现其实就是pageNum,cagegory两个参数 3所以直接请求URL,带入参数,分析起返回json结果 编写代码 1首先建立接收类型 public class XcxApplet { public int id{get;set;} public string categoryName{get;set;} public string name {get;set;} public string saomaUrl{get;set;} public string sum{get;set;} public string logoUrl{get;set;} } public class Result { public List<XcxApplet> dataList{get;set;} public string category{get;set;} public int status{get;set;} public int pageNum{get;set;} } 2 封装请求页面方法 public static string GetPostPage(this string posturl,string postData) { Encoding encoding=Encoding.UTF8; byte[] data=null; if(!string.IsNullOrEmpty(postData)) data=encoding.GetBytes(postData); try { //设置参数 var request=WebRequest.Create(posturl) as HttpWebRequest; if(request ==null) return string.Empty; var cookieContainer=new CookieContainer(); request.cookieContainer=cookieContainer(); request.AllowAutoRedirect=true; request.Method="POST"; request.ContentType="application/x-www-form=urlencoded"; if(data !=null) { request.ContentLength=data.Length; Stream outstream=request.GetRequestStream(); outstream.Write(data,0,data.Length); outstream.Close(); } //发送请求并获取相应回应数据 var response=request.GetResponse() as HttpWebResponse; if(response==null)return string.Empty; //直到request.GetResponse()程序才开始向目标网页发送POST请求 Stream instream =response.GetResponseStream(); if(instream==null)return string.Empty; var sr=new StreamReader(instream,encoding); //返回结果网页(html)代码 string content=sr.ReadToEnd(); string err=string.Empty; return content; } catch(Exception ex) { string err=ex.Message; return string.Empty; } } 3 图片url处理,思路就是要将其返回的URL请求下载到本地或者上川到自己对应的图片服务器,我这里是用七牛云存储img的 这里你可以改成下载到本地返回本地的URL就好 public string QiniuUplod(string imgurl) { var accessKey="你的accesskey"; var secretkey="你的secretkey"; //生成(上传)凭证时需要使用此Mac //这个示例单独使用了一个Setting类,其中包含AccessKEY和SecretKey //实际应用中,请自行设置您的AccessKey和SecretKey Mac mac=new Mac(accessKey,secretKey); string bucket="siyoku"; string saveKey=imgurl.Substring(imgurl.LastIndexOf('/')+1,imgurl.Length-imgurl.LastIndexof('/')-1); //使用前请确保AK和BUCKET正确,否则此函数会抛出异常 Qiniu.Common.Config.AutoZone(accessKey,bucket,false); //上传策略 PutPolicy putPolicy=new PutPolicy(); putPolicy.Scope=bucket+":"+saveKey; putPolicy.Scope=bucket; putPolicy.SetExpires(3600); string jstr=putPolicy.ToJsonString(); string token=Auth.CreateUploadToken(mac,jstr); try { var wReq=System.Net.WebRequest.Create(imgurl) as System.Net.HttpWebRequest; var resp=wReq.GetResponse() as System.Net.HttpWebResponse; using(var stream=resp.GetResponseStream()) { FormUploader fu= new FormUploader; var result=fu.UploadStream(stream,saveKey,token); var x=Newtonsoft.Json.JsonConvert.DeserializeObject<QiniuResult>(result.Text); return $"http://img.siyouku.cn/{x.key}"; } } catch (Exception ex) { return ""; } } 4 最后是请求主体方法 public ActionResult GetxcxList() { Stopwatch watch=new Stopwatch(); watch.Start(); var result=new Result(); for(int j=0;j<54;j++) { string url=$"https://www.xcxdh666.com/pageList.htm?pageNum={j}"; var str=url.GetPostPage(null); if(str !=null) { result=str.JsonConvert<Result>(); } result.dataList.ForEach(i=> { if(!Db.Applet.Any(x=>x.Name==i.name)) { var x=new Applet() { CategoryName=string.IsNullOrEmpty(i.categoryName)?"其它":i.categoryName, Name=i.name, SaomiaoUrl=QiniuUpload($"http://img.xcxdh666.com/wxppnav/{i.saomaUrl}", summary=i.sum, LogoUrl=QiniuUpload($"http://img.xcxdh666.com/wxappnav/{i.logoUrl}"), SortNum=j, CreateUser="wenqing", CreateTime=DateTime.Now }; Db.Applet.Add(x); } }); Db.SaveChanges(); } watch.Stop(); return Content("派取完成!本次请求总共耗时:"+watch.ElapsedMilliseconds); } } |
请发表评论