日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

两万字详细爬虫知识储备,数据采集与清洗基础习题(一)头歌参考答案

發布時間:2025/3/15 编程问答 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 两万字详细爬虫知识储备,数据采集与清洗基础习题(一)头歌参考答案 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

數據采集習題參考答案,會持續更新,點個關注防丟失。為了方便尋找,按照頭歌的門類從新整理了實訓的分類,朋友們記得看標題哦,按標題尋找! 該篇為爬蟲知識儲備!

文章目錄

實訓一:HTML基礎

第一關:初識HTML:簡單的Hello World網頁制作

第一關答案?

第二關:HTML結構:自我簡介網頁?

第二關答案?

實訓二:HTML文本

第一關:HTML鏈接:帶超鏈接的網頁

第一關答案?

第二關:HTML標題與段落:網絡文章網頁

第二關答案?

第三關:HTML表格:日常消費賬單表格展示網頁

?第三關答案

實訓三:HTML——基本標簽

第一關創建第一個 HTML 標簽

第一關答案?

第二關:創建?<h1>-<h6>

第二關答案?

第三關創建 p 標簽

第三關答案?

第四關創建 a 標簽

第四關答案?

第五關創建 img 標簽

第五關答案?

第六關創建 div 標簽

第六關答案?

第七關添加注釋

第七關答案?

實訓四:HTTP基礎

第一關HTTP 標準

第一關答案?

第二關開發者工具的基本使用

第二關答案

實訓五:Python——JSON基礎?

第一關JSON篇:JSON基礎知識

第一關答案?

第二關JSON篇:使用json庫

實訓六:Python——XPath基礎?

第一關:XPath 路徑表達式

第一關答案

第二關:XPath 軸定位

第二關答案

第三關:XPath 解析

第三關答案



HTML(Hypertext Markup Language,超文本標記語言)是一種用于創建Web頁面和Web應用的標準化標記語言。在CSS(Cascading Style Sheets,級聯樣式表單)和JavaScript的幫助下,HTML已經成功構建了一整套面向Web的開發與應用平臺。

自1995年HTML2.0面世,HTML陸續推出了得到廣泛應用的HTML3.2和HTML4.0標準,2014年HTML5標準的面世使其在多媒體和移動性方面得到了全面提升,使HTML迎來了新的爆發式發展。

本習題面向零基礎、入門級的Web技術學員,將介紹HTML的基本概念和結構,體驗一個簡單的Hello World網頁制作過程,以及一個相對完整的Web頁面的制作過程。

實訓一:HTML基礎

第一關:初識HTML:簡單的Hello World網頁制作

本關的任務是編寫一個簡單的HTML頁面,這個網頁包含一個標題和一個段落。顯示效果如下:

HTML是一種標準化的標記語?,由一套標記標簽(markup tag)組成。Web前端開發人員的一項主要工作就是利用HTML標簽來編寫?頁,將文本、超鏈接、圖片、語音、視頻等各種內容整合起來,實現絢麗多姿的網頁。

下面是大家需要記住的關于HTML的一些基本描述:

  • HTML標記標簽,通常簡稱HTML標簽;

  • HTML文檔,通常簡稱HTML頁面、網頁等;

  • HTML5能夠較好的兼容HTML之前版本,但也廢棄了一些舊的HTML特性。

  • <html>、</html>,<body>,</body>,<h1>,<p>等都是HTML標簽;

  • <h1>這是一個一級標題</h1>,<p>這是第1個段落。</p>等都是HTML元素;

  • bgcolor="yellow"、align="center"都是HTML元素的屬性。

第一關答案?

<!DOCTYPE html> <html><head><meta charset="utf-8"><title>Hello World</title></head> <!--------- Begin--------><body bgcolor='F6F3D6'><!Hello World!--><h1 align ='center'>Hello World</h1><p align ='center'>動手改變世界</p></body><!--------- End--------></html>

第二關:HTML結構:自我簡介網頁?

本關任務是編寫一個自我簡介網頁,你將通過本任務理解一個HTML網頁的完整結構,并了解如何讓搜索引擎更好的找到你的網頁。

顯示效果如下圖所示:

根元素:HTML 元素

然后,<HTML>元素告知瀏覽器其本身是一個HTML文檔。

除去第一行外,其余的頁面內容都應該包含在<HTML>元素中,所以它也被稱為根元素。

頭元素:head 元素

與屬性會給元素增添附加信息一樣,head元素能為整個網頁增添更多信息。可以用在head中的標簽有<base>, <link>, <meta>, <script>, <style>, 以及 <title>。在之后的學習中,你將逐漸的了解它們。

網頁標題元素:title

本例網頁主要內容是“自我簡介”,所以title也設置為“自我簡介”。 title元素的內容即網頁標題,它是一個網頁必需的元素之一。

<title>的內容一般作為網頁標簽名,寫法如下:

<title>標題內容</title>

第二關答案?

<!DOCTYPE html> <html><!--------- Begin--------><head><title>自我簡介</title><meta charset="utf-8"><meta name="description" content="彭智廣的自我簡介網站"><meta name="keywords" content="自我簡介,姓名,學號,班級"></head><body><h1 align="center">自我簡介</h1><h2>簡介</h2><p>在這里簡單的描述一下你自己吧。</p><h2>三個與你最有關的詞</h2><p>這三個詞可以是一種形容,也可以是一種運動或者是一種獨特的愛好,等等。</p><ul><li>第一個詞</li><p>選擇第一個詞的原因</p><li>第二個詞</li><p>選擇第二個詞的原因</p><li>第三個詞</li><p>選擇第三個詞的原因</p></ul> </body><!--------- End--------></html>

實訓二:HTML文本

第一關:HTML鏈接:帶超鏈接的網頁

本關的任務是編寫一個帶超鏈接的HTML頁面,鏈接包含頁面內導航鏈接和跳轉其他網頁的鏈接。顯示效果如下:

超鏈接是網頁互連的核心,網頁之間通過超鏈接連接在一起。

我們使用<a> 標簽定義超鏈接。

一個簡單的例子如下:

<a href="https://baidu.com">百度搜索</a>

點擊a元素內容后打開百度搜索網頁。

其中,href屬性指定了超鏈接的目標,本例中即跳轉到百度。

屬性

href 屬性

href 屬性是超鏈接最重要的屬性,它用于指定超鏈接目標的 URL。

典型的超鏈接格式如下:

<a href="URL">

其中,目標URL有三種類型:

  • 錨 URL (anchor URL):指向同一頁面內某一位置;

  • 相對 URL (relative URL):指向同一網站的不同文件;

  • 絕對 URL (absolute URL):指向另一個網站。

  • 提示:

    • URL:Uniform Resource Locator,統一資源定位器;

    • 為什么叫作錨URL呢?

    錨的含義取于船上的錨,船把錨沉在水底后,如果船隨水飄移了,只要一拉錨的鎖鏈就會回到拋錨的位置。同樣的,在html中點錨鏈接就能回到指定位置。

    第一關答案?

    <!DOCTYPE html> <html><head><meta charset="utf-8"><title>HTML鏈接</title><meta name="description" content="HTML鏈接知識講解"><meta name="keywords" content="HTML, Link"> </head><!--------- Begin--------><body><h1>HTML 入門</h1><h2>本頁目錄</h2><ul><li><a href="#toc1">簡介</a></li><li><a href="https://en.wikipedia.org/wiki/CSS">第1關</a></li><li><a href="#toc3">第2關</a></li></ul><h2 id="#toc3">簡介</h2><p><a href="https://en.wikipedia.org/wiki/HTML"target="_blank"HTML</a>(Hypertext Markup Language,超文本標記語言)是一種用于創建Web頁面和Web應用的標準化標記語言。在<a href="https://en.wikipedia.org/wiki/CSS"target="_blank">CSS</a>(Cascading Style Sheets,級聯樣式表單)和<a href="#toc3"target="_blank">JavaScript</a>的幫助下,HTML已經成功構建了一整套面向Web的開發與應用平臺。</p><p>自1995年HTML2.0面世,HTML陸續推出了得到廣泛應用的HTML3.2和HTML4.0標準,2014年HTML5標準的面世使其在多媒體和移動性方面得到了全面提升,使HTML迎來了新的爆發式發展。</p><h2 id="toc2">第1關</h2><p>初識HTML:簡單的Hello World網頁</p><h2 id="toc3">第2關</h2><p>HTML鏈接:帶超鏈接的網頁</p><hr><p>若需幫助,請發送問題到<a href="mailto:someone@email.com">E-Mail</a>。</p><p><a href="#">回到頂部</a></p> </body><!--------- End--------></html>

    第二關:HTML標題與段落:網絡文章網頁

    本關任務是完成一個格式豐富的文章網頁,你將通過本關學習標題、段落、文本格式化和引用等,與文本相關的標簽。

    本關網頁顯示效果如下圖所示:

    HTML提供了六級標題用于創建網頁信息的層級關系。<h1> 定義重要等級最高的標題,之后<h2>到<h6>層級依次遞減。

  • <body>
  • <h1>書籍標題</h1>
  • <h2>第一章</h2>
  • <h3>第一節</h3>
  • <h4>重點 1</h4>
  • <h5>1.1 標題</h5>
  • <h6>1.1.1 標題</h6>
  • </body>
  • 第二關答案?

    <!DOCTYPE html><head><meta charset="UTF-8" /><title>HTML – 維基百科</title> </head><!--------- Begin--------><body><h1>HTML</h1><p>超文本標記語言(HTML)是一種標準化的用來創建Web頁面和Web應用的標準化的<a href="https://en.wikipedia.org/wiki/Markup_language" title="Markup language" target="_blank">標記語言</a>。 在級聯樣式表單(CSS)和JavaScript的幫助下,HTML已經成功構建了一整套面向Web的開發與應用平臺<sup><a href="#ref1">[1]</a></sup>。</p><h2>歷史</h2><h3>開發過程</h3><p>1980年,物理學家<a href="https://en.wikipedia.org/wiki/Tim_Berners-Lee" title="Tim Berners-Lee" target="_blank">Tim Berners-Lee</a>,<a href="https://en.wikipedia.org/wiki/CERN" title="CERN" target="_blank">CERN</a>的一位項目負責人,提出并實現了<a href="https://en.wikipedia.org/wiki/ENQUIRE" title="ENQUIRE" target="_blank">ENQUIRE</a>系統。該系統的目的是為CERN研究人員提供一種使用和分享文檔。1989年, Berners-Lee寫了一個備忘錄,提出了基于Internet-based<strong>超文本系統</strong><sup><a href="#ref2">[2]</a></sup>。</p><h3>HTML里程碑</h3><dl><dt>1995年11月24日</dt><dd>HTML2.0發布,對應的IETF文檔為<a class="external mw-magiclink-rfc" rel="nofollow" href="https://tools.ietf.org/html/rfc1866" target="_blank">RFC 1866</a>。</dd><dt>1997年1月14日</dt><dd>HTML 3.2以<a href="https://en.wikipedia.org/wiki/W3C_Recommendation" class="mw-redirect" title="W3C Recommendation" target="_blank"><abbr title="World Wide Web Consortium">W3C</abbr>推薦標準</a>的形式發布。 隨后的HTML標準都由W3C組織發布。</dd><dt>1997年12月18日</dt><dd>HTML 4.0發布<sup><a href="#ref3">[3]</a></sup>。</dd><dt>2014年10月28日</dt><dd>HTML5 發布。</dd><dt>2016年11月1日</dt><dd>HTML 5.1發布。</dd></dl><h2>參考文獻</h2><ol><small><li id='ref1'>Flanagan, David. <i>JavaScript - The definitive guide</i> (6 ed.). p.&#160;1. "JavaScript is part of the triad of technologies that all Web developers must learn: HTML to specify the content of web pages, CSS to specify the presentation of web pages, and JavaScript to specify the behaviour of web pages."</li><li id="ref2">Tim Berners-Lee, "Information Management: A Proposal." CERN (March 1989, May 1990). </li><li id="ref3">"HTML 4.0 Specification — W3C Recommendation — Conformance: requirements and recommendations". World Wide Web Consortium. December 18, 1997. Retrieved July 6, 2015.</li></small></ol> </body><!--------- End--------></html>

    第三關:HTML表格:日常消費賬單表格展示網頁

    本關任務是編寫一個日常消費賬單表格展示網頁,你將通過本關學習如何使用HTML編寫出簡潔清晰的表格。

    本關網頁顯示效果如下圖所示:

    在HTML表中,一個表格(table)由行(tr)組成,每一行由單元格組成,單元格有標題單元格(th)和數據單元格(td)。

  • 我們設定了<table>元素的width屬性,改變了表格的寬度;

  • 我們使用<caption>元素設置了表格的標題;

  • 數據第一行<tr>元素中,使用<th>元素指定了表頭。本例中有三列信息,所以包含了三個<th>元素;

  • 并且,我們設置了<th>元素的屬性scope的值為col。

  • ?第三關答案

    <!DOCTYPE html> <html><!--------- Begin--------><head><meta charset="utf-8"><title>HTML表格</title><meta name="description" content="HTML表格知識講解"><meta name="keywords" content="HTML,表格, Table"><style type="text/css">table {border-collapse: collapse;}caption {font-weight: bold;margin-bottom: .5em;}th,td {padding: .5em .75em;border: 1px solid #000;}tfoot {font-weight: bold;}</style> </head><body><table width="400" border="1" style="margin:auto"><caption>日常消費賬單</caption><thead><!-- 表格頭部 --><tr><th align="left" scope=co1>消費項目</th><th align="right" scope=co1>一月</th><th align="right" scope=co1>二月</th></tr></thead><tbody><!-- 表格主體 --><tr><th align="left" scope="row">食品煙酒</th><td align="right">¥1241.00</td><td align="right">¥1250.00</td></tr><tr><th align="left" scope="row">衣物</th><td align="right">¥330.00</td><td align="right">¥594.00</td></tr><tr><th align="left" scope="row">居住</th><td align="right">¥2100</td><td align="right">¥2100</td></tr><tr><th align="left" scope="row">生活用品及服務</th><td align="right">¥700.00</td><td align="right">¥650.00</td></tr><tr><th align="left" scope="row">醫療保健</th><td align="right">¥150.00</td><td align="right">¥50.00</td></tr><tr><th align="left" scope="row">教育、文化和娛樂</th><td align="right">¥1030.00</td><td align="right">¥1250.00</td></tr><tr><th align="left" scope="row">交通和通信</th><td align="right">¥230.00</td><td align="right">¥650.00</td></tr><tr><th align="left" scope="row">其他用品和服務</th><td align="right">¥130.40</td><td align="right">¥150.00</td></tr></tbody><tfoot><!-- 表格尾部 --><tr><th align="left" scope="row">總計</th><th align="right">¥5911</th><th align="right">¥6694</th></tr></tfoot></table> </body><!--------- End--------></html>

    實訓三:HTML——基本標簽

    第一關創建第一個 HTML 標簽

    本關任務:創建你的第一個標簽<h1></h1>,文本內容為welcome to Educoder。

    實現的效果如下:

    <h1>welcome</h1>

    上面這行代碼它表示一個HTML元素。

    大多數 HTML 元素都是由開始標簽和結束標簽組成的,通常成對出現 。

    開始標簽:用尖括號<>包裹關鍵詞,像<h1>這樣。 結束標簽:用</>包裹和開始標簽一樣的關鍵詞,像</h1>這樣。

    可以發現: 結束標簽就比開始標簽多了一個斜杠/。

    第一關答案?

    <!DOCTYPE html> <html> <head><meta charset="UTF-8"> </head> <body><h1>welcome to Educoder</h1><!-- ********* Begin ********* --><!-- ********* End ********* --> </body> </html>

    第二關:創建 <h2>-<h6> 標簽

    本關任務:依次創建<h2>-<h6>標簽,文本內容為創建不同字體大小的標題,查看它們的區別。

    實現的效果如下:

    第一關已經創建了h1標簽,它是干什么的呢? 它一般用來創建標題

    另外,<h2>也用來創建標題,它們有什么區別呢? h1的字體比h2的字體要

    當然, h3,h4,h5,h6也用來創建標題,它們的字體依次減小。

    注意:創建標題只有 <h1> - <h6>,沒有 h7,h8的。

    第二關答案?

    <!DOCTYPE html> <html> <head><meta charset="UTF-8"> </head> <body><h1>創建不同字體大小的標題</h1><!-- ********* Begin ********* --><h2>創建不同字體大小的標題</h2><h3>創建不同字體大小的標題</h3><h4>創建不同字體大小的標題</h4><h5>創建不同字體大小的標題</h5><h6>創建不同字體大小的標題</h6><!-- ********* End ********* --> </body> </html>

    第三關創建 p 標簽

    本關任務:創建一個p標簽,文本內容為我是一個段落。

    實現的效果如下:

    p元素通常用來表示一個段落。

    你可以這樣創建一個p標簽,<p> p標簽表示一個段落。</p>

    第三關答案?

    <!DOCTYPE html> <html> <head><meta charset="UTF-8"> </head> <body><!-- ********* Begin ********* --><p>我是一個段落</p><!-- ********* End ********* --> </body> </html>

    第四關創建 a 標簽

    本關任務:創建一個a標簽, 跳轉的地址是https://www.educoder.net,文本內容是Educoder平臺。

    a標簽通常用來定義一個鏈接。href屬性的值就是鏈接的地址。

    你可以這樣創建一個a標簽,<a href="http://www.baidu.com">百度</a>。當你點擊這個鏈接時,它就會跳轉到百度首頁。

    第四關答案?

    <!DOCTYPE html> <html> <head><meta charset="UTF-8"> </head> <body><!-- ********* Begin ********* --><a href="https://www.educoder.net">Educoder平臺</a><!-- ********* End ********* --> </body> </html>

    第五關創建 img 標簽

    本關任務:創建一個img標簽, 圖片的地址是https://www.educoder.net/attachments/download/207801,提示文字是小狗走路。

    效果如下:?

    img標簽通常用來表示一個圖片。src屬性的值就是圖片的地址,alt屬性的值是當圖片沒有展現出來時提示的文字 。

    你可以這樣創建一個img標簽, <img src="https://www.educoder.net/attachments/download/207791" alt="風景畫"/>。

    這樣圖片就顯示出來了。

    第五關答案?

    <!DOCTYPE html> <html> <head><meta charset="UTF-8"> </head> <body><!-- ********* Begin ********* --><img src="https://www.educoder.net/attachments/download/207801" alt="小狗走路"/><!-- ********* End ********* --></body> </html>

    第六關創建 div 標簽

    本關任務:創建一個div標簽, 文本內容是我是div標簽。

    效果如下:

    div標簽可以把文檔分割為獨立的、不同的部分。它沒有實際的意義,僅僅表示創建了一個塊級元素。

    你可以這樣創建一個div標簽,<div>創建div標簽</div>。

    可以發現:它和 <h1>-<h6>,<p>標簽的創建是一樣的,只不過它沒有實際的意義。

    第六關答案?

    <!DOCTYPE html> <html> <head><meta charset="UTF-8"> </head> <body><h2>我是h2標簽</h2><p>我是p標簽</p><!-- ********* Begin ********* --><div>我是div標簽</div><!-- ********* End ********* --> </body> </html>

    第七關添加注釋

    本關任務:注釋掉 div 標簽,同時在p標簽上方添加注釋說明。

    什么是注釋? 為什么要添加注釋呢?

    注釋是解釋性文本,在運行程序時,會被程序跳過,不做處理。

    注釋有兩個作用:

    • 可以給代碼添加文字說明,便于代碼閱讀和日后維護;
    • 對于暫時不用但又不能刪除的代碼,可以添加注釋保存下來;

    如何添加注釋呢?

    <!--表示注釋的開始, -->表示注釋的結束,這樣就可以添加提示說明和注釋元素了。

    你可以這樣注釋p標簽和添加文字說明。

    第七關答案?

    <!DOCTYPE html> <html> <head><meta charset="UTF-8"> </head> <body><h2></h2><!-- ********* Begin ********* --><!--<div></div>--><!--一帶一路-->注:該代碼為<p> 之前的代碼

    實訓四:HTTP基礎

    HTTP 協議是 Hyper Text Transfer Protocol(超文本傳輸協議)的縮寫,是用于從萬維網(WWW:World Wide Web )服務器傳輸超文本到本地瀏覽器的傳送協議。它可以使瀏覽器更加高效,減少網絡傳輸。它不僅保證計算機正確快速地傳輸超文本文檔,還確定傳輸文檔中的哪部分,以及哪部分內容優先顯示等。python 爬蟲開發,主要就是和 HTTP 協議打交道。 本實訓主要介紹了網絡爬蟲的基礎知識,包括 HTTP 的狀態碼、HTTP 消息頭、HTTP 請求方式和 HTTP 工作原理等 HTTP 相關知識以及谷歌(Chrome)瀏覽器的開發者工具簡介。

    第一關HTTP 標準

    本關任務:掌握 HTTP 的相關知識,完成相關選擇題。

    HTTP 是一個客戶端終端和服務器端請求和應答的標準。通過使用網頁瀏覽器、網絡爬蟲或者其它的工具,客戶端發起一個 HTTP 請求到服務器上指定端口(默認端口為80)。我們稱這個客戶端為用戶代理程序(user agent)。應答的服務器上存儲著一些資源,比如 HTML 文件和圖像。我們稱這個應答服務器為源服務器(origin server)。在用戶代理和源服務器中間可能存在多個“中間層”,比如代理服務器、網關或者隧道(tunnel)。 盡管 TCP/IP 協議是互聯網上最流行的應用,HTTP 協議中,并沒有規定必須使用它或它支持的層。事實上,HTTP 可以在任何互聯網協議上,或其他網絡上實現。HTTP 假定其下層協議提供可靠的傳輸。因此,任何能夠提供這種保證的協議都可以被其使用。因此也就是其在 TCP/IP 協議族使用 TCP 作為其傳輸層。?

    第一關答案?

    答案:1.B? ?2.B? 3.D

    第二關開發者工具的基本使用

    本關任務:了解開發者工具對于爬蟲的用途。

    開發者工具是一套內置于瀏覽器中的 Web 開發和調試工具,可用來對網站進行迭代、調試和分析。 對于爬蟲實戰來說,可以通過開發者工具快捷的定位元素,獲取中途請求文件和查看網頁結構等極其強大與便捷的用途。??

    第二關答案

    答案:1.C? ?2.B

    實訓五:Python——JSON基礎?

    在現實世界中,人與人之間的交流,需要建立在某種大家都能聽懂的語言基礎上。而在計算機領域中,各個系統之間的交流通信,也需要建立在某種公共的格式上。 本次實訓將介紹:JSON 數據格式,學習使用 Python 對它們進行解析的方法,以此拓展我們的知識面,讓我們能寫出更加實用的 Python 程序。

    第一關JSON篇:JSON基礎知識

    本關任務:手動編寫一個 JSON 格式的數據文件。

    JSON 全稱:JavaScript Object Notation(JavaScript 對象表示法),是一種輕量級的文本數據交換格式。與接下來要介紹的 XML 相比,擁有更小、更快、更易解析的特點。?

    第一關答案?

    {"count":3 , "students":[{"name":"趙昊" , "age":15 , "ismale" :true },{"name":"龍傲天" , "age":16 , "ismale" :true},{"name":"瑪麗蘇" , "age":15 , "ismale" : false}] }

    第二關JSON篇:使用json庫

    本關任務:編寫一個能讀取并修改 JSON 數據的程序。

    json庫是 Python 內置的一個用于操作 JSON 數據的庫,提供了幾個函數用于解析生成(或者說反序列化序列化)JSON 格式的數據。?

    詳情見此篇博文:

    Python--JSON基礎_宇阷的博客-CSDN博客

    實訓六:Python——XPath基礎?

    第一關:XPath 路徑表達式

    任務描述

    本關任務:根據給定的 xml 文檔,使用 XPath 表達式選取指定內容。

    相關知識

    為了完成本關任務,你需要了解 XPath 路徑表達式的基本語法,理解節點的基本類型,完成節點的獲取、屬性的匹配獲取、多屬性的匹配獲取、文本的獲取、按序選擇等。

    節點的基本類型

    XPath 是一門在 XML 文檔中查找信息的語言,雖然是被設計用來搜尋 XML 文檔的,但是它也能應用于 HTML 文檔,并且大部分瀏覽器也支持通過 XPath 來查詢節點。在 Python 爬蟲開發中,經常使用 XPath 查找提取網頁中的信息,因此 XPath 非常重要。

    在 XPath 中, XML 文檔是被作為節點樹來對待的,有七種類型的節點:元素、屬性、文本、命名空間、處理指令、注釋以及文檔(根)節點。樹的根被稱為文檔節點或者根節點。

    根節點(Root Node)

    ? ? ? ?根節點是一棵樹的最頂層,根節點是唯一的。樹上其它所有元素節點都是它的子節點或后代節點。對根節點的處理機制與其它節點相同。對樹的匹配總是先從根節點開始。文檔中的<bookstore>即為根節點。

    元素節點(Element Nodes)

      元素節點相對應的是文檔中每個元素,一個元素節點的子節點可以為元素節點、注釋節點、處理指令節點和文本節點。元素節點可以定義一個唯一的標識(id)。元素節點可以有拓展名,由兩部分組成:命名空間 URL 和本地命名。文檔中的<book>即為元素節點。

    文本節點(Text Nodes)

      文本節點包含一組字符數據,任何一個文本節點都沒有相鄰的兄弟文本節點,而且文本節點沒有擴展名。文檔中的Learning XML即為文本節點。

    屬性節點(Attribute Nodes)

      每個元素節點有一個相關聯的屬性節點集合,元素是每個屬性節點的父節點,但屬性節點卻不是其父元素的子節點。這就是說,通過查找元素的子節點可以匹配出元素的屬性節點,但反過來不成立,只是單向的。再有,元素的屬性節點沒有共享性,也就是說不同的元素節點不共有同一個屬性節點。文檔中的lang="eng"即為屬性節點。

    命名空間節點(Namespace Nodes)

      每個元素節點都有一個相關聯的命名空間節點集。在 XML 文檔中,命名空間是通過保留屬性聲明的。因此,在 XPath 中,該類節點與屬性節點極為相似,它們與父元素之間的關系是單向的,并且不具有共享性。

    處理指令節點(Processing Instruction Nodes)

      處理指令節點對應于 XML 文檔中的每一條處理指令。它也有擴展名,擴展名的本地命名指向處理對象,而命名空間部分為空。

    注釋節點(Comment Nodes)

      注釋節點對應于文檔中的注釋。

    Xpath路徑表達式的基本語法

    XPath 使用路徑表達式來選取 XML 文檔中的節點或節點集。節點是沿著路徑(path)或者步(steps)來選取的。接下來介紹如何選取節點,首先了解一下常用的路徑表達式,來進行節點的選取,如下表所示:

    表達式描述
    nodename選取此節點的所有子節點
    /從根節點選取
    //選擇任意位置的某個節點
    .選取當前節點
    ..選取當前節點的父節點
    @選取屬性

    根據路徑表達式的規則,我們對上文的的 XML 文檔進行節點選取,如下表所示。

    XPath路徑表達式含義
    bookstore選取 bookstore 元素的所有子節點
    /bookstore選取根元素 bookstore
    /bookstore/book/text()選取屬于 bookstore 子元素的 book 元素下的所有文本內容
    //book選取所有 book 子元素,而不管它們在文檔中位置
    //@eng選取名為 eng 的所有屬性

    謂語的用法如下表所示:

    XPath路徑表達式含義
    /bookstore/book[1]選取屬于 bookstore 子元素的第一個 book 元素
    /bookstore/book[last()]選取屬于 bookstore 子元素的最后一個 book 元素
    /bookstore/book[last()-1]選取屬于 bookstore 子元素的倒數第二個 book 元素
    /bookstore/book[position()<3]選取最前面的兩個屬于 bookstore 元素的子元素的 book 元素
    //title[@lang]選取所有擁有名為 lang 的屬性的 title 元素
    //title[@lang='eng']選取所有 title 元素,且這些元素擁有值為 eng 的 lang 屬性
    //title[@lang='eng' and @class="good"]?選取所有 title 元素,且這些元素擁有值為 eng 的 lang 屬性和值為good的class屬性
    /bookstore/book[price>35.00]選取 bookstore 元素的所有 book 元素,且其中的 price 元素的值須大于 35.00
    /bookstore/book[price>35.00]/title選取 bookstore 元素中的 book 元素的所有 title 元素,且其中的 price 元素的值須大于 35.00

    XPath 在進行節點選取的時候可以使用通配符*匹配未知的元素,同時使用操作符|一次選取多條路徑,使用示例如下表所示:

    XPath路徑表達式含義
    /bookstore/*選取 bookstore 元素的所有子元素
    //*選取文檔中的所有元素
    //title[@*]選取所有帶有屬性的 title 元素
    //book/title 丨 //book/price選取 book 元素的所有 title 和 price 元素
    //title 丨 //price選取文檔中的所有 title 和 price 元素
    /bookstore/book/title 丨 //price選取屬于 bookstore 元素的 book 元素的所有 title 元素,以及文檔中所有的 price 元素

    第一關答案

    1.選取bookstore元素的所有子節點 ********** Begin ********* bookstore *********** End **********2.選取所有擁有名為 lang 的屬性的 title 元素 ********** Begin ********* //title[@lang] *********** End **********3.選取所有 title 元素,且這些元素擁有值為 eng 的 lang 屬性和值為good的class屬性 ********** Begin ********* //title[@lang='eng' and @class="good"] *********** End **********4.選取屬于 bookstore 子元素的book元素下的所有文本內容 ********** Begin ********* /bookstore/book/text() *********** End **********5.選取屬于 bookstore 子元素的第一個 book 元素 ********** Begin ********* /bookstore/book[1]*********** End **********

    第二關:XPath 軸定位

    任務描述

    本關任務:根據給定的 xml 文檔,使用 XPath 表達式選取指定內容。

    相關知識

    為了完成本關任務,你需要了解:XPath 中如何使用軸定位。

    在爬蟲里面經常要用到定位,XPath 定位有著舉足輕重的地位,因為它功能很強大。結合它里面的文本定位、模糊定位、邏輯定位等,基本能搞定所有的元素定位問題。

    軸定義了所選節點與當前節點之間的樹關系。在 Python 爬蟲開發中,提取網頁中的信息時,會遇到這種情況:首先提取到一個節點的信息,然后想在在這個節點的基礎上提取它的子節點或者父節點,這時候就會用到軸的概念。軸的存在會使提取變得更加靈活和準確。

    在上一關,我們了解了位置路徑表達式中的相對位置路徑、絕對位置路徑和步的概念。位置路徑可以是絕對的,也可以是相對的。絕對路徑起始于正斜杠/,而相對路徑不會這樣。在兩種情況中,位置路徑均包括一個或多個步,每個步均被斜杠分割: /step/step/..(絕對位置路徑),step/step/.. (相對位置路徑)。

    步(step)包括:軸(axis)、節點測試( node-test)、零個或者更多謂語( predicate),用來更深入地提煉所選的節點集。XPath 中的軸名及含義如下表所示:

    軸名含義
    ancestor選取當前節點的所有先輩(父或祖父等)
    ancestor-or-self選取當前節點的所有先輩(父或祖父等)以及當前節點本身
    attribute選取當前節點的所有屬性
    child選取當前節點的所有子元素
    descendant選取當前節點的所有后代元素(子或孫等)
    descendant-or-self選取當前節點的所有后代元素(子或孫等)以及當前節點本身
    following選取文檔中當前節點的結束標簽之后的所有節點
    namespace選取當前節點的所有命名空間節點
    parent選取當前節點的父節點
    preceding選取文檔中當前節點的開始標簽之前的所有節點
    preceding-sibling選取當前節點之前的所有同級節點
    self選取當前節點

    軸的使用

    軸需要通過步的語法,來實現節點的選取。步的語法為:軸名稱::節點測試[謂語],大家可能覺比較抽象。下面通過案例演示來幫助理解,XML 文檔示例如下所示:

    <?xml version="1.0" encoding="UTF-8"?> <bookstore> <book><title lang="eng" class="good">Harry Potter</title><price>29.99</price> </book> <book><title lang="eng">Learning XML</title><price>39.95</price> </book> </bookstore>

    第二關答案

    1.選取所有屬于當前節點的子元素的 book 節點 ********** Begin ********* child::book *********** End **********2.選取當前節點的 lang 屬性 ********** Begin ********* attribute::lang *********** End **********3.選取當前節點的所有 price 孫節點 ********** Begin ********* child::*/child::price *********** End **********

    第三關:XPath 解析

    任務描述

    本關任務:編寫解析 HTML 文件的 Python 程序。

    相關知識

    為了完成本關任務,你需要掌握:Python 環境下使用 XPath 對 HTML 文件進行解析。

    lxml的安裝

    lxml 是 一個 HTML/XML 的解析器,主要的功能是解析和提取 HTML/XML 數據。lxml 和正則一樣,也是用 C 實現的,是一款高性能的 Python HTML/XML 解析器,我們可以利用之前學習的 XPath 語法,來快速地定位特定元素以及節點信息。

    如果本地 Python 環境沒有安裝 lxml,可以在命令提示符窗口輸入命令pip install lxml,安裝 lxml 模塊,如下圖所示。

    lxml的使用

    使用 lxml,需要先導入相關包,語法如下:

  • from lxml import etree
  • 現在有如下 HTML 代碼,需要獲取第一個 book 節點下的 title 節點中的 class 的屬性值:

  • <html>
  • <head></head>
  • <body>
  • <bookstore>
  • <book>
  • <title lang="eng" class="good">Harry Potter</title>
  • <price>29.99</price>
  • </book>
  • <book>
  • <title lang="eng">Learning XML</title>
  • <price>39.95</price>
  • </book>
  • </bookstore>
  • </body>
  • </html>
  • 使用 xpath 表達式解析網頁之前,需要獲取元素樹對象,這里有兩種方法:

    • 如果上述代碼為本地文件,并且文件名為test.html,獲取元素樹對象的代碼如下所示:
    • parse = etree.HTMLParser(encoding='utf-8') # 添加編碼
    • tree = etree.parse('test.html', parse) # 指定本地HTML文件讀取
    • 如果上述代碼為字符串類型變量,并且變量名為html,獲取元素樹對象的代碼如下所示:
    • parse = etree.HTMLParser(encoding='utf-8') # 添加編碼
    • tree = etree.HTML(html, parse) # html為python字符串

    獲取元素樹對象后,就可以使用 XPath 表達式解析網頁了,代碼如下所示:

  • result = tree.xpath(xpath表達式) # 返回類型為列表
  • 完成上述指定任務有多種實現方式,以下演示了四種不同的 XPath 表達式,都能夠獲取第一個 book 節點下的 title 節點中的 class 的屬性值。

  • # 相對路徑 book 節點選擇
  • print(tree.xpath('//book[1]/title/@class')[0])
  • # 相對路徑 title 節點存在 class 屬性條件選擇
  • print(tree.xpath('//title[@class]/@class')[0])
  • # 同上, 但是使用了軸選擇 class 屬性值
  • print(tree.xpath('//title[@class]/attribute::class')[0])
  • # 絕對路徑常規選擇
  • print(tree.xpath('/html/body/bookstore//book[1]/title/@class')[0])
  • 以上代碼都可以獲取圖中紅框部分的內容。

    第三關答案

    # 導入lxml庫 from lxml import etree # 讀取lll.html文件并轉化為元素樹對象 parse = etree.HTMLParser(encoding='utf-8') tree = etree.parse('src/step3/lll.html', parse) # 補充xpath表達式,獲取所有書的名稱 # ********** Begin ********* # print(tree.xpath('//bookstore/book/title/text()')) # *********** End ********** # # 補充xpath表達式,獲取所有書的價格 # ********** Begin ********* # print(tree.xpath('//bookstore/book/price/text()')) # *********** End ********** # # 填寫代碼, 獲取價格低于30的書名 # ********** Begin ********* # print(tree.xpath('//bookstore/book[price < 30.00]/title/text()')[0]) # *********** End ********** #

    在學習中成功、在學習中進步!我們一起學習不放棄~

    記得三連哦~?你們的支持是我最大的動力!!歡迎大家閱讀往期文章哈~

    小編聯系方式如下,歡迎各位巨佬溝通交流,代碼什么的加小編私聊哦~

    總結

    以上是生活随笔為你收集整理的两万字详细爬虫知识储备,数据采集与清洗基础习题(一)头歌参考答案的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 成人免费激情视频 | 伊人青青久久 | 特黄特色免费视频 | av久久久| 欧美大片在线观看 | 99精品一级欧美片免费播放 | 国产无遮挡免费 | 色婷婷av国产精品 | 麻豆国产精品777777在线 | 4虎tv| 国产8区| 免费看a级片| 成年人三级网站 | 久久久一区二区三区 | 99re热这里只有精品视频 | 日本福利在线 | 不卡一区二区三区四区 | 日韩欧美亚洲一区二区三区 | 美女黄视频大全 | 日本高清免费看 | 九九国产 | 成人性生交大片免费看 | 日本免费a级片 | 激情婷婷六月天 | 日韩精品一区二区三区视频在线观看 | 麻豆黄色片 | 日韩 国产 在线 | gogo人体做爰aaaa | 天堂视频在线观看免费 | 日韩成人在线视频 | 91tv在线| 超碰人人草| 三级亚洲 | 国产成人精品在线视频 | 中文字字幕在线 | 国产精品高潮视频 | 欧美日韩美女 | 99久久这里只有精品 | 天天干天天干天天 | 四虎成人精品永久免费av九九 | 日本国产中文字幕 | 久久一区二 | 亚洲av无码一区二区三区在线播放 | 青青草婷婷 | 韩国女主播裸体摇奶 | 天堂在线精品视频 | 超碰97av| 中文字幕不卡在线播放 | 久久97久久97精品免视看 | 中文字幕免费看 | 你懂的av在线 | 激情av网 | 亚洲视频在线一区二区 | 射射av| 性视频免费 | 成人午夜在线播放 | 黄色激情av| 国产精品视频第一页 | 久精品在线 | 在线中文字幕视频 | 国产视频一区在线观看 | 欧美一区二区激情视频 | 九九热播视频 | 制服.丝袜.亚洲.另类.中文 | 国产精品99久久久久久www | 亚洲专区中文字幕 | 性欧美17一18内谢 | 国产中文字幕视频 | 亚洲免费在线视频观看 | 半推半就一ⅹ99av | 日本中文字幕在线免费观看 | 欧美成人高清在线 | 亚洲香蕉中文网 | 狠狠操网 | 亚洲少妇15p | 男女污污软件 | 久久久久久91香蕉国产 | 另类图片亚洲色图 | 毛片免费全部无码播放 | 欧美日韩国产高清 | 国产精品久久久久久久久久小说 | 在线观看不卡av | 在线免费观看av网站 | 日韩综合在线 | 嫩草影院av | 欧美日视频 | 精产国品一二三产区m553麻豆 | 日韩电影一区二区在线观看 | 18久久 | 五月婷婷激情网 | 高清毛片aaaaaaaaa郊外 | 欧美日韩色 | 欧美乱大交xxxxx潮喷l头像 | 夜夜激情| 亚洲中字在线 | 黄免费在线观看 | 大尺度av | 欧美三级午夜理伦三级 | 天堂8在线天堂资源bt |