簡單抓取小程式大全,並展示。

来源:http://www.cnblogs.com/fighting2014/archive/2017/06/29/7093571.html
-Advertisement-
Play Games

前言 ,想利用小程式導航頁面來提升網站的流量,找到 www.xcxdh666.com 該小程式導航網站。 分析網頁 1 發現網站其實也是用非同步分頁請求載入數據的 ,所以根本用不著xpath 解析html,直接分析其請求url 2點擊載入更多找到請求,發現其實就 pageNum ,cagegory 兩 ...


          前言 ,想利用小程式導航頁面來提升網站的流量,找到  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;
                    //Response.Write(content);
                    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
            // 這個示例單獨使用了一個Settings類,其中包含AccessKey和SecretKey
            // 實際應用中,請自行設置您的AccessKey和SecretKey
            Mac mac = new Mac(accessKey, secretKey);
            string bucket = "siyouku";
            string saveKey = imgurl.Substring(imgurl.LastIndexOf('/')+1,imgurl.Length- imgurl.LastIndexOf('/')-1);


            // 使用前請確保AK和BUCKET正確,否則此函數會拋出異常(比如code612/631等錯誤)
            Qiniu.Common.Config.AutoZone(accessKey, bucket, false);


            // 上傳策略,參見 
            // https://developer.qiniu.com/kodo/manual/put-policy
            PutPolicy putPolicy = new PutPolicy();
            // 如果需要設置為"覆蓋"上傳(如果雲端已有同名文件則覆蓋),請使用 SCOPE = "BUCKET:KEY"
             putPolicy.Scope = bucket + ":" + saveKey;
            putPolicy.Scope = bucket;
            // 上傳策略有效期(對應於生成的憑證的有效期)          
            putPolicy.SetExpires(3600);
            // 上傳到雲端多少天後自動刪除該文件,如果不設置(即保持預設預設)則不刪除
            //putPolicy.DeleteAfterDays = 1;

            // 生成上傳憑證,參見
            // https://developer.qiniu.com/kodo/manual/upload-token            
            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())
                {
                    // 請不要使用UploadManager的UploadStream方法,因為此流不支持查找(無法獲取Stream.Length)
                    // 請使用FormUploader或者ResumableUploader的UploadStream方法
                    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();
            //https://www.xcxdh666.com/pageList.htm?pageNum=0  dataList
            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);//HttpWebRequest 請求頁面
                if (str != null)
                {
                    result = str.JsonConvert<Result>();  //string   的序列化擴展方法
                }

                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 = QiniuUplod($"http://img.xcxdh666.com/wxappnav/{i.saomaUrl}"),
                            Summary = i.sum,
                            LogoUrl = QiniuUplod($"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);
        }
    }

  

 

ok  到這裡就全部抓取完成

         這裡附上 展示地址  http://siyouku.cn/Applet

 

博主網址:http://www.siyouku.cn

本文永久更細地址:http://siyouku.cn/article/6806.html


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 引用DLL: WPFToolkit WPFVisifire.Charts.dll WPFVisifire.Gauges.dll 1、柱狀圖 代碼: public void BindChart1() { List<string> colorList = new List<string>(); List ...
  • 一、擴展方法的語法 在視圖中使用擴展方法的時候 如果擴展方法定義的類在其他命名空間,需要首先引用該命名空間,才能使用該擴展方法 static class 靜態類名 { static 返回類型 擴展方法名(this 擴展的類型 對象名,[其他參數列表]) { //擴展方法代碼 } } eg1:給Str ...
  • 一。關於安裝 1.可以直接通過vs自帶的Nuget包管理器來搜索下載,直接搜索“NLog”: 註意,除了要安裝第一個之外,一定要安裝“NLog.Config”,否則無法在項目中正常使用NLog的配置文件。 二。配置NLog。 1.打開NLog.config文件,在<targets>標簽內加入對應的日 ...
  • 本文博主將從零開始,一步一步的告訴大家如何在前端用bootstrap Table插件展示一個表格 首先,要下載bootstrap Table插件所必須的js,地址:https://github.com/wenzhixin/bootstrap-table 官方文檔地址:http://bootstrap ...
  • 密碼強度有4個狀態,分別如下圖。 無密碼狀態 密碼低級狀態 密碼中級狀態 密碼高級狀態 實現的代碼主要如下: HTML代碼 <input name="password" type="PassWord" onKeyUp="CheckIntensity(this.value)"><table borde ...
  • 根據http和ftp圖片地址獲取對應圖片的縮略圖和原圖 public class GetBitmapImageClass { public BitmapSource GetImageHttp(string url,int width) { var image = new BitmapImage(); ...
  • 首先列出HttpHelper類 /// <summary> /// Http操作類 /// </summary> public class HttpHelper { private static log4net.ILog mLog = log4net.LogManager.GetLogger("Ht ...
  • 前言 關於 ASP.NET Core 2.0 的新功能可以查看我的 "這篇博客" 。 這篇文章是 Priview2中的一些改進。 .NET Core 2.0 Preview2 Azure 的改進 Docker 鏡像轉移到了 Debian Stretch 修複並支持 macOS High Sierra ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...