言
在網站維護和數據分析工作中,從網頁的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標簽、屬性。
*請認真填寫需求信息,我們會在24小時內與您取得聯系。