整合營銷服務商

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

          免費咨詢熱線:

          net下功能強大的HTML解析庫HtmlAgilit

          net下功能強大的HTML解析庫HtmlAgilityPack,數據抓取必備

          tmlAgilityPack是一個.NET平臺下的HTML解析庫,它可以將HTML文本轉換為DOM文檔對象,方便我們對HTML文本進行操作和分析。HtmlAgilityPack支持XPath語法,可以通過XPath表達式來獲取DOM節點,同時還提供了一些方便的API,可以實現HTML文本的解析、修改、生成等功能。本文將詳細介紹HtmlAgilityPack的使用及使用方法。

          一、HtmlAgilityPack的安裝

          HtmlAgilityPack是一個NuGet包,可以通過Visual Studio的NuGet包管理器來安裝。具體步驟如下:

          1. 打開Visual Studio,打開要安裝HtmlAgilityPack的項目。
          2. 在“解決方案資源管理器”中右鍵單擊項目,選擇“管理NuGet程序包”。
          3. 在“NuGet程序包管理器”中搜索“HtmlAgilityPack”,選擇“安裝”。
          4. 等待安裝完成。

          安裝完成后,就可以在項目中使用HtmlAgilityPack了。

          二、HtmlAgilityPack的使用

          1. 加載HTML文本

          使用HtmlAgilityPack解析HTML文本的第一步是將HTML文本加載到一個HtmlDocument對象中。可以通過以下代碼來實現:

          HtmlDocument doc=new HtmlDocument();
          doc.LoadHtml(htmlText);

          其中,htmlText是要解析的HTML文本。LoadHtml方法會將HTML文本解析成一個DOM文檔對象,并存儲在doc對象中。

          1. 獲取DOM節點

          HtmlAgilityPack提供了一些方法來獲取DOM節點,例如GetElementById、GetElementsByTagName、SelectSingleNode、SelectNodes等。這些方法都接受一個XPath表達式作為參數,用來指定要獲取的節點。以下是一些示例代碼:

          // 獲取id為"content"的節點
          HtmlNode contentNode=doc.GetElementById("content");
          
          // 獲取所有的a標簽
          HtmlNodeCollection aNodes=doc.DocumentNode.SelectNodes("//a");
          
          // 獲取第一個p標簽
          HtmlNode pNode=doc.DocumentNode.SelectSingleNode("//p");

          其中,XPath表達式的語法與XML的XPath語法相同。在這里不再詳細介紹。

          1. 修改DOM節點

          HtmlAgilityPack提供了一些方法來修改DOM節點,例如SetAttributeValue、InnerHtml、OuterHtml等。以下是一些示例代碼:

          // 修改id為"content"的節點的class屬性
          contentNode.SetAttributeValue("class", "new-class");
          
          // 修改第一個p標簽的內容
          pNode.InnerHtml="這是新的內容";
          
          // 修改第一個a標簽的href屬性
          HtmlNode aNode=aNodes[0];
          aNode.SetAttributeValue("href", "http://www.example.com");
          1. 生成HTML文本

          HtmlAgilityPack還可以將DOM文檔對象轉換為HTML文本。可以通過以下代碼來實現:

          string newHtmlText=doc.DocumentNode.OuterHtml;

          其中,OuterHtml屬性返回DOM文檔對象的HTML文本表示。

          三、HtmlAgilityPack的功能實例

          下面將通過一些具體的實例來演示HtmlAgilityPack的使用方法。

          1. 獲取頁面標題

          以下代碼演示了如何獲取頁面標題:

          HtmlDocument doc=new HtmlDocument();
          doc.LoadHtml(htmlText);
          
          HtmlNode titleNode=doc.DocumentNode.SelectSingleNode("//title");
          string title=titleNode.InnerHtml;

          其中,htmlText是要解析的HTML文本。首先,將HTML文本加載到一個HtmlDocument對象中。然后,通過XPath表達式“//title”獲取頁面標題節點。最后,通過InnerHtml屬性獲取標題的內容。

          1. 獲取頁面中的所有圖片

          以下代碼演示了如何獲取頁面中的所有圖片:

          HtmlDocument doc=new HtmlDocument();
          doc.LoadHtml(htmlText);
          
          HtmlNodeCollection imgNodes=doc.DocumentNode.SelectNodes("//img");
          foreach (HtmlNode imgNode in imgNodes)
          {
              string src=imgNode.GetAttributeValue("src", "");
              Console.WriteLine(src);
          }

          首先,將HTML文本加載到一個HtmlDocument對象中。然后,通過XPath表達式“//img”獲取所有圖片節點。最后,遍歷所有圖片節點,獲取每個節點的src屬性。

          1. 獲取頁面中的所有鏈接

          以下代碼演示了如何獲取頁面中的所有鏈接:

          HtmlDocument doc=new HtmlDocument();
          doc.LoadHtml(htmlText);
          
          HtmlNodeCollection aNodes=doc.DocumentNode.SelectNodes("//a");
          foreach (HtmlNode aNode in aNodes)
          {
              string href=aNode.GetAttributeValue("href", "");
              Console.WriteLine(href);
          }

          首先,將HTML文本加載到一個HtmlDocument對象中。然后,通過XPath表達式“//a”獲取所有鏈接節點。最后,遍歷所有鏈接節點,獲取每個節點的href屬性。

          1. 修改頁面中的所有鏈接

          以下代碼演示了如何將頁面中的所有鏈接修改為指定的鏈接:

          HtmlDocument doc=new HtmlDocument();
          doc.LoadHtml(htmlText);
          
          HtmlNodeCollection aNodes=doc.DocumentNode.SelectNodes("//a");
          foreach (HtmlNode aNode in aNodes)
          {
              aNode.SetAttributeValue("href", "http://www.example.com");
          }
          
          string newHtmlText=doc.DocumentNode.OuterHtml;

          首先,將HTML文本加載到一個HtmlDocument對象中。然后,通過XPath表達式“//a”獲取所有鏈接節點。最后,遍歷所有鏈接節點,將它們的href屬性修改為指定的鏈接。最后,通過OuterHtml屬性將修改后的DOM文檔對象轉換為HTML文本。

          本文介紹了HtmlAgilityPack的使用及使用方法。HtmlAgilityPack是一個功能強大、易用性高的HTML解析庫,可以方便地對HTML文本進行操作和分析。通過本文的介紹,讀者可以了解HtmlAgilityPack的基本用法,并可以根據需要自行擴展。

          個問題是我們作為程序員幾乎每天都要進行的操作,那它有多少種方式呢,我們這里就這點來說一說。

          解析的四種方式

          • 官方解析
          • 谷歌 Gson 解析
          • 阿里巴巴 FastJson 解析
          • Jackson 解析

          案例實操

          這里我們就只討論對象與 json 如何互相轉換。

          這里我們先創建好 Maven 項目,方便引入依賴,通過單元測試來實際檢驗我們不同的解析方式。

          下面我們都使用 User 對象,先創建好我們需要的類。

          User.java

          package org.example;
          
          public class User {
          
              private String name;
              private String sex;
              private Integer age;
          
              public User() {
              }
          
              public User(String name, String sex, Integer age) {
                  this.name=name;
                  this.sex=sex;
                  this.age=age;
              }
          
              public String getName() {
                  return name;
              }
          
              public void setName(String name) {
                  this.name=name;
              }
          
              public String getSex() {
                  return sex;
              }
          
              public void setSex(String sex) {
                  this.sex=sex;
              }
          
              public Integer getAge() {
                  return age;
              }
          
              public void setAge(Integer age) {
                  this.age=age;
              }
          
              @Override
              public String toString() {
                  return "User{" +
                          "name='" + name + '\'' +
                          ", sex='" + sex + '\'' +
                          ", age=" + age +
                          '}';
              }
              
          }
          
          12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152

          官方解析

          官方提供的 json 解析方式,比較繁瑣,所以用的人比較少。

          第一步,引入依賴:

          <!--json官方-->
          <dependency>
              <groupId>org.json</groupId>
              <artifactId>json</artifactId>
              <version>20160810</version>
          </dependency>
          123456

          第二步,編寫測試代碼:

          package org.example;
          
          import org.json.JSONObject;
          import org.springframework.stereotype.Component;
          
          /**
           * 官方解析
           */
          @Component
          public class JsonTest1 {
          
              /**
               * 對象轉json
               * @param user
               * @return
               */
              public String userToJson(User user){
                  JSONObject jsonObject=new JSONObject(user);
                  String jsonStr=jsonObject.toString();
                  return jsonStr;
              }
          
              /**
               * json轉對象
               * @param json
               * @return
               */
              public User userFromJson(String json){
                  JSONObject jsonObject=new JSONObject(json);
                  String name=jsonObject.getString("name");
                  String sex=jsonObject.getString("sex");
                  int age=jsonObject.getInt("age");
                  User user=new User(name,sex,age);
                  return user;
              }
          
          }
          12345678910111213141516171819202122232425262728293031323334353637

          第三步,單元測試:

          package org.example;
          
          import org.junit.Test;
          import org.junit.runner.RunWith;
          import org.springframework.beans.factory.annotation.Autowired;
          import org.springframework.test.context.ContextConfiguration;
          import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
          
          @RunWith(SpringJUnit4ClassRunner.class)
          @ContextConfiguration(locations="classpath:spring.xml")
          public class JsonTest1Test {
          
              @Autowired
              private JsonTest1 jsonTest1;
          
              @Test
              public void userToJson() {
                  User user=new User("秦明", "man", 18);
                  String json=jsonTest1.userToJson(user);
                  System.out.println(json);
              }
          
              @Test
              public void userFromJson() {
                  String json="{\"sex\":\"man\",\"name\":\"秦明\",\"age\":18}";
                  User user=jsonTest1.userFromJson(json);
                  System.out.println(user);
              }
          }
          1234567891011121314151617181920212223242526272829

          第四步,查看結果:

          [外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-NMZ83TVw-1598863238953)(https://imgkr.cn-bj.ufileos.com/76db02f6-dd02-4e23-a6dd-8ce988bc5c62.png)]

          [外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-YJyh0WBY-1598863238960)(https://imgkr.cn-bj.ufileos.com/847c4325-a895-4c13-b3d9-4f12e4876720.png)]

          谷歌 Gson 解析

          第一步,引入依賴:

          <!--gson-->
          <dependency>
              <groupId>com.google.code.gson</groupId>
              <artifactId>gson</artifactId>
              <version>2.8.5</version>
          </dependency>
          123456

          第二步,編寫測試代碼:

          package org.example;
          
          import com.google.gson.Gson;
          import org.springframework.stereotype.Component;
          
          /**
           * gson解析
           */
          @Component
          public class JsonTest2 {
          
              /**
               * 對象轉json
               * @param user
               * @return
               */
              public String userToJson(User user){
                  Gson gson=new Gson();
                  String json=gson.toJson(user);
                  return json;
              }
          
              /**
               * json轉對象
               * @param json
               * @return
               */
              public User userFromJson(String json){
                  Gson gson=new Gson();
                  User user=gson.fromJson(json, User.class);
                  return user;
              }
          
          }
          12345678910111213141516171819202122232425262728293031323334

          第三步,單元測試:同上(下面第三步和第四步和上面都一樣,所以下面省略)

          第四步,查看結果:同上

          阿里巴巴 FastJson 解析

          這個解析方式是由阿里巴巴開發出來的,效率最高,深受大家喜愛,功能強大,想要更深入學習的可以查看 FastJson 官網API。

          第一步,引入依賴:

          <!--fastjson-->
          <dependency>
              <groupId>com.alibaba</groupId>
              <artifactId>fastjson</artifactId>
              <version>1.2.47</version>
          </dependency>
          123456

          第二步,編寫測試代碼:

          package org.example;
          
          import com.alibaba.fastjson.JSONObject;
          import org.springframework.stereotype.Component;
          
          /**
           * fastjson解析
           */
          @Component
          public class JsonTest3 {
          
              /**
               * 對象轉json
               * @param user
               * @return
               */
              public String userToJson(User user){
                  String json=JSONObject.toJSONString(user);
                  return json;
              }
          
              /**
               * json轉對象
               * @param json
               * @return
               */
              public User userFromJson(String json){
                  User user=JSONObject.parseObject(json,User.class);
                  return user;
              }
          
          }
          1234567891011121314151617181920212223242526272829303132

          Jackson 解析

          這個解析方式是在目前我們使用最流行的一些框架比如 SSM、SpringBoot,其內部的 json 解析使用的就是 Jackson,但往往我們會另外引入 FastJson 來使用,因為速度更快。

          第一步,引入依賴:

          <!--jackson-->
          <dependency>
              <groupId>com.fasterxml.jackson.core</groupId>
              <artifactId>jackson-databind</artifactId>
              <version>2.9.8</version>
          </dependency>
          123456

          第二步,編寫測試代碼:

          package org.example;
          
          import com.fasterxml.jackson.core.JsonProcessingException;
          import com.fasterxml.jackson.databind.ObjectMapper;
          import org.springframework.stereotype.Component;
          
          import java.io.IOException;
          
          /**
           * jackson解析
           */
          @Component
          public class JsonTest4 {
          
              /**
               * 對象轉json
               * @param user
               * @return
               */
              public String userToJson(User user) throws JsonProcessingException {
                  ObjectMapper objectMapper=new ObjectMapper();
                  String json=objectMapper.writeValueAsString(user);
                  return json;
              }
          
              /**
               * json轉對象
               * @param json
               * @return
               */
              public User userFromJson(String json) throws IOException {
                  ObjectMapper objectMapper=new ObjectMapper();
                  User user=objectMapper.readValue(json, User.class);
                  return user;
              }
          
          }
          12345678910111213141516171819202122232425262728293031323334353637

          擴展~JSON的誕生

          JSON 的誕生是因為 XML 整合到 HTML 中各個瀏覽器實現的細節不盡相同,所以道格拉斯·克羅克福特(Douglas Crockford)和 奇普·莫寧斯達(Chip Morningstar)一起從 JS 的數據類型中提取了一個子集,作為新的數據交換格式,因為主流的瀏覽器使用了通用的 JavaScript 引擎組件,所以在解析這種新數據格式時就不存在兼容性問題,于是他們將這種數據格式命名為 “JavaScript Object Notation”,縮寫為 JSON,由此 JSON 便誕生了!

          著崗位競爭的越來越激烈,而設計師掌握的技能要求也越多,設計師不光只會設計,而且也要懂(會)代碼(會手寫代碼更會加金的),所以我們要做一位懂代碼設計師,還好Jason在大學學過代碼,畢業也做過一段時間的設計+前端,我將我在代碼方面的知識總結分享給大家,趕緊往下看吧

          基礎認識

          html語句是由標簽+屬性構成的

          html 標簽由開始標簽和結束標簽組成,開始標簽是被括號包圍的元素名,結束標簽是被括號包圍的斜杠和元素名,但某些 html 元素沒有結束標簽,比如 <br />、<img>,這類標簽稱為單標簽。


          屬性的語法

          1、寫在標簽的<>內,而且在標簽代碼之后,如<p *></p>

          2、屬性名=""(一定得是英文的引號,不能是中文的引號。其實不用引號對于它的顯示沒有影響,但加上引號為標準做法)

          如 align="center" align為屬性名 center left right是屬性值

          3、有的標簽沒有任何屬性(<br>),有的標簽雖然有屬性,但可以不加上也不影響它的使用(<p></p>),但有的標簽則是必須與屬性連用方能正常顯示(<a></a>)


          網頁的基本結構

          <html>

          <head></head>

          <body></body>

          </html>

          html,head,body 是html代碼必不可少的三大標簽,其中

          html標簽:用于定義html文件的標簽,這個標簽意味著這個文件是一個html文件

          head標簽:里面的內容不能再瀏覽器中直接呈現,但它會用后臺運作的方式為html頁面提供種種功能

          body標簽:里面出現的內容會在瀏覽器中得到直接呈現,供讀者瀏覽

          必須要記住的標簽和屬性

          放在<head></head>之間的

          <title> </title>

          <title> </title>標簽定義html文檔的標題。<title>與</title>之間的內容將顯示在瀏覽器窗口的標題欄。


          <meta>標簽

          <meta>標簽類可以插入很多很有用的元素屬性。常用的有以下四種:

          <meta name="keywords" content="study,computer">

          用來標記搜索引擎在搜索你的頁面時所取出的關鍵詞。

          <meta name="author" content=“wutao">

          用來標記文檔的作者。

          <meta http-equiv=“content-type” content=“text/html; charset=gb2312”>

          用來標記你的頁面的解碼方式。

          <meta http-equiv=“refresh” content=“5;url=http://www.xnc.edu.cn”>

          用來自動刷新網頁




          放在<body></body>之間的

          與文字相關的標簽

          文字標題

          <h#> ... </h#>

          #=1, 2, 3, 4, 5, 6

          段(paragraph) <p>

          空白占位符

          換行<br>

          文字的分區顯示

          <div align=#> ... </div> (#=left, center, right)

          <i> 顯示斜體文本效果。

          <b> 呈現粗體文本效果。

          <big> 呈現大號字體效果。

          <small> 呈現小號字體效果。


          無序列表

          無序列表是由<ul>和<li>元素定義的:

          <ul>

          <li>sports</li>

          <li> food </li>

          <li> drink </li>

          <li> friends </li>

          </ul>

          <ul>和<li>中均可加入type屬性,type的屬性值有:disc(圓)、circle(圓圈)、square(方塊)

          有序列表 start 值為數字

          有序列表由<ol>和<li>定義:

          <ol>

          <li>sports</li>

          <li> drink</li>

          <li> friends</li>

          </ol>

          ....................................................................

          我的微信公眾號:UI嚴選 —越努力,越幸運


          主站蜘蛛池模板: 国产经典一区二区三区蜜芽| 国内精品视频一区二区三区| 国产精品毛片一区二区| 国产一区二区免费| 亚洲一区二区视频在线观看| 国产成人一区二区三区高清 | 无码人妻精品一区二区三区99仓本 | 亚洲福利视频一区二区三区| 日本精品高清一区二区| 亚洲视频在线一区二区| 日韩一区二区超清视频| 一区二区三区在线看| 精品国产一区二区三区久| 国产成人无码一区二区在线观看 | 亚洲熟妇无码一区二区三区导航| 精品国产乱子伦一区二区三区| 好吊视频一区二区三区| 国产suv精品一区二区6| 国产精品一区二区综合| 亚洲日韩AV一区二区三区四区 | 日本一区二区三区四区视频 | 玩弄放荡人妻一区二区三区| 日本一区二区三区在线观看 | 亚洲av成人一区二区三区在线观看| 国产精品被窝福利一区| 美女福利视频一区二区 | 国产午夜精品免费一区二区三区| 人妻无码一区二区三区| 久久精品午夜一区二区福利 | 无码毛片一区二区三区视频免费播放| 精品人妻AV一区二区三区| 日本夜爽爽一区二区三区| 色一乱一伦一图一区二区精品| 97久久精品无码一区二区天美 | 麻豆视频一区二区三区| 亚洲视频一区在线观看| 中文字幕不卡一区| 久久久久人妻精品一区三寸| 亚洲日本一区二区三区在线不卡 | 国产一区二区高清在线播放| 精品国产福利第一区二区三区|