整合營銷服務(wù)商

          電腦端+手機端+微信端=數(shù)據(jù)同步管理

          免費咨詢熱線:

          C# 正則獲取網(wǎng)頁內(nèi)容, 抓取html源代碼里的 title

          C#中,你可以使用System.Net.Http.HttpClient來從網(wǎng)頁獲取HTML內(nèi)容,然后使用System.Text.RegularExpressions.Regex來解析和提取HTML中的<title>標(biāo)簽內(nèi)容。以下是一個簡單的示例,演示了如何執(zhí)行此操作:

          csharpusing System;
          using System.Net.Http;
          using System.Text.RegularExpressions;
          using System.Threading.Tasks;
          
          class Program
          {
              static readonly HttpClient client = new HttpClient();
          
              static async Task Main(string[] args)
              {
                  try
                  {
                      // 要抓取內(nèi)容的網(wǎng)頁URL
                      string url = "http://example.com";
                      
                      // 發(fā)送HTTP GET請求獲取網(wǎng)頁內(nèi)容
                      string htmlContent = await client.GetStringAsync(url);
          
                      // 正則表達(dá)式,用于匹配<title>標(biāo)簽內(nèi)的內(nèi)容
                      string titlePattern = @"<title>(.+?)</title>";
          
                      // 使用Regex.Match方法查找匹配項
                      Match match = Regex.Match(htmlContent, titlePattern);
          
                      // 如果找到了匹配項
                      if (match.Success)
                      {
                          // 提取<title>標(biāo)簽內(nèi)的內(nèi)容
                          string title = match.Groups[1].Value;
          
                          // 輸出提取到的title
                          Console.WriteLine("網(wǎng)頁標(biāo)題: " + title);
                      }
                      else
                      {
                          Console.WriteLine("未找到<title>標(biāo)簽。");
                      }
                  }
                  catch (HttpRequestException e)
                  {
                      Console.WriteLine("\nException Caught!");
                      Console.WriteLine("Message :{0} ", e.Message);
                  }
              }
          }
          

          在這個示例中,我們首先創(chuàng)建了一個HttpClient實例,然后使用GetStringAsync方法異步獲取網(wǎng)頁的HTML內(nèi)容。接下來,我們定義了一個正則表達(dá)式titlePattern,用于匹配<title>標(biāo)簽中的文本。Regex.Match方法用于在HTML內(nèi)容中查找匹配項。如果找到匹配項,我們就從匹配結(jié)果中提取出標(biāo)題文本并打印出來。

          請注意,使用正則表達(dá)式解析HTML可能不是最可靠的方法,因為HTML的結(jié)構(gòu)可能會非常復(fù)雜,并且正則表達(dá)式可能無法正確處理所有情況。在實際應(yīng)用中,建議使用HTML解析庫(如AngleSharp或HtmlAgilityPack)來解析HTML文檔,這樣可以更健壯和準(zhǔn)確地提取所需的信息。

          下面是一個使用HtmlAgilityPack庫提取網(wǎng)頁標(biāo)題的示例:

          csharpusing System;
          using System.Net.Http;
          using HtmlAgilityPack;
          using System.Threading.Tasks;
          
          class Program
          {
              static readonly HttpClient client = new HttpClient();
          
              static async Task Main(string[] args)
              {
                  try
                  {
                      // 要抓取內(nèi)容的網(wǎng)頁URL
                      string url = "http://example.com";
                      
                      // 發(fā)送HTTP GET請求獲取網(wǎng)頁內(nèi)容
                      string htmlContent = await client.GetStringAsync(url);
          
                      // 加載HTML內(nèi)容到HtmlDocument對象
                      HtmlDocument doc = new HtmlDocument();
                      doc.LoadHtml(htmlContent);
          
                      // 使用XPath查詢找到<title>元素并獲取其InnerText
                      var titleNode = doc.DocumentNode.SelectSingleNode("//title");
                      if (titleNode != null)
                      {
                          string title = titleNode.InnerText;
                          Console.WriteLine("網(wǎng)頁標(biāo)題: " + title);
                      }
                      else
                      {
                          Console.WriteLine("未找到<title>標(biāo)簽。");
                      }
                  }
                  catch (HttpRequestException e)
                  {
                      Console.WriteLine("\nException Caught!");
                      Console.WriteLine("Message :{0} ", e.Message);
                  }
              }
          }
          

          在這個示例中,我們使用了HtmlAgilityPack庫來加載HTML內(nèi)容,并使用XPath查詢來定位<title>標(biāo)簽。這種方法通常比使用正則表達(dá)式更加穩(wěn)定和可靠。在使用HtmlAgilityPack之前,你需要通過NuGet安裝它:

          bashInstall-Package HtmlAgilityPack
          

          或者,如果你使用.NET Core CLI,可以運行:

          互聯(lián)網(wǎng)時代的今天,信息獲取變得越來越便捷。作為一名程序員,我在學(xué)習(xí)VBA編程的過程中,嘗試了使用VBA編寫網(wǎng)頁爬蟲,并掌握了DIV分組的技巧。通過親身體驗,我發(fā)現(xiàn)DIV分組是一個非常有效的方法,可以幫助我們更加高效地提取網(wǎng)頁中的數(shù)據(jù)。下面我將詳細(xì)介紹這一過程。

          1.分析網(wǎng)頁結(jié)構(gòu)

          在進(jìn)行網(wǎng)頁爬蟲之前,我們首先需要分析目標(biāo)網(wǎng)頁的結(jié)構(gòu)。通過查看網(wǎng)頁源代碼或使用開發(fā)者工具,我們可以找到需要提取的數(shù)據(jù)所在的DIV標(biāo)簽及其對應(yīng)的類名或ID。

          2.使用VBA編寫爬蟲程序

          接下來,我們可以使用VBA編寫爬蟲程序。首先,我們需要創(chuàng)建一個新的Excel文件,并添加一個新的模塊。然后,在模塊中編寫VBA代碼,包括創(chuàng)建HTTP請求、發(fā)送請求、獲取響應(yīng)等步驟。

          3.解析網(wǎng)頁內(nèi)容

          當(dāng)獲取到網(wǎng)頁的響應(yīng)后,我們需要解析網(wǎng)頁內(nèi)容并提取所需數(shù)據(jù)。這時,DIV分組技巧就派上用場了。通過使用VBA中的正則表達(dá)式或字符串處理函數(shù),我們可以根據(jù)DIV標(biāo)簽的類名或ID,將網(wǎng)頁內(nèi)容按照不同的DIV分組。

          4.提取數(shù)據(jù)

          在進(jìn)行DIV分組后,我們可以逐個分組提取所需數(shù)據(jù)。根據(jù)具體情況,我們可以使用VBA中的字符串處理函數(shù)、正則表達(dá)式或HTML解析庫來提取數(shù)據(jù)。通過循環(huán)遍歷每個DIV分組,并對每個分組進(jìn)行相應(yīng)的處理,我們可以將目標(biāo)數(shù)據(jù)提取出來,并存儲到Excel文件中。

          5.處理異常情況

          在實際爬取網(wǎng)頁的過程中,我們可能會遇到各種異常情況,例如網(wǎng)絡(luò)連接失敗、網(wǎng)頁結(jié)構(gòu)變化等。為了保證程序的健壯性,我們需要添加異常處理機制,對可能出現(xiàn)的異常情況進(jìn)行捕捉和處理。

          6.優(yōu)化爬蟲程序

          為了提高爬蟲程序的效率和穩(wěn)定性,我們可以進(jìn)行一些優(yōu)化措施。例如設(shè)置合理的請求間隔時間、使用多線程或異步編程技術(shù)、添加緩存機制等。通過這些優(yōu)化措施,我們可以更好地應(yīng)對大規(guī)模數(shù)據(jù)爬取和復(fù)雜網(wǎng)頁結(jié)構(gòu)的情況。

          7.遵守法律法規(guī)

          在進(jìn)行網(wǎng)頁爬蟲時,我們必須要遵守相關(guān)的法律法規(guī)。在爬取他人網(wǎng)站數(shù)據(jù)時,務(wù)必尊重他人權(quán)益,并遵守網(wǎng)站的使用條款和隱私政策。同時,我們應(yīng)該避免對網(wǎng)站造成過大的訪問壓力,以免影響正常的網(wǎng)站運行。

          8.學(xué)習(xí)資源推薦

          如果你對VBA網(wǎng)頁爬蟲感興趣,并希望學(xué)習(xí)更多相關(guān)知識,我在這里推薦幾個學(xué)習(xí)資源給你:《VBA程序設(shè)計與實踐》、《Python網(wǎng)絡(luò)數(shù)據(jù)采集》等書籍;還有一些優(yōu)秀的在線教程和視頻課程,例如慕課網(wǎng)、Coursera等。

          9.總結(jié)

          通過親身體驗,我深刻認(rèn)識到DIV分組技巧在VBA網(wǎng)頁爬蟲中的重要性。掌握了這一技巧后,我們可以更加靈活地提取網(wǎng)頁中的數(shù)據(jù),并將其應(yīng)用于各種實際場景中。但同時,我們也要遵守法律法規(guī),保護(hù)他人權(quán)益,并且不濫用爬蟲技術(shù)。希望本文對你在學(xué)習(xí)和使用VBA網(wǎng)頁爬蟲時有所幫助!

          eautifulsoup介紹:

          1. 是一個高效的網(wǎng)頁解析庫,可以從HTML或XML文件中提取數(shù)據(jù)
          2. 支持不同的解析器,比如,對HTML解析,對XML解析,對HTML5解析
          3. 就是一個非常強大的工具,爬蟲利器
          4. 一個靈活又方便的網(wǎng)頁解析庫,處理高效,支持多種解析器
          5. 利用它就不用編寫正則表達(dá)式也能方便的實現(xiàn)網(wǎng)頁信息的抓取


          第一步:安裝BeautifulSoup4,lxml

           pip install BeautifulSoup4
              BeautifulSoup 是一個可以從HTML或XML文件中提取數(shù)據(jù)的Python庫
          pip install lxml
              lxml 是一種使用 Python 編寫的解析庫,可以迅速、靈活地處理 XML 和 HTML


          第二步:導(dǎo)包,from bs4 import BeautifulSoup


          第三步:實例化對象

          html = """
          <html>
              <head>
                  <title>The Dormouse's story</title>
              </head>
              <body>
                  <p class="story">
                      Once upon a time there were three little sisters; and their names were
                      <a href="http://example.com/elsie" class="sister" id="link1">
                          <span>Elsie</span>
                      </a>
                      <a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> 
                      and
                      <a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>
                      and they lived at the bottom of a well.
                  </p>
                  <p class="story">...</p>
          """
          soup = BeautifulSoup(html, 'lxml')  # h:要解析的內(nèi)容  lxml:解析器
          知識補充:print(soup.prettify())  # 代碼補全


          第四步:打印

          一、通過標(biāo)簽選取,會返回包含標(biāo)簽本身及其里面的所有內(nèi)容

          # print(soup.head) # 包含head標(biāo)簽在內(nèi)的所有內(nèi)容
          # print(soup.p) # 返回匹配的第一個結(jié)果

          1.print(soup.head)打印結(jié)果:

          <head>

          <title>The Dormouse's story</title>

          </head>

          2.print(soup.p)打印結(jié)果:

          <p class="title" name="dromouse"><b><span>The Dormouse's story</span></b></p>


          二、打印標(biāo)簽中間的文本內(nèi)容,不包含<>

          # .string是屬性,作用是獲取字符串文本
          print(soup.html.head.title.string)
          print(soup.title.string)

          打印結(jié)果都為:The Dormouse's story


          三、打印標(biāo)簽名

           .name --獲取標(biāo)簽本身名稱  
           print(soup.title.name)

          打印結(jié)果為:title


          四、打印屬性的值

          .attrs[]  --通過屬性拿屬性的值 
          print(soup.p.attrs['name'])# 獲取p標(biāo)簽name屬性的屬性值
          print(soup.a.attrs['id']) # 獲取p標(biāo)簽id屬性的屬性值
          
          print(soup.a['id']) #第二種寫法
          print(soup.p['class']) # 以列表得形式保存
          print(soup.a['href'])  # 也是只返回第一個值

          1.print(soup.p.attrs['name'])打印結(jié)果:

          dromouse

          2.print(soup.p.attrs['id'])和print(soup.a['id'])打印結(jié)果:

          link1

          3.print(soup.p['class'])打印結(jié)果:

          ['title', 'asdas']

          4.print(soup.a['href'])打印結(jié)果:

          http://example.com/elsie


          五、打印父標(biāo)簽下的所有子標(biāo)簽

          .contents 獲取標(biāo)簽子節(jié)點,以列表形式返回
          .children 獲取子節(jié)點,返回的是一個list類型的迭代器
          
          print(soup.body.contents)  # a是p的子節(jié)點,獲取P標(biāo)簽所有子節(jié)點內(nèi)容 返回一個list
          print(soup.body.children) #返回的是一個list類型的迭代器

          1.print(soup.body.contents)的打印結(jié)果:

          ['\n', <p class="title asdas" name="dromouse"><b><span>The Dormouse's story</span></b></p>, '\n', <p class="story">Once upon a time there were three little sisters; and their names were

          <a class="sister" href="http://example.com/elsie" id="link1"><!-- Elsie --></a>,

          <a class="sister" href="http://example.com/lacie" id="link2">Lacie</a> and

          <a class="sister" href="http://example.com/tillie" id="link3">Tillie</a>;

          and they lived at the bottom of a well.</p>, '\n', <p class="story">...</p>, '\n']

          2.print(soup.body.children)的打印結(jié)果:

          <list_iterator object at 0x000002035ECC7088>


          .children 獲取子節(jié)點講解

          1.和for循環(huán)一起使用

          for i in soup.p.children:
          print(i)

          打印結(jié)果:


          主站蜘蛛池模板: 波多野结衣中文字幕一区| 无码人妻精品一区二区三18禁| 天堂va在线高清一区| 亚洲日本一区二区三区| 中文字幕亚洲乱码熟女一区二区| 亚洲一区二区视频在线观看| 一区二区不卡久久精品| 国产精品一区在线观看你懂的| 国产成人综合精品一区| 久久无码人妻精品一区二区三区| 国产成人高清视频一区二区| 亚洲成人一区二区| 亚洲日韩国产精品第一页一区| 国产精品一区二区三区免费| 国产丝袜视频一区二区三区| 日韩一区二区电影| 波多野结衣久久一区二区| 在线|一区二区三区四区| 波多野结衣一区二区三区高清av| 国产一区二区三区在线观看免费| 国产一区二区三区樱花动漫| 国产成人一区二区三区免费视频| 免费观看日本污污ww网站一区 | 亚洲综合激情五月色一区| 久热国产精品视频一区二区三区| 日韩视频在线一区| 久久国产高清一区二区三区| 亚洲韩国精品无码一区二区三区 | 国模极品一区二区三区| 国产一区二区在线观看麻豆| 国产精品免费一区二区三区| 国产AV一区二区三区传媒| 亚洲高清一区二区三区| 国产精品伦子一区二区三区| 久久免费视频一区| 中文字幕一区二区三区久久网站| 无码人妻精一区二区三区| 久久精品国产第一区二区| 91亚洲一区二区在线观看不卡| 免费高清av一区二区三区| 丝袜人妻一区二区三区|