成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Python3網(wǎng)絡(luò)爬蟲實戰(zhàn)---16、Web網(wǎng)頁基礎(chǔ)

netScorpion / 3398人閱讀

摘要:,簡稱為,是一種腳本語言,和配合使用,提供給用戶的只是一種靜態(tài)的信息,缺少交互性。這就是網(wǎng)頁的三大基本組成。父節(jié)點擁有子節(jié)點,同級的子節(jié)點被稱為兄弟節(jié)點。選擇屬于其父節(jié)點的首個節(jié)點的每個節(jié)點。同上,從最后一個

上一篇文章:Python3網(wǎng)絡(luò)爬蟲實戰(zhàn)---15、爬蟲基礎(chǔ):HTTP基本原理
下一篇文章:Python3網(wǎng)絡(luò)爬蟲實戰(zhàn)---17、爬蟲基本原理

我們平時用瀏覽器訪問網(wǎng)站的時候,一個個站點形形色色,頁面也各不相同,但有沒有想過它是為何才能呈現(xiàn)出這個樣子的?
那么本節(jié)我們就來了解一下網(wǎng)頁的基本組成、結(jié)構(gòu)、節(jié)點等內(nèi)容。

1. 網(wǎng)頁的組成

網(wǎng)頁可以分為三大部分,HTML、CSS、JavaScript,我們把網(wǎng)頁比作一個人的話,HTML 相當于骨架,JavaScript 則相當于肌肉,CSS 則相當于皮膚,三者結(jié)合起來才能形成一個完善的網(wǎng)頁,下面我們分別來介紹一下三部分的功能。

HTML

HTML 是用來描述網(wǎng)頁的一種語言,其全稱叫做 Hyper Text Markup Language,即超文本標記語言。網(wǎng)頁包括文字、按鈕、圖片、視頻等各種復(fù)雜的元素,其基礎(chǔ)架構(gòu)就是 HTML。不同類型的文字通過不同類型的標簽來表示,如圖片用 img 標簽表示,視頻用 video 標簽來表示,段落用 p 標簽來表示,它們之間的布局又常通過布局標簽 div 嵌套組合而成,各種標簽通過不同的排列和嵌套才形成了網(wǎng)頁的框架。
我們在 Chrome 瀏覽器中打開百度,右鍵單擊審查元素或按 F12 打開開發(fā)者模式,切換到 Elements 選項卡即可看到網(wǎng)頁的源代碼,如圖 2-10 所示:

圖 2-10 源代碼
這就是 HTML,整個網(wǎng)頁就是由各種不同的標簽嵌套組合而成的,這些不同標簽定義的節(jié)點元素相互嵌套和組合形成了復(fù)雜的層次關(guān)系,就形成了網(wǎng)頁的架構(gòu)。

CSS

HTML 定義了網(wǎng)頁的結(jié)構(gòu),但是只有 HTML 頁面的布局會不美觀,可能只是簡單的節(jié)點元素的排列,那么為了讓網(wǎng)頁看起來更好看一點,在這里就借助于 CSS。
CSS,全稱叫做 Cascading Style Sheets,即層疊樣式表?!皩盈B”是指當在 HTML 中引用了數(shù)個樣式文件,并且樣式發(fā)生沖突時,瀏覽器能依據(jù)層疊順序處理。“樣式”指網(wǎng)頁中文字大小、顏色、元素間距、排列等格式。
CSS是目前唯一的網(wǎng)頁頁面排版樣式標準,有了它的幫助,頁面才會變得更為美觀。
在上圖的右側(cè)即為 CSS,例如:

#head_wrapper.s-ps-islite .s-p-top {
??? position: absolute;
??? bottom: 40px;
??? width: 100%;
??? height: 181px;
}

這就是一個 CSS 樣式,在大括號前面是一個 CSS 選擇器,此選擇器的意思是選中 id 為 head_wrapper 且 class 為 s-ps-islite 內(nèi)部的 class 為 s-p-top 的元素。大括號內(nèi)部寫的就是一條條樣式規(guī)則,例如 position 指定了這個元素的布局方式為絕對布局,bottom 指定元素的下邊距為 40 像素,width 指定了寬度為 100% 占滿父元素,height 則指定了元素的高度。也就是說我們將一些位置、寬度、高度等樣式配置統(tǒng)一寫成這樣的形式,大括號括起來,然后開頭再加上一個 CSS 選擇器,就代表這一個樣式對 CSS 選擇器選中的元素生效,這樣元素就會根據(jù)此樣式來展示了。
所以在網(wǎng)頁中,一般會統(tǒng)一定義整個網(wǎng)頁的樣式規(guī)則,寫入到 CSS 文件,其后綴名為 css,在 HTML 中只需要用 link 標簽即可引入寫好的 CSS 文件,這樣整個頁面就會變得美觀優(yōu)雅。

JavaScript

JavaScript,簡稱為 JS,是一種腳本語言,HTML 和 CSS 配合使用,提供給用戶的只是一種靜態(tài)的信息,缺少交互性。我們在網(wǎng)頁里可能會看到一些交互和動畫效果,如下載進度條、提示框、輪播圖等,這通常就是 JavaScript 的功勞。它的出現(xiàn)使得用戶與信息之間不只是一種瀏覽與顯示的關(guān)系,而是實現(xiàn)了一種實時、動態(tài)、交互的頁面功能。
JavaScript 通常也是以多帶帶的文件形式加載的,后綴名為 js,在 HTML 中通過 script 標簽即可引入。
例如:

因此綜上所屬,HTML 定義了網(wǎng)頁的內(nèi)容和結(jié)構(gòu),CSS 描述了網(wǎng)頁的布局,JavaScript 定義了網(wǎng)頁的行為。
這就是網(wǎng)頁的三大基本組成。

2. 網(wǎng)頁的結(jié)構(gòu)

我們首先用一個例子來感受一下 HTML 的基本結(jié)構(gòu)。新建一個文本文件,名稱可以自取,后綴名為 html,內(nèi)容如下:



    
        
        This is a Demo
    
    
        

Hello World

Hello, this is a paragraph.

這就是一個最簡單的 HTML 實例,開頭是 DOCTYPE 定義了文檔類型,其次最外層是 html 標簽,最后還有對應(yīng)的結(jié)尾代表標簽閉合,其內(nèi)部是 head 標簽和 body 標簽,分別代表網(wǎng)頁頭和網(wǎng)頁體,它們也分別需要尾標簽表示閉合。head 標簽內(nèi)定義了一些頁面的配置和引用,如:

它指定了網(wǎng)頁的編碼為 UTF-8。
title 標簽則定義了網(wǎng)頁的標題,會顯示在網(wǎng)頁的選項卡中,不會顯示在網(wǎng)頁的正文中。body 標簽內(nèi)則是在網(wǎng)頁正文中顯示的內(nèi)容,div 標簽定義了網(wǎng)頁中的區(qū)塊,它的 id 是 container,這是一個非常常用的屬性,且 id 的內(nèi)容在網(wǎng)頁中是唯一的,我們可以通過 id 來取到這個區(qū)塊。然后在此區(qū)塊內(nèi)又有一個 div 標簽,它的 class 為 wrapper,這也是一個非常常用的屬性,經(jīng)常與 CSS 配合使用來設(shè)定樣式。然后此區(qū)塊內(nèi)部又有一個 h2 標簽,這代表一個二級標題,另外還有一個 p 標簽,這代表一個段落,它們二者內(nèi)部直接寫入相應(yīng)的內(nèi)容即可在網(wǎng)頁重呈現(xiàn)出來,它們也有各自的 class 屬性。
我們將代碼保存之后在瀏覽器中打開該文件,可以看到如下內(nèi)容,如圖 2-11 所示:

圖 2-11 運行結(jié)果
可以看到在選項卡上顯示了 This is a Demo 字樣,這是我們在 head 里面的 title 里定義的文字,它顯示在了網(wǎng)頁選項卡里。而網(wǎng)頁正文是 body 標簽內(nèi)部定義的各個元素生成的,圖中可以看到網(wǎng)頁中顯示了二級標題和段落。
如上實例便是網(wǎng)頁的一般結(jié)構(gòu),一個網(wǎng)頁標準形式都是 html 標簽內(nèi)嵌套 head 和 body 標簽,head 內(nèi)定義網(wǎng)頁的配置和引用,body 內(nèi)定義網(wǎng)頁的正文。

3. 節(jié)點及節(jié)點關(guān)系

在 HTML 中,所有標簽定義的內(nèi)容都是節(jié)點,它們構(gòu)成了一個 HTML DOM 樹。
我們先看下什么是 DOM,DOM 是 W3C(萬維網(wǎng)聯(lián)盟)的標準。
DOM,英文全稱 Document Object Model,即文檔對象模型。它定義了訪問 HTML 和 XML 文檔的標準:

W3C 文檔對象模型 (DOM) 是中立于平臺和語言的接口,它允許程序和腳本動態(tài)地訪問和更新文檔的內(nèi)容、結(jié)構(gòu)和樣式。

W3C DOM 標準被分為 3 個不同的部分:

核心 DOM - 針對任何結(jié)構(gòu)化文檔的標準模型

XML DOM - 針對 XML 文檔的標準模型

HTML DOM - 針對 HTML 文檔的標準模型

根據(jù) W3C 的 HTML DOM 標準,HTML 文檔中的所有內(nèi)容都是節(jié)點:

整個文檔是一個文檔節(jié)點

每個 HTML 元素是元素節(jié)點

HTML 元素內(nèi)的文本是文本節(jié)點

每個 HTML 屬性是屬性節(jié)點注釋是

注釋節(jié)點HTML

DOM 將 HTML 文檔視作樹結(jié)構(gòu),這種結(jié)構(gòu)被稱為節(jié)點樹,如圖 2-12 所示:

圖 2-12 節(jié)點樹
通過 HTML DOM,樹中的所有節(jié)點均可通過 JavaScript 進行訪問,所有 HTML 節(jié)點元素均可被修改,也可以被創(chuàng)建或刪除。
節(jié)點樹中的節(jié)點彼此擁有層級關(guān)系。我們常用 parent(父)、child(子)和 sibling(兄弟)等術(shù)語用于描述這些關(guān)系。父節(jié)點擁有子節(jié)點,同級的子節(jié)點被稱為兄弟節(jié)點。
在節(jié)點樹中,頂端節(jié)點被稱為根(root),除了根節(jié)點之外每個節(jié)點都有父節(jié)點,同時可擁有任意數(shù)量的子節(jié)點或兄弟節(jié)點。
圖 2-13 展示了節(jié)點樹以及節(jié)點之間的關(guān)系:

圖 2-13 節(jié)點樹及節(jié)點關(guān)系
本段參考 W3SCHOOL,鏈接:http://www.w3school.com.cn/ht...。

4. 選擇器

我們知道網(wǎng)頁由一個個節(jié)點組成,CSS 選擇器會根據(jù)不同的節(jié)點設(shè)置不同的樣式規(guī)則,那么我們怎樣來定義是哪些節(jié)點呢?
在 CSS 中是使用了 CSS 選擇器來定位節(jié)點的,例如上例中有個 div 節(jié)點的 id 為 container,那么我們就可以用 CSS 選擇器表示為 #container,# 開頭代表選擇 id,其后緊跟 id 的名稱。另外如果我們想選擇 class 為 wrapper 的節(jié)點,便可以使用 .wrapper,. 開頭代表選擇 class,其后緊跟 class 的名稱。另外還有一種選擇方式是根據(jù)標簽名篩選,例如我們想選擇二級標題,直接用 h2 即可選擇。如上是最常用的三種選擇表示,分別是根據(jù) id、class、標簽名篩選,請牢記它們的寫法。
另外 CSS 選擇器還支持嵌套選擇,各個選擇器之間加上空格分隔開便可以代表嵌套關(guān)系,如 #container .wrapper p 則代表選擇 id 為 container 內(nèi)部的 class 為 wrapper 內(nèi)部的 p 節(jié)點。另外如果不加空格則代表并列關(guān)系,如 div#container .wrapper p.text 代表選擇 id 為 container 的 div 節(jié)點內(nèi)部的 class 為 wrapper 節(jié)點內(nèi)部的 class 為 text 的 p 節(jié)點。這就是 CSS 選擇器,其篩選功能還是非常強大的。
另外 CSS 選擇器還有一些其他的語法規(guī)則,在這里整理如下:

選擇器 例子 例子描述
.class .intro 選擇 class="intro" 的所有節(jié)點。
#id #firstname 選擇 id="firstname" 的所有節(jié)點。
* * 選擇所有節(jié)點。
element p 選擇所有 p 節(jié)點。
element,element div,p 選擇所有 div 節(jié)點和所有 p 節(jié)點。
element element div p 選擇 div 節(jié)點內(nèi)部的所有 p 節(jié)點。
element>element div>p 選擇父節(jié)點為 div 節(jié)點的所有 p 節(jié)點。
element+element div+p 選擇緊接在 div 節(jié)點之后的所有 p 節(jié)點。
[attribute] [target] 選擇帶有 target 屬性所有節(jié)點。
[attribute=value] [target=blank] 選擇 target="blank" 的所有節(jié)點。
[attribute~=value] [title~=flower] 選擇 title 屬性包含單詞 "flower" 的所有節(jié)點。
:link a:link 選擇所有未被訪問的鏈接。
:visited a:visited 選擇所有已被訪問的鏈接。
:active a:active 選擇活動鏈接。
:hover a:hover 選擇鼠標指針位于其上的鏈接。
:focus input:focus 選擇獲得焦點的 input 節(jié)點。
:first-letter p:first-letter 選擇每個 p 節(jié)點的首字母。
:first-line p:first-line 選擇每個 p 節(jié)點的首行。
:first-child p:first-child 選擇屬于父節(jié)點的第一個子節(jié)點的每個 p 節(jié)點。
:before p:before 在每個 p 節(jié)點的內(nèi)容之前插入內(nèi)容。
:after p:after 在每個 p 節(jié)點的內(nèi)容之后插入內(nèi)容。
:lang(language) p:lang 選擇帶有以 "it" 開頭的 lang 屬性值的每個 p 節(jié)點。
element1~element2 p~ul 選擇前面有 p 節(jié)點的每個 ul 節(jié)點。
[attribute^=value] a[src^="https"] 選擇其 src 屬性值以 "https" 開頭的每個 a 節(jié)點。
[attribute$=value] a[src$=".pdf"] 選擇其 src 屬性以 ".pdf" 結(jié)尾的所有 a 節(jié)點。
[attribute*=value] a[src*="abc"] 選擇其 src 屬性中包含 "abc" 子串的每個 a 節(jié)點。
:first-of-type p:first-of-type 選擇屬于其父節(jié)點的首個 p 節(jié)點的每個 p 節(jié)點。
:last-of-type p:last-of-type 選擇屬于其父節(jié)點的最后 p 節(jié)點的每個 p 節(jié)點。
:only-of-type p:only-of-type 選擇屬于其父節(jié)點唯一的 p 節(jié)點的每個 p 節(jié)點。
:only-child p:only-child 選擇屬于其父節(jié)點的唯一子節(jié)點的每個 p 節(jié)點。
:nth-child(n) p:nth-child 選擇屬于其父節(jié)點的第二個子節(jié)點的每個 p 節(jié)點。
:nth-last-child(n) p:nth-last-child 同上,從最后一個子節(jié)點開始計數(shù)。
:nth-of-type(n) p:nth-of-type 選擇屬于其父節(jié)點第二個 p 節(jié)點的每個 p 節(jié)點。
:nth-last-of-type(n) p:nth-last-of-type 同上,但是從最后一個子節(jié)點開始計數(shù)。
:last-child p:last-child 選擇屬于其父節(jié)點最后一個子節(jié)點每個 p 節(jié)點。
:root :root 選擇文檔的根節(jié)點。
:empty p:empty 選擇沒有子節(jié)點的每個 p 節(jié)點(包括文本節(jié)點)。
:target #news:target 選擇當前活動的 #news 節(jié)點。
:enabled input:enabled 選擇每個啟用的 input 節(jié)點。
:disabled input:disabled 選擇每個禁用的 input 節(jié)點
:checked input:checked 選擇每個被選中的 input 節(jié)點。
:not(selector) p:not 選擇非 p 節(jié)點的每個節(jié)點。
::selection ::selection 選擇被用戶選取的節(jié)點部分。

另外還有一種比較常用的選擇器是 XPath,此種選擇方式在后文會詳細介紹。

5. 結(jié)語

本節(jié)介紹了網(wǎng)頁的基本結(jié)構(gòu)和節(jié)點關(guān)系,了解了這些內(nèi)容我們才有更加清晰的思路去解析和提取網(wǎng)頁內(nèi)容。

上一篇文章:Python3網(wǎng)絡(luò)爬蟲實戰(zhàn)---15、爬蟲基礎(chǔ):HTTP基本原理
下一篇文章:Python3網(wǎng)絡(luò)爬蟲實戰(zhàn)---17、爬蟲基本原理

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/44052.html

相關(guān)文章

  • Python3網(wǎng)絡(luò)爬蟲實戰(zhàn)---17、爬蟲基本原理

    摘要:在前面我們講到了和的概念,我們向網(wǎng)站的服務(wù)器發(fā)送一個,返回的的便是網(wǎng)頁源代碼。渲染頁面有時候我們在用或抓取網(wǎng)頁時,得到的源代碼實際和瀏覽器中看到的是不一樣的。所以使用基本請求庫得到的結(jié)果源代碼可能跟瀏覽器中的頁面源代碼不太一樣。 上一篇文章:Python3網(wǎng)絡(luò)爬蟲實戰(zhàn)---16、Web網(wǎng)頁基礎(chǔ)下一篇文章:Python3網(wǎng)絡(luò)爬蟲實戰(zhàn)---18、Session和Cookies 爬蟲,即網(wǎng)...

    hellowoody 評論0 收藏0
  • Python3網(wǎng)絡(luò)爬蟲實戰(zhàn)---15、爬蟲基礎(chǔ):HTTP基本原理

    摘要:上一篇文章網(wǎng)絡(luò)爬蟲實戰(zhàn)部署相關(guān)庫的安裝下一篇文章網(wǎng)絡(luò)爬蟲實戰(zhàn)網(wǎng)頁基礎(chǔ)在寫爬蟲之前,還是需要了解一些爬蟲的基礎(chǔ)知識,如原理網(wǎng)頁的基礎(chǔ)知識爬蟲的基本原理基本原理等。由萬維網(wǎng)協(xié)會和工作小組共同合作制定的規(guī)范,目前廣泛使用的是版本。 上一篇文章:Python3網(wǎng)絡(luò)爬蟲實戰(zhàn)---14、部署相關(guān)庫的安裝:Scrapyrt、Gerapy下一篇文章:Python3網(wǎng)絡(luò)爬蟲實戰(zhàn)---16、Web網(wǎng)頁基礎(chǔ)...

    codeGoogle 評論0 收藏0
  • 首次公開,整理12年積累的博客收藏夾,零距離展示《收藏夾吃灰》系列博客

    摘要:時間永遠都過得那么快,一晃從年注冊,到現(xiàn)在已經(jīng)過去了年那些被我藏在收藏夾吃灰的文章,已經(jīng)太多了,是時候把他們整理一下了。那是因為收藏夾太亂,橡皮擦給設(shè)置私密了,不收拾不好看呀。 ...

    Harriet666 評論0 收藏0
  • Python3網(wǎng)絡(luò)爬蟲實戰(zhàn)---6、Web庫的安裝:Flask、Tornado

    摘要:在本書中用到的一些服務(wù)程序主要有。本節(jié)來分別介紹它們的安裝方法。的安裝是一個輕量級的服務(wù)程序,簡單易用靈活,在本書中我們主要用它來做一些服務(wù),本節(jié)我們來了解下它的安裝方式。相關(guān)鏈接官方文檔安裝執(zhí)行完畢之后即可完成安裝。 上一篇文章:Python3網(wǎng)絡(luò)爬蟲實戰(zhàn)---5、存儲庫的安裝:PyMySQL、PyMongo、RedisPy、RedisDump下一篇文章:Python3網(wǎng)絡(luò)爬蟲實戰(zhàn)-...

    yeyan1996 評論0 收藏0
  • Python3網(wǎng)絡(luò)爬蟲實戰(zhàn)---19、代理基本原理

    摘要:所以使用代理隱藏真實的,讓服務(wù)器誤以為是代理服務(wù)器的在請求自己。參考來源由于涉及到一些專業(yè)名詞知識,本節(jié)的部分內(nèi)容參考來源如下代理服務(wù)器維基百科代理百度百科上一篇文章網(wǎng)絡(luò)爬蟲實戰(zhàn)和下一篇文章網(wǎng)絡(luò)爬蟲實戰(zhàn)使用發(fā)送請求 上一篇文章:Python3網(wǎng)絡(luò)爬蟲實戰(zhàn)---18、Session和Cookies下一篇文章:Python3網(wǎng)絡(luò)爬蟲實戰(zhàn)---20、使用Urllib:發(fā)送請求 我們在做爬蟲...

    gougoujiang 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<