iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 7
0
AI & Data

Scrapy爬蟲與資料處理30天筆記系列 第 7

[Day 07] 爬蟲前要先理解的HTML架構

嗨,第7天,說明完requests之後,來說明HTML吧。

HTML 是一種標記語言(markup language),非一般的程式設計語言。它告訴瀏覽器該如何呈現網頁HTML,含了一系列的元素(elements),而元素包含了標籤(tags)與內容(content)。

舉例來說:

<p class="hello-title"> hello world </p> 
  • 起始標籤 : \<p\>
  • 結束標籤 : <\/p\>
  • 內容 : hello world
  • 屬性 : class="hello-title"

屬性(Attribute)不會呈現在網頁上,但可以透過屬性提供更多的資訊幫助我們編輯網頁的呈現,包含:

  1. 在元素名稱和屬性之間有一個空格(標籤內可有多個屬性)
  2. 屬性名稱後面接=符號
  3. 屬性包在起始標籤裡面

HTML 主要架構:

  1. <!DOCTYPE html> : 文件類型(doctype)
  2. <html></html> : <html>元素為根元素包含了所有顯示在該網頁面的內容。
  3. <head></head> : 裡面放的是你想涵括的重要資訊,但不會顯示於網頁上的。
  4. <body></body> : 包含所有會顯示於網頁瀏覽者眼前的內容。
  5. <title></title> : 呈現於網頁瀏覽者眼前的網頁標題。

以下是一個HTML範例:

<!DOCTYPE html>
<html>
<head>
    <title>The Dormouse's story</title>
</head>
<body>
    <p class="title"><b>The Dormouse's story</b></p>
    <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">Elsie</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>
</body>
</html>
  • 一般來說,我們所看到網頁的HTML都為巢狀,以上面範例來說可以看到<head><body>為同一層,而<head><body>內又分別包覆了<title><p>,而<p>內又包覆了<a>元素。

該怎麼看?只要看標籤的起始標籤結束標籤,裡面所包覆的就為子元素。

  • <p class="story"></p>中間就包含了三個</a>元素,這三個<a>元素便是<p class="story">的子元素。

要如何看網頁的HTML?在昨天我們有透過Requests得到HTML內容,又是取得哪些內容?我們可以在網畫面點擊右鍵>檢查
Imgur

現在來看一下裡面元素吧,對標題Python 3.0 Release | Python.org點右鍵檢查,可以看到標題內容是在<h3>class="LC20lb"的元素內,明天開始會介紹如何取得裡面的內容。

Imgur

  • 不過裡面看到的內容不一定跟回傳得到的內容一樣,因為有些內容是經過JS渲染過的,要怎麼知道沒有JS渲染的畫面會是怎樣呢?
    (我是)用Chrome瀏覽器,可以到網頁設定關掉JS(如圖):
    Imgur

封鎖之後所看到的內容就是沒有經過渲染的網頁內容才是實際抓到的內容:

Imgur
會發現標題跟網頁連結其實都是在<a>標籤內!那接下來該用什麼工具解析它得到我們要的內容,就明天再介紹啦!


上一篇
[Day 06] requests 發送HTTP請求
下一篇
[Day 08] Beautiful Soup 解析HTML元素
系列文
Scrapy爬蟲與資料處理30天筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言