91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 7.21KB
    文件類型: .cs
    金幣: 1
    下載: 0 次
    發布日期: 2020-12-26
  • 語言: C#
  • 標簽: HTML??

資源簡介

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using HtmlAgilityPack;
using System.Net;

namespace PacksModels
{
    public class HtmlAgilityPackHelper
    {
        public static string getHtml(string url, string charSet)
        {
            string html = QueryHtml(url, charSet);
            while (html == "isExp"||html==null)
            {
                html = QueryHtml(url, charSet);
            }

            return html;
        }

        //獲取網頁源碼
        public static string QueryHtml(string url, string charSet)
        {
            bool isExp = false;

            Byte[] pageData = null;
            XWebClient wc = new XWebClient();
            try
            {
                if (url == null || url.Trim() == "")
                    return null;
                //XWebClient wc = new XWebClient();
                wc.Credentials = CredentialCache.DefaultCredentials;
                wc.Headers["User-Agent"] = "blah";

                //Helpers.WriteLog("下載html資源開始:" url, "Log\\error.log");
                pageData = wc.DownloadData(url);
                //Helpers.WriteLog("下載html資源結束:" url, "Log\\error.log");

            }
            catch (WebException ex)
            {             
                isExp = true;
                if (ex.ToString().Contains("未能解析此遠程名稱"))
                {
                    Helpers.WriteLog("未能解析此遠程名稱,請檢查網絡,正在重試下載此資源...:" DateTime.Now.ToString() ":" url, "Log\\error.log");
                }
                else if (ex.ToString().Contains("操作超時") || ex.ToString().Contains("操作已超時"))
                {
                    Helpers.WriteLog("操作超時,請檢查資源請求頻率,正在重試下載此資源...:" DateTime.Now.ToString() ":" url, "Log\\error.log");
                }
                else
                {
                    Helpers.WriteLog("發送請求期間異常,請檢查網絡:" DateTime.Now.ToString() ":" ex.ToString(), "Log\\error.log");
                }
                //釋放資源
                wc.Dispose();
                Helpers.WriteLog("釋放資源等1分鐘重試:" DateTime.Now.ToString() ":" url, "Log\\error.log");//
                System.Threading.Thread.Sleep(60000); //延時30秒
                Helpers.WriteLog("開始重試:" DateTime.Now.ToString() ":" url, "Log\\error.log");//
            }
            if (pageData == null)
            {
                return null;
            }
            else if (isExp)
            {
                return "isExp";
            }

            string charset = "";
            var r_utf8 = new System.IO.StreamReader(new System.IO.MemoryStream(pageData), Encoding.UTF8); //將html放到utf8編碼的StreamReader內
            var r_gbk = new System.IO.StreamReader(new System.IO.MemoryStream(pageData), Encoding.Default); //將html放到gbk編碼的StreamReader內
            var t_utf8 = r_utf8.ReadToEnd(); //讀出html內容
            var t_gbk = r_gbk.ReadToEnd(); //讀出html內容

            bool aa = isLuan(t_utf8);
            bool bb = isLuan(t_gbk);

            bool aa1 = isLuan1(t_utf8);
            bool bb1 = isLuan1(t_gbk);

            if (!isLuan(t_utf8)) //判斷utf8是否有亂碼
            {
                charset = "utf-8";
            }
            else
            {
                charset = "gbk";
            }

            //System.Threading.Thread.Sleep(60000); //延時1分鐘

            return Encoding.GetEncoding(charset).GetString(pageData);
        }


        /// <summary>
        /// 判斷是否有亂碼
        /// </summary>
        /// <param name="txt">需判斷的文本</param>
        /// <returns></returns>
        private static bool isLuan(string txt)
        {
            var bytes = Encoding.UTF8.GetBytes(txt);
            //239 191 189
            for (var i = 0; i < bytes.Length; i )
            {
                if (i < bytes.Length - 3)
                    if (bytes[i] == 239 && bytes[i 1] == 191 && bytes[i 2] == 189)
                    {
                        return true;
                    }
            }
            return false;
        }


        private static bool isLuan1 (string txt)
        {
            var bytes = Encoding.ASCII.GetBytes(txt);
            //239 191 189
            for (var i = 0; i < bytes.Length; i )
            {
                //if (i < bytes.Length - 3)
                //    if (bytes[i] == 239 && bytes[i 1] == 191 && bytes[i 2] == 189)
                //    {
                //        return true;
                //    }

                if (bytes[i]>255)
                {
                    return true;
                }
            }
            return false;
        }


        /**///// <summary>
        /// 判斷句子中是否含有中文
        /// </summary>
        /// <param >字符串</param>
        private static bool WordsIScn(string words)
        {
            string TmmP;
            for (int i = 0; i < words.Length; i )
            {
                TmmP = words.Substring(i, 1);
                byte[] sarr = System.Text.Encoding.GetEncoding("gb2312").GetBytes(TmmP);
                if (sarr.Length == 2)
                {
                    return true;
                }
            }
            return false;
        }



        /// <summary>
        /// 獲得html代碼塊的節點集合
        /// </summary>
        /// <param name="url"></param>
        /// <param name="xpath"></param>
        /// <returns></returns>
        public static HtmlNodeCollection GetHtmlNodes(string url, string xpath)
        {
            HtmlNodeCollection navNodes = null;
            try
            {
                //獲取html源碼
                string htmlStr = getHtml(url.Trim(), "");
                //實例化HtmlAgilityPack.HtmlDocument對象
                HtmlDocument doc = new HtmlDocument();
                //載入HTML
                doc.LoadHtml(htmlStr);

                //根據Xpath節點NODE的ID獲取節點集
                navNodes = doc.DocumentNode.SelectNodes(xpath);
            }
            catch (Exception ex)
            {
                Helpers.WriteLog("獲取節點集異常:" ex.ToString() ":" url, "Log\\error.log");
            }
            return navNodes;
        }

        /// <summary>
        /// 獲得html代碼的節點
        /// </summary>
        /// <param name="url"></param>
        /// <param name="xpath"></param>
        /// <returns></returns>
        public static HtmlNode GetNode(HtmlDocument doc, string xpath)
        {
            //根據節點
            HtmlNode navNode = null;
            try
            {
                navNode = doc.DocumentNode.SelectSingleNode(xpath);
            }
            catch (Exception ex)
            {
                Helpers.WriteLog("獲取單節點異常:" ex.ToString(), "Log\\error.log");
            }
            return navNode;
        }








    }
}

資源截圖

代碼片段和文件信息

using?System;
using?System.Collections.Generic;
using?System.Linq;
using?System.Text;
using?System.Threading.Tasks;
using?HtmlAgilityPack;
using?System.Net;

namespace?PacksModels
{
????public?class?HtmlAgilityPackHelper
????{
????????public?static?string?getHtml(string?url?string?charSet)
????????{
????????????string?html?=?QueryHtml(url?charSet);
????????????while?(html?==?“isExp“||html==null)
????????????{
????????????????html?=?QueryHtml(url?charSet);
????????????}

????????????return?html;
????????}

????????//獲取網頁源碼
????????public?static?string?QueryHtml(string?url?string?charSet)
????????{
????????????bool?isExp?=?false;

????????????Byte[]?pageData?=?null;
????????????XWebClient?wc?=?new?XWebClient();
????????????try
????????????{
???????????????

評論

共有 條評論