整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          揭秘爬蟲黑科技:HTML Title標簽內容提取,輕松上手!

          一天,老板不滿地說:“喂,你這C#爬蟲怎么連標題都沒給我抓回來?我需要的是一份完整的報告,包括所有網頁的標題,趕緊給我重新抓一遍!”那一刻,我仿佛看到了老板眼中閃爍的怒火,感受到了他對我工作的失望。

          我仿佛看到了老板眼中閃爍的怒火,就像是火山即將爆發前的預兆。我心里咯噔一下,知道這次可能玩大了。

          我趕緊賠著笑臉說:“老板,真不好意思,這次是我的失誤。我馬上就去給您抓回那些‘逃跑’的標題!”

          其實我心里暗笑,因為那些標題我早就抓回來了,只是故意沒展示出來。這可是職場生存法則啊,不能一次交出所有秘密,得留點懸念,讓老板對你始終保持期待和好奇。你覺得這樣做對嗎?歡迎討論,哈哈!

          代碼其實很簡單:

          // 使用XPath查詢獲取title標簽
          HtmlNode titleNode = doc.DocumentNode.SelectSingleNode("//title");
          //這行代碼是使用C#的HtmlAgilityPack庫來從HTML文檔中提取<title>標簽的內容。
          //目的是從doc表示的HTML文檔中選擇第一個<title>標簽,并將這個標簽的節點對象賦值給titleNode變量。
          如果要獲取<title>標簽中的文本內容,這樣寫:
          string titleText = titleNode?.InnerText;
          這里,?.是一個null條件運算符,如果titleNode為null(也就是說沒有找到<title>標簽),
          則titleText會被賦值為null,否則,它會被賦值為<title>標簽中的文本內容。

          這個代碼是怎么使用的呢?下面我解釋下實現過程:

                  static string? ParseTitleData(string htmlContent)
                  {
                      if (string.IsNullOrEmpty(htmlContent))
                      {
                          return null;
                      }
                      HtmlDocument doc = new HtmlDocument();
                      doc.LoadHtml(htmlContent);
                      // 使用XPath查詢獲取title標簽
                      HtmlNode titleNode = doc.DocumentNode.SelectSingleNode("//title");
                      if (titleNode != null)
                      {
                          // 獲取title節點的文本內容
                          string titleText = titleNode.InnerText.Trim();
                          return "頁面標題: " + titleText;
                      }
                      else
                      {
                          // 如果沒有找到title標簽,返回null
                          return null;
                      }
                  }
          //這段代碼定義了一個名為 ParseTitleData 的靜態方法,
          //它接受一個 htmlContent 字符串作為輸入,并試圖從中解析出網頁的標題。
          //該方法使用 HtmlAgilityPack 庫來解析 HTML 內容。

          是不是很簡單?這個方法的目的是從給定的 HTML 內容中提取網頁的標題。如果成功找到標題,它會返回一個包含 "頁面標題: " 和實際標題的字符串。如果 HTML 內容為空、null 或不包含 <title> 標簽,它會返回 null。

          看效果:


          完整代碼是包括如何異步獲取網頁內容的。如果有朋友需要的話,請關注我并留言,今天就寫到這吧,太晚了,休息啦!

          ocument.write() 用法

          在JavaScript中document.write()函數可以向文檔寫入HTML表達式或JavaScript代碼,用法“document.write(exp1,exp2,exp3,....)”,該函數可接受任何多個參數,并將其寫入文檔中。

          document.write() 說明

          雖然根據 DOM 標準,該方法只接受單個字符串作為參數。

          我們通常按照兩種的方式使用 write() 方法:一是在使用該方在文檔中輸出 HTML,另一種是在調用該方法的的窗口之外的窗口、框架中產生新文檔。在第二種情況中,請務必使用 close() 方法來關閉文檔。

          document.write() 實例

           <html>
           <body>
           <script type="text/javascript">
           document.write("Hello World!");
           </script>
           </body>
           </html>
            

          以上就是JavaScript document.write() 用法的詳細內容。

          這里小編是一個有著10年工作經驗的前端高級工程師,關于web前端有許多的技術干貨,包括但不限于各大廠的最新面試題系列、前端項目、最新前端路線等。需要的伙伴可以私信我

          發送【前端資料】

          就可以獲取領取地址,免費送給大家。對于學習web前端有任何問題(學習方法,學習效率,如何就業)都可以問我。希望你也能憑自己的努力,成為下一個優秀的程序員

          、nuget 引用

          Select.HtmlToPdf

          2、方法

          • using SelectPdf;using System.Collections.Specialized;using System.IO;using System.Web;
            namespace BQoolCommon.Helpers.File{ public class WebToPdf { public WebToPdf() { //SelectPdf.GlobalProperties.LicenseKey = "your-license-key"; }
            /// <summary> /// 將 Html 轉成 PDF,並儲存成檔案 /// </summary> /// <param name="html">html</param> /// <param name="fileName">絕對路徑</param> public void SaveToFileByHtml(string html, string fileName) { var doc = SetPdfDocument(html); doc.Save(fileName); }
            /// <summary> /// 傳入 Url 轉成 PDF,並儲存成檔案 /// </summary> /// <param name="url">url</param> /// <param name="fileName">絕對路徑</param> /// <param name="httpCookies">Cookies</param> public void SaveToFileByUrl(string url, string fileName, NameValueCollection httpCookies) { var doc = SetPdfDocument(url, httpCookies); doc.Save(fileName); }
            /// <summary> /// 將 Html 轉成 PDF,並輸出成 byte[] 格式 /// </summary> /// <param name="html">html</param> /// <returns></returns> public byte[] GetFileByteByHtml(string html) { var doc = SetPdfDocument(html); return doc.Save(); }
            /// <summary> /// 傳入 Url 轉成 PDF,並輸出成 byte[] 格式 /// </summary> /// <param name="url">url</param> /// <param name="httpCookies">Cookies</param> /// <returns></returns> public byte[] GetFileByteByUrl(string url, NameValueCollection httpCookies) { var doc = SetPdfDocument(url, httpCookies); return doc.Save(); }
            /// <summary> /// 將 Html 轉成 PDF,並輸出成 Stream 格式 /// </summary> /// <param name="html">html</param> /// <returns></returns> public Stream GetFileStreamByHtml(string html) { var doc = SetPdfDocument(html); var pdfStream = new MemoryStream();
            doc.Save(pdfStream); pdfStream.Position = 0;
            return pdfStream; }
            /// <summary> /// 傳入 Url 轉成 PDF,並輸出成 Stream 格式 /// </summary> /// <param name="html">html</param> /// <returns></returns> public Stream GetFileStreamByUrl(string url, NameValueCollection httpCookies) { var doc = SetPdfDocument(url, httpCookies); var pdfStream = new MemoryStream();
            doc.Save(pdfStream); pdfStream.Position = 0;
            return pdfStream; }
            private PdfDocument SetPdfDocument(string html) { var converter = new HtmlToPdf();
            converter.Options.WebPageWidth = 1200; html = HttpUtility.HtmlDecode(html);
            return converter.ConvertHtmlString(html); }
            private PdfDocument SetPdfDocument(string url, NameValueCollection httpCookies) { var converter = new HtmlToPdf(); converter.Options.WebPageWidth = 1200;
            if (httpCookies != && httpCookies.Count != 0) { converter.Options.HttpCookies.Add(httpCookies); }
            return converter.ConvertUrl(url); }
            }}

          主站蜘蛛池模板: 日韩精品无码久久一区二区三| 爆乳无码AV一区二区三区| 亲子乱av一区区三区40岁| 亚洲一区二区三区在线| 91久久精品国产免费一区| 精品综合一区二区三区| 日美欧韩一区二去三区| 亚洲av高清在线观看一区二区| 久久国产精品一区| 亚洲综合一区国产精品| 国产亚洲情侣一区二区无码AV| 人妻无码视频一区二区三区 | 2020天堂中文字幕一区在线观| 国产伦精品一区二区三区免费下载 | 精品久久久中文字幕一区| 中文字幕一区二区三区永久| 99偷拍视频精品一区二区| 97久久精品一区二区三区| 一区二区三区久久精品| 国产精品夜色一区二区三区| 国产福利一区二区在线视频| 怡红院AV一区二区三区| 丝袜美腿一区二区三区| 亚洲一区爱区精品无码| 交换国产精品视频一区| 色婷婷AV一区二区三区浪潮 | 日韩精品中文字幕视频一区| 无码AV动漫精品一区二区免费| 亚洲永久无码3D动漫一区| 无码人妻精品一区二区三区久久久| 久久精品国产第一区二区三区| tom影院亚洲国产一区二区| 国产SUV精品一区二区88| 夜色阁亚洲一区二区三区| 中文国产成人精品久久一区| 无码日韩精品一区二区免费暖暖| 亚洲一区欧洲一区| 一区二区三区杨幂在线观看| 国产午夜精品一区二区三区| 久久精品日韩一区国产二区 | 精品乱码一区内射人妻无码|