整合營銷服務商

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

          免費咨詢熱線:

          從網頁源代碼中提取并驗證鏈接的有效性


          在網站維護和數據分析工作中,從網頁的HTML源代碼中提取鏈接并檢查其有效性是一項常見且重要的任務。無效的鏈接(即“死鏈接”)不僅影響用戶體驗,還可能對網站的搜索引擎排名產生負面影響。因此,識別并處理這些無效鏈接顯得尤為重要。本文將探討如何從網頁的HTML中查找鏈接,并檢查這些鏈接是否有效,同時輸出無效鏈接。

          一、鏈接提取過程

          HTML源代碼分析:

          介紹如何查看網頁的HTML源代碼。

          解釋如何從HTML中識別鏈接標簽,通常是<a>標簽。

          提取鏈接:

          使用HTML解析工具(如Python的BeautifulSoup庫)提取網頁中的所有鏈接。

          展示如何從<a>標簽的href屬性中獲取鏈接。

          二、鏈接有效性檢查

          檢查鏈接有效性的重要性:

          討論無效鏈接對網站用戶體驗和搜索引擎優化的影響。

          實現鏈接有效性檢查:

          介紹如何使用HTTP請求來檢查鏈接的有效性。

          解釋如何處理不同類型的HTTP響應狀態碼,如200表示有效,404表示無效等。

          三、實際操作示例

          工具選擇:

          推薦使用的工具,如Python配合BeautifulSoup和requests庫。

          代碼實現:

          提供一個簡單的Python腳本,演示如何從HTML中提取鏈接并檢查其有效性。

          四、案例分析

          示例網頁分析:

          選擇一個具有多個鏈接的示例網頁。

          展示如何提取鏈接并進行有效性檢查。

          結果處理:

          展示如何處理檢查結果,特別是如何標記和輸出無效鏈接。

          五、總結與建議

          總結:

          強調定期檢查網頁鏈接有效性的重要性。

          維護建議:

          提供網站維護者關于定期檢查鏈接、更新或刪除無效鏈接的建議。

          小結

          本文提供了一種有效的方法,用于從網頁源代碼中提取鏈接并驗證其有效性。這對于提高網站的用戶體驗和搜索引擎排名具有重要意義。通過適當的工具和技術,可以輕松地實現這一過程,保持網站鏈接的健康和有效性。

          示例代碼:使用Python檢查鏈接有效性

          python

          import requests

          from bs4 import BeautifulSoup

          # 獲取網頁內容

          url = "https://example.com"

          response = requests.get(url)

          html_content = response.text

          # 解析HTML并提取鏈接

          soup = BeautifulSoup(html_content, 'html.parser')

          links = [link.get('href') for link in soup.find_all('a') if link.get('href')]

          # 檢查鏈接有效性

          invalid_links = []

          for link in links:

          try:

          response = requests.head(link, allow_redirects=True, timeout=5)

          if response.status_code != 200:

          invalid_links.append(link)

          except requests.RequestException:

          invalid_links.append(link)

          # 輸出無效鏈接

          print("Invalid Links:", invalid_links)

          這段代碼首先從指定的網頁中提取所有鏈接,然后逐一檢查每個鏈接的有效性。對于響應狀態碼不是200的鏈接,以及在請求過程中出現異常的鏈接,都被視為無效鏈接并加以輸出。在實際應用中,為了避免對同一個鏈接進行復的檢查,可以對檢查過的鏈接狀態進行保存,在下一次的檢查中,可以直接套用之前的檢查結果。這只是一個簡單的示例,可根據實際的要求進行調整。



          于parseHTML函數代碼實在過于龐大,我這里就不一次性貼出源代碼了,大家可以前往(https://github.com/vuejs/vue/blob/dev/src/compiler/parser/html-parser.js)查看源代碼。

          我們來總結一下該函數的主要功能:

          1、匹配標簽的 "<" 字符

          匹配的標簽名稱不能是:script、style、textarea

          有如下情況:

          1、注釋標簽 /^<!\--/

          2、條件注釋 /^<!\[/

          3、html文檔頭部 /^<!DOCTYPE [^>]+>/i

          4、標簽結束 /^<\/ 開頭

          5、標簽開始 /^</ 開頭

          然后開始匹配標簽的屬性包括w3的標準屬性(id、class)或者自定義的任何屬性,以及vue的指令(v-、:、@)等,直到匹配到 "/>" 標簽的結尾。然后把已匹配的從字符串中刪除,一直 while 循環匹配。

          解析開始標簽函數代碼:

          function parseStartTag () {
             // 標簽的開始 如<div
              const start = html.match(startTagOpen)
              if (start) {
                const match = {
                  tagName: start[1], // 標簽名稱
                  attrs: [], // 標簽屬性
                  start: index // 開始位置
                }
                 // 減去已匹配的長度
                advance(start[0].length)
                let end, attr
                while (!(end = html.match(startTagClose)) && (attr = html.match(dynamicArgAttribute) || html.match(attribute))) {
                  attr.start = index
                  v
                  advance(attr[0].length)  
                  attr.end = index
                  match.attrs.push(attr) // 把匹配到的屬性添加到attrs數組
                }
                if (end) { // 標簽的結束符 ">"
                  match.unarySlash = end[1]
                  advance(end[0].length)  // 減去已匹配的長度
                  match.end = index  // 結束位置
                  return match
                }
              }
            }

          處理過后結構如下:

          接下來就是處理組合屬性,調用 “handleStartTag” 函數

           function handleStartTag (match) {
              const tagName = match.tagName // 標簽名稱
              const unarySlash = match.unarySlash // 一元標簽
              if (expectHTML) {
                if (lastTag === 'p' && isNonPhrasingTag(tagName)) {
                  // 解析標簽結束
                  parseEndTag(lastTag)
                }
                if (canBeLeftOpenTag(tagName) && lastTag === tagName) {
                  parseEndTag(tagName)
                }
              }
             // 是否為一元標簽
              const unary = isUnaryTag(tagName) || !!unarySlash
              const l = match.attrs.length
              // 標簽屬性集合
              const attrs = new Array(l)
              for (let i = 0; i < l; i++) {
                const args = match.attrs[i]
                const value = args[3] || args[4] || args[5] || ''
                const shouldDecodeNewlines = tagName === 'a' && args[1] === 'href' ? options.shouldDecodeNewlinesForHref : options.shouldDecodeNewlines
                attrs[i] = {
                  name: args[1], // 屬性名稱
                  value: decodeAttr(value, shouldDecodeNewlines) // 屬性值
                }
                if (process.env.NODE_ENV !== 'production' && options.outputSourceRange) {
                  // 開始位置
                  attrs[i].start = args.start + args[0].match(/^\s*/).length
                  // 結束位置
                  attrs[i].end = args.end
                }
              }
          
              if (!unary) {
                stack.push({ tag: tagName, lowerCasedTag: tagName.toLowerCase(), attrs: attrs, start: match.start, end: match.end })
                lastTag = tagName
              }
          		// 調用start函數
              if (options.start) {
                options.start(tagName, attrs, unary, match.start, match.end)
              }
            }

          我們簡單說一下最后調用的start函數的作用:

          1、判斷是否為svg標簽,并處理svg在ie下的兼容性問題

          2、遍歷標簽屬性,驗證其名稱是否有效

          3、標簽名是否為 style 或者 script ,如果在服務端會提示warn警告

          4、檢查屬性是否存在 v-for、v-if、v-once指令

          5、如果是更元素就驗證其合法性,不能是 slot 和 template 標簽,不能存在 v-for指令

          以上就是界面html模板的開始標簽的分析,接下來我們來分析如何匹配結束標簽。

          請看:Vue源碼全面解析三十 parseHTML函數(解析html(二)結束標簽)

          如有錯誤,歡迎指正,謝謝。

          .網站SEO優化常用標簽之TDK標簽

          TDK對每個SEOer來說都是熟悉的不能再熟悉的html標簽了.TDK分別表示Title、Keywords和Description三大最常見的優化標簽。Title頁面標題,keywords頁面關鍵詞、description頁面描述。

          百度算法更新后,除Title標簽外,Keywords、Description不參與排名,但是Description,嚴格意義上來說是除了title,其他兩個均為mate標簽的屬性。

          2.網站SEO優化常用標簽之heading標簽

          heading標簽也就是大家經常說的H標簽,它是對頁面總要部分的強調,一般用在標題、小標題、欄目名稱上。heading標簽從h1到h6共6對,強調程度遞減,經常使用的是h1、h2、h3這三個heading標簽,由于h4、h5、h6的強調作用較小以至可以忽略所有在網站優化SEO中基本上用不到。

          h1標簽是對頁面最重要部分的強調,一般用在頁面標題上。需要注意的是在同一個頁面中h1標簽只能出現一對,若在頁面中出現多個H1標簽將對SEO造成不利影響,而且h1到h6必須以正序的方式出現,按順序排列如:h1、h2、h3、h4,但不可以h3、h2這樣倒序出現。

          h2、h3及其他heading標簽在同一頁面中均可使用多次,一般使用在欄目名稱、文章段落標題或小標題中。

          雖然heading標簽對網站優化有著積極的影響,但如果亂用同樣會帶來不利的后果,切忌將heading標簽用在整段內容中。

          3.網站優SEO化常用標簽之nofllow屬性

          nofllow只是html標簽的一個屬性,一般可用于除友情鏈接以外的出站鏈接,。通常認為使用了nofllow屬性的鏈接不會被搜索引擎跟蹤(該觀點有爭議),更不會給鏈接頁面傳遞權重。最常用的方式是使用nofllow屬性來避免頁面權重不必要的流失從而達到權重集中的目的。

          寫法:<a rel="nofollow" href="url">錨文本</a>

          4.網站SEO優化常用標簽之mate標簽

          通常所說的META標簽,是在HTML網頁源代碼中一個重要的html標簽。META標簽用來描述一個HTML網頁文檔的屬性,例如作者、日期和時間、網頁描述、關鍵詞、頁面刷新等。大家所熟知的TDK標簽都是mate標簽的屬性。mate標簽在優化中的3個作用:

          作用一:承載Keywords和Description屬性內容,是頁面優化不可或缺的元素。

          作用二:進行PC站和移動站適配標注,mate標簽肩負著移動適配的重任。

          作用三:對單個網頁進行301跳轉,可用于頁面集權及網站改版。

          常見寫法:頁面關鍵詞  <meta name="keywords" content="your tags" />頁面描述  <meta name="description" content="150 words" />搜索引擎索引方式  <meta name="robots" content="index,follow" />

          5.網站SEO優化常用標簽之alt屬性

          在網站優化中,alt屬性主要用在img標簽中。在img表中添加alt屬性一是為了通過alt屬性對圖片進行說明,告訴搜索引擎圖片的含義;二是為了提高用戶體驗,在img缺少title屬性時當鼠標移動到圖片上展現的文字信息即為alt屬性內容;再就是當由于某種原因圖片不能正常顯示時,alt屬性中的文字將替代圖片進行展示。

          以上5個是較為常用的標簽,在網站seo優化過程中會用到很多的html標簽、屬性。


          主站蜘蛛池模板: 亚洲变态另类一区二区三区| 中文字幕一区二区三区永久 | 日韩精品一区二区三区中文精品| 麻豆一区二区在我观看| 鲁丝丝国产一区二区| 亚洲国产精品综合一区在线| 中文字幕一区视频| 亚洲视频一区网站| 亚洲色精品VR一区区三区| 日本一区精品久久久久影院| 日韩人妻无码一区二区三区99| 国产色综合一区二区三区| 麻豆文化传媒精品一区二区| 亚洲日韩一区精品射精| 福利一区国产原创多挂探花| 久久久久人妻一区精品果冻| 亚洲乱码日产一区三区| 亚洲av成人一区二区三区 | 亚洲Av无码一区二区二三区 | 久久精品一区二区三区AV| 成人无码精品一区二区三区| 秋霞鲁丝片一区二区三区| 在线精品动漫一区二区无广告| 搡老熟女老女人一区二区| 欧洲精品一区二区三区| 无人码一区二区三区视频| 亚洲日韩国产一区二区三区在线 | 精品无人乱码一区二区三区| 一区二区三区在线免费观看视频 | 精品国产乱子伦一区二区三区| 国产成人精品亚洲一区| 色婷婷一区二区三区四区成人网 | 中文字幕在线不卡一区二区| 国产福利电影一区二区三区久久久久成人精品综合 | 日本大香伊一区二区三区| 亚洲综合无码一区二区痴汉| 成人区精品一区二区不卡| 国模精品一区二区三区视频| 色一乱一伦一图一区二区精品| 色一情一乱一伦一区二区三区日本 | 国产伦精品一区二区|