Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 久久精品免看国产成,中文字幕一区二区三区在线播放 ,在线免费视频你懂的

          整合營(yíng)銷服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢熱線:

          爬蟲利器 Beautiful Soup 之遍歷文檔

          爬蟲利器 Beautiful Soup 之遍歷文檔

          eautiful Soup 簡(jiǎn)介

          Beautiful Soup 是一個(gè)可以從 HTML 或 XML 文件中提取數(shù)據(jù)的 Python 庫(kù),它提供了一些簡(jiǎn)單的操作方式來幫助你處理文檔導(dǎo)航,查找,修改文檔等繁瑣的工作。因?yàn)槭褂煤?jiǎn)單,所以 Beautiful Soup 會(huì)幫你節(jié)省不少的工作時(shí)間。

          Beautiful Soup 安裝

          你可以使用如下命令安裝 Beautiful Soup。二選一即可。

          $ easy_install beautifulsoup4
          
          $ pip install beautifulsoup4

          Beautiful Soup 不僅支持 Python 標(biāo)準(zhǔn)庫(kù)中的 HTML 解析器,還支持很多第三方的解析器,比如 lxml,html5lib 等。初始化 Beautiful Soup 對(duì)象時(shí)如果不指定解析器,那么 Beautiful Soup 將會(huì)選擇最合適的解析器(前提是你的機(jī)器安裝了該解析器)來解析文檔,當(dāng)然你也可以手動(dòng)指定解析器。這里推薦大家使用 lxml 解析器,功能強(qiáng)大,方便快捷,而且該解析器是唯一支持 XML 的解析器。

          你可以使用如下命令來安裝 lxml 解析器。二選一即可。

          $ easy_install lxml
          
          $ pip install lxml

          Beautiful Soup 小試牛刀

          Beautiful Soup 使用來起來非常簡(jiǎn)單,你只需要傳入一個(gè)文件操作符或者一段文本即可得到一個(gè)構(gòu)建完成的文檔對(duì)象,有了該對(duì)象之后,就可以對(duì)該文檔做一些我們想做的操作了。而傳入的文本大都是通過爬蟲爬取過來的,所以 Beautiful Soup 和 requests 庫(kù)結(jié)合使用體驗(yàn)更佳。

          # demo 1
          from bs4 import BeautifulSoup
          # soup=BeautifulSoup(open("index.html"))
          soup=BeautifulSoup("<html><head><title>index</title></head><body>content</body></html>", "lxml") # 指定解析器
          print(soup.head)
          
          # 輸出結(jié)果
          <head><title>index</title></head>

          Beautiful Soup 將復(fù)雜的 HTML 文檔轉(zhuǎn)換成一個(gè)復(fù)雜的樹形結(jié)構(gòu),每個(gè)節(jié)點(diǎn)都是 Python 對(duì)象,所有對(duì)象可以歸納為 4 種: Tag,NavigableString,BeautifulSoup,Comment。

          Tag 就是 HTML 的一個(gè)標(biāo)簽,比如 div,p 標(biāo)簽等,也是我們用的最多的一個(gè)對(duì)象。

          NavigableString 指標(biāo)簽內(nèi)部的文字,直譯就是可遍歷的字符串。

          BeautifulSoup 指一個(gè)文檔的全部?jī)?nèi)容,可以當(dāng)成一個(gè) Tag 來處理。

          Comment 是一個(gè)特殊的 NavigableString,其輸出內(nèi)容不包括注視內(nèi)容。

          為了故事的順利發(fā)展,我們先定義一串 HTML 文本,下文的所有例子都是基于這段文本的。

          html_doc="""
          <html><head><title>index</title></head>
          <body>
          <p class="title"><b>首頁</b></p>
          <p class="main">我常用的網(wǎng)站
          <a href="https://www.google.com" class="website" id="google">Google</a>
          <a href="https://www.baidu.com" class="website" id="baidu">Baidu</a>
          <a href="https://cn.bing.com" class="website" id="bing">Bing</a>
          </p>
          <div><!--這是注釋內(nèi)容--></div>
          <p class="content1">...</p>
          <p class="content2">...</p>
          </body>
          """

          子節(jié)點(diǎn)

          Tag 有兩個(gè)很重要的屬性,name 和 attributes。期中 name 就是標(biāo)簽的名字,attributes 是標(biāo)簽屬性。標(biāo)簽的名字和屬性是可以被修改的,注意,這種修改會(huì)直接改變 BeautifulSoup 對(duì)象。

          # demo 2
          soup=BeautifulSoup(html_doc, "lxml");
          p_tag=soup.p
          print(p_tag.name)
          print(p_tag["class"])
          print(p_tag.attrs)
          
          p_tag.name="myTag" # attrs 同樣可被修改,操作同字典
          print(p_tag)
          
          #輸出結(jié)果
          p
          ['title']
          {'class': ['title']}
          <myTag class="title"><b>首頁</b></myTag>

          由以上例子我么可以看出,可以直接通過點(diǎn)屬性的方法來獲取 Tag,但是這種方法只能獲取第一個(gè)標(biāo)簽。同時(shí)我們可以多次調(diào)用點(diǎn)屬性這個(gè)方法,來獲取更深層次的標(biāo)簽。

          # demo 3
          soup=BeautifulSoup(html_doc, "lxml");
          print(soup.p.b)
          
          #輸出結(jié)果
          <b>首頁</b>

          如果想獲得所有的某個(gè)名字的標(biāo)簽,則可以使用 find_all(tag_name) 函數(shù)。

          # demo 4
          soup=BeautifulSoup(html_doc, "lxml");
          a_tags=soup.find_all("a")
          print(a_tags)
          
          #輸出結(jié)果
          [<a class="website" href="https://www.google.com" id="google">Google</a>, <a class="website" href="https://www.baidu.com" id="baidu">Baidu</a>, <a class="website" href="https://cn.bing.com" id="bing">Bing</a>]

          我們可以使用 .contents 將 tag 以列表方式輸出,即將 tag 的子節(jié)點(diǎn)格式化為列表,這很有用,意味著可以通過下標(biāo)進(jìn)行訪問指定節(jié)點(diǎn)。同時(shí)我們還可以通過 .children 生成器對(duì)節(jié)點(diǎn)的子節(jié)點(diǎn)進(jìn)行遍歷。

          # demo 5
          soup=BeautifulSoup(html_doc, "lxml");
          head_tag=soup.head
          print(head_tag)
          print(head_tag.contents)
          
          for child in head_tag.children:
          	print("child is : ", child)
          
          #輸出結(jié)果
          <head><title>index</title></head>
          [<title>index</title>]
          child is :  <title>index</title>

          .children 只可以獲取 tag 的直接節(jié)點(diǎn),而獲取不到子孫節(jié)點(diǎn),.descendants 可以滿足你。

          # demo 6
          soup=BeautifulSoup(html_doc, "lxml");
          head_tag=soup.head
          for child in head_tag.descendants:
          	print("child is : ", child)
          
          # 輸出結(jié)果
          child is :  <title>index</title>
          child is :  index

          父節(jié)點(diǎn)

          通過 .parent 屬性獲取標(biāo)簽的父親節(jié)點(diǎn)。 title 的父標(biāo)簽是 head,html 的父標(biāo)簽是 BeautifulSoup 對(duì)象,而 BeautifulSoup 對(duì)象的父標(biāo)簽是 None。

          # demo 7
          soup=BeautifulSoup(html_doc, "lxml");
          title_tag=soup.title
          
          print(title_tag.parent)
          print(type(soup.html.parent))
          print(soup.parent)
          
          # 輸出結(jié)果
          <head><title>index</title></head>
          <class 'bs4.BeautifulSoup'>
          None

          同時(shí),我們可以通過 parents 得到指定標(biāo)簽的所有父親標(biāo)簽。

          # demo 8
          soup=BeautifulSoup(html_doc, "lxml");
          a_tag=soup.a
          
          for parent in a_tag.parents:
              print(parent.name)
          
          # 輸出結(jié)果
          p
          body
          html
          [document]

          兄弟節(jié)點(diǎn)

          通過 .next_sibling 和 .previous_sibling 來獲取下一個(gè)標(biāo)簽和上一個(gè)標(biāo)簽。

          # demo 9
          soup=BeautifulSoup(html_doc, "lxml");
          div_tag=soup.div
          
          print(div_tag.next_sibling)
          print(div_tag.next_sibling.next_sibling)
          
          # 輸出結(jié)果
          
          <p class="content1">...</p>

          你可能會(huì)納悶,調(diào)用了兩次 next_sibling 怎么只有一個(gè)輸出呢,這方法是不是有 bug 啊。事實(shí)上是 div 的第一個(gè) next_sibling 是div 和 p 之間的換行符。這個(gè)規(guī)則對(duì)于 previous_sibling 同樣適用。

          另外,我們可以通過 .next_siblings 和 .previous_siblings 屬性可以對(duì)當(dāng)前節(jié)點(diǎn)的兄弟節(jié)點(diǎn)迭代輸出。在該例子中,我們?cè)诿看屋敵銮凹恿饲熬Y,這樣就可以更直觀的看到 dib 的第一個(gè) previous_sibling 是換行符了。

          # demo 10
          soup=BeautifulSoup(html_doc, "lxml");
          div_tag=soup.div
          
          for pre_tag in div_tag.previous_siblings:
          	print("pre_tag is : ", pre_tag)
          
          # 輸出結(jié)果
          pre_tag is :  
          
          pre_tag is :  <p class="main">我常用的網(wǎng)站
          <a class="website" href="https://www.google.com" id="google">Google</a>
          <a class="website" href="https://www.baidu.com" id="baidu">Baidu</a>
          <a class="website" href="https://cn.bing.com" id="bing">Bing</a>
          </p>
          pre_tag is :  
          
          pre_tag is :  <p class="title"><b>首頁</b></p>
          pre_tag is :  

          前進(jìn)和后退

          通過 .next_element 和 .previous_element 獲取指定標(biāo)簽的前一個(gè)或者后一個(gè)被解析的對(duì)象,注意這個(gè)和兄弟節(jié)點(diǎn)是有所不同的,兄弟節(jié)點(diǎn)是指有相同父親節(jié)點(diǎn)的子節(jié)點(diǎn),而這個(gè)前一個(gè)或者后一個(gè)是按照文檔的解析順序來計(jì)算的。

          比如在我們的文本 html_doc 中,head 的兄弟節(jié)點(diǎn)是 body(不考慮換行符),因?yàn)樗麄兙哂泄餐母腹?jié)點(diǎn) html,但是 head 的下一個(gè)節(jié)點(diǎn)是 title。即soup.head.next_sibling=title soup.head.next_element=title

          # demo 11
          soup=BeautifulSoup(html_doc, "lxml");
          
          head_tag=soup.head
          print(head_tag.next_element)
          
          title_tag=soup.title
          print(title_tag.next_element)
          
          # 輸出結(jié)果
          <title>index</title>
          index

          同時(shí)這里還需要注意的是 title 下一個(gè)解析的標(biāo)簽不是 body,而是 title 標(biāo)簽內(nèi)的內(nèi)容,因?yàn)?html 的解析順序是打開 title 標(biāo)簽,然后解析內(nèi)容,最后關(guān)閉 title 標(biāo)簽。

          另外,我們同樣可以通過 .next_elements 和 .previous_elements 來迭代文檔樹。由遺下例子我們可以看出,換行符同樣會(huì)占用解析順序,與迭代兄弟節(jié)點(diǎn)效果一致。

          # demo 12
          soup=BeautifulSoup(html_doc, "lxml");
          div_tag=soup.div
          for next_element in div_tag.next_elements:
          	print("next_element is : ", next_element)
          
          # 輸出結(jié)果
          next_element is :  這是注釋內(nèi)容
          next_element is :  
          
          next_element is :  <p class="content1">...</p>
          next_element is :  ...
          next_element is :  
          
          next_element is :  <p class="content2">...</p>
          next_element is :  ...
          next_element is :  
          
          next_element is :  

          Beautiful Soup 總結(jié)

          本章節(jié)介紹了 Beautiful Soup 的使用場(chǎng)景以及操作文檔樹節(jié)點(diǎn)的基本操作,看似很多東西其實(shí)是有規(guī)律可循的,比如函數(shù)的命名,兄弟節(jié)點(diǎn)或者下一個(gè)節(jié)點(diǎn)的迭代函數(shù)都是獲取單個(gè)節(jié)點(diǎn)函數(shù)的復(fù)數(shù)形式。

          同時(shí)由于 HTML 或者 XML 這種循環(huán)嵌套的復(fù)雜文檔結(jié)構(gòu),致使操作起來甚是麻煩,掌握了本文對(duì)節(jié)點(diǎn)的基本操作,將有助于提高你寫爬蟲程序的效率。


          用html標(biāo)簽使用介紹

          本文主要記錄常用的html標(biāo)簽使用說明,用起來的時(shí)候偶爾查查。

          常用html標(biāo)簽列表

          標(biāo)簽

          英文全拼

          作用

          特點(diǎn)

          ?<html></html>??

          html

          網(wǎng)頁的根標(biāo)簽

          所有的標(biāo)簽都要寫在這一對(duì)根標(biāo)簽里面

          ??<head></head>??

          head

          網(wǎng)頁的頭標(biāo)簽

          包括完檔的屬性和信息

          ??<body></body>??

          body

          網(wǎng)頁的主題

          包含文檔的所有內(nèi)容

          ??<div></div>??

          division

          定義一個(gè)區(qū)域

          瀏覽器通常會(huì)在??<div>??前后放置一個(gè)換行符

          ??<!-- 注釋 -->??

          -

          注釋

          單標(biāo)簽

          ??<br>或<br/>??

          break

          換行

          單標(biāo)簽,不會(huì)在其前后創(chuàng)建空白行

          ??<hr>或<hr/>??

          horizontal rule

          添加水平線

          單標(biāo)簽

          ??<img src="">??

          image

          添加圖片

          單標(biāo)簽

          ??<embed src="">??

          embed

          嵌入外部應(yīng)用

          單標(biāo)簽

          ??<meta>??

          meta

          提供有關(guān)頁面的元信息

          單標(biāo)簽,??<meta>???標(biāo)簽通常位于??<head>??區(qū)域內(nèi)

          ??<link>??

          link

          定義文檔與外部資源的關(guān)系

          單標(biāo)簽,??<link>???標(biāo)簽只能存在于??<head>??區(qū)域內(nèi),不過它可出現(xiàn)任何次數(shù)。

          ??<p></p>??

          paragraph

          定義段落

          自動(dòng)在其前后創(chuàng)建空白行

          ??<h1> to <h6>??

          Header 1 to Header 6

          定義標(biāo)題

          h1在一個(gè)頁面里只能出現(xiàn)一次

          ??<strong></strong>??

          strong

          文本加粗

          加粗標(biāo)記該文本

          ??<b></b>??

          bold

          文本加粗

          加粗顯示文本,不推薦使用

          ??<em></em>??

          emphasize

          文本傾斜

          傾斜標(biāo)記文本

          ??<i></i>??

          italic

          文本傾斜

          傾斜顯示文本,不推薦使用

          ??<del></del>??

          delete

          文本添加刪除線

          -

          ??<s></s>??

          strike

          文本添加刪除線

          不推薦使用

          ??<ins></ins>??

          insert

          文本添加下劃線

          -

          ??<u></u>??

          underline

          文本添加下劃線

          不推薦使用

          ??<a href="">填寫內(nèi)容</a>??

          anchor

          添加超鏈接

          最好使用CSS來改變鏈接的樣式

          ??<ul></ul>??

          unordered list

          定義無序列表

          通常與??<li>??標(biāo)簽一起使用

          ??<ol></ol>??

          ordered list

          定義有序列表

          通常與??<li>??標(biāo)簽一起使用

          ??<li></li>??

          list item

          創(chuàng)建列表項(xiàng)

          可與各種列表定義標(biāo)簽一起使用

          ??<dl></dl>??

          definition list

          定義描述列表

          通常與??<dt>???和??<dd>??一起使用

          ??<dt></dt>??

          definition term

          定義條目

          定義描述列表的項(xiàng)目

          ??<dd></dd>??

          definition description

          定義描述

          對(duì)描述列表中的項(xiàng)目進(jìn)行描述

          ??<table></table>??

          table

          定義HTML表格

          盡可能通過樣式改變表格外觀

          ??<tr></tr>??

          table row

          定義表格的行

          一個(gè)??<tr>???標(biāo)簽包含一個(gè)或多個(gè)??<th>???或??<td>??標(biāo)簽

          ??<th></th>??

          table headline

          定義表格每一列的標(biāo)題

          該標(biāo)簽的文本通常呈現(xiàn)為粗體且居中

          ??<td></td>??

          table data

          定義表格中的單元格數(shù)據(jù)

          該標(biāo)簽的文本呈現(xiàn)為普通且左對(duì)齊

          ??<caption>表格標(biāo)題</caption>??

          caption

          定義整個(gè)表格的標(biāo)題

          ??<caption>???標(biāo)簽必須直接放在??<table>??標(biāo)簽后

          ??<input type="">??

          input

          定義輸入控件

          輸入字段可通過多種方式改變,取決于type屬性

          ??select??

          select

          定義下拉列表

          ??<select>???中的??<option>??標(biāo)簽定義了列表中的可用選項(xiàng)

          ??<option></option>??

          option

          定義下拉列表中的可用項(xiàng)

          ??<option>??標(biāo)簽不可自由定義寬高

          ??<optgroup></optgroup>??

          options group

          定義選項(xiàng)組

          ??<optgroup>??標(biāo)簽用于把相關(guān)的選項(xiàng)組合在一起

          ??<textarea></textarea>??

          textarea

          定義多行的文本輸入控件

          文本的默認(rèn)字體是等寬字體

          ??<form></form>??

          form

          定義表單

          ??<form>??可以包含多個(gè)元素

          ??<fieldset></fieldset>??

          field set

          定義圍繞表單中元素的邊框

          ??<legend>???為??<fieldset>??定義標(biāo)題

          ??<legend></legend>??

          legend

          為??<fieldset>??定義標(biāo)題

          ??<legend>??通過css設(shè)定樣式

          ??<progress></progress>??

          progress

          定義運(yùn)行中的任務(wù)進(jìn)度

          ??<progress>???是HTML5中的新標(biāo)簽,??<progress>??標(biāo)簽不適合用來表示度量衡

          ??<meter></meter>??

          meter

          度量衡

          ??<meter>???是HTML5的新標(biāo)簽,??<meter>??標(biāo)簽不適合用來表示進(jìn)度條

          ??<audio></audio>??

          audio

          添加音頻

          ??<audio>??標(biāo)簽是HTML5的新標(biāo)簽

          ??<video></video>??

          video

          添加視頻

          ??<video>??標(biāo)簽是HTML5的新標(biāo)簽

          ??<source>??

          source

          定義媒介資源

          ??<source>??標(biāo)簽是HTML5中的新標(biāo)簽

          常用標(biāo)簽使用說明

          • 常用寫法:??<img src="" alt="" title=""width="" height=""??>
          • src:圖片的來源(必寫屬性)
          • alt:圖像不顯示時(shí)的替代文本
          • title:鼠標(biāo)在移動(dòng)到元素上的文本提示
          • width/height:圖片寬高,沒有定義寬高的時(shí)候,圖片按照百分之百比例顯示,更改圖片的寬度或者高度,圖片等比例縮放

          普通用法

          • 常用寫法:??<a href="" title="" target="">填寫內(nèi)容</a>??
          • href:去往的路徑(必寫屬性)
          • title:鼠標(biāo)在移動(dòng)到元素上的文本提示
          • target:規(guī)定在何處打開路徑
          • _blank:新頁面打開
          • _parent:在父窗口中打開鏈接
          • _self:當(dāng)前頁面跳轉(zhuǎn)(默認(rèn)值)
          • _top:在當(dāng)前窗體打開鏈接,并替換當(dāng)前的整個(gè)窗體
          • 當(dāng)href的值為javascript:void(0); 或 javascript:; ,表示超鏈接不做任何事情,不做任何跳轉(zhuǎn)
          • 當(dāng)href的值為#,表示超鏈接為空鏈接,點(diǎn)擊此鏈接時(shí)會(huì)跳轉(zhuǎn)到頁首的位置

          錨點(diǎn)鏈接

          錨點(diǎn)鏈接通過點(diǎn)擊超鏈接,自動(dòng)跳轉(zhuǎn)到我們?cè)O(shè)置錨點(diǎn)的位置,類似于word的目錄導(dǎo)航。建立錨點(diǎn)的元素必須要有id或name屬性,最好兩個(gè)都有。這里只跳轉(zhuǎn)本頁面元素,其他頁面跳轉(zhuǎn)自行搜索。
          具體做法如下:

          1. 給目標(biāo)元素設(shè)置id值,如??<p id="id1"></p>??
          2. 設(shè)置錨點(diǎn)超鏈接,錨點(diǎn)的超鏈接路徑一定包含"#",后面緊跟元素的id或者name,如??<a href="#id1"></a>??

          示例如下。為了顯示效果,通過使用lorem自動(dòng)生成隨機(jī)文本(具體使用方法搜索,一般直接輸入就行),lorem*50表示重復(fù)lorem15次。

          <a href="#id2">a</a>
          
            <p id="id1">
              (lorem*15)
            </p>
          
               (lorem*15)
          
            <p id="id2">
               (lorem*15)
            </p>

          超鏈接全局設(shè)置

          在頁面head中寫入代碼可以設(shè)置超鏈接的全局跳轉(zhuǎn)設(shè)置

          <head>
            <!-- 讓頁面所有的超鏈接新頁面打開 -->
            <base target="_blank">  
          </head>

          charset編碼

          • 常用寫法: ??<meta charset="UTF-8">??
          • charset:定義文檔的字符編碼
          • ASCII/ANSI/Unicode:英語
          • GBK:亞洲通用字符集
          • GB2312:中文簡(jiǎn)體
          • Big5:臺(tái)澳港繁體
          • UTF-8:世界通用字符集

          name

          1. 關(guān)鍵字
          • 常用寫法: ??<meta name="keywords" content="">??
          • 描述:告訴搜索引擎網(wǎng)頁的關(guān)鍵字,盡量將重要的關(guān)鍵詞放在前面
          1. 網(wǎng)頁描述
          • 常用寫法: ??<meta name="keywords" content="">??
          • 描述:告訴搜索引擎網(wǎng)頁的主要內(nèi)容
          1. 作者
          • 常用寫法: ??<meta name="author" content="">??
          • 描述:告訴搜索引擎網(wǎng)頁的作者
          1. 文件檢索
          • 常用寫法: ??<meta name="robots" content="all | none | index | noindex | follow | nofollow">??
          • 描述:有時(shí)候會(huì)有一些站點(diǎn)內(nèi)容,不希望被ROBOTS抓取而公開。為了解決這個(gè)問題,ROBOTS開發(fā)界提供了兩個(gè)辦法:一個(gè)是robots.txt,另一個(gè)是The Robots META標(biāo)簽。
          • content: 文件檢索方式
          • all:文件將被檢索,且頁面上的鏈接可以被查詢 (默認(rèn)值)
          • none:文件將不被檢索,且頁面上的鏈接不可以被查詢
          • index:文件將被檢索;
          • noindex:文件將不被檢索,但頁面上的鏈接可以被查詢
          • follow:頁面上的鏈接可以被查詢
          • nofollow:文件將不被檢索,頁面上的鏈接可以被查詢

          網(wǎng)頁自動(dòng)跳轉(zhuǎn)

          • 常用寫法: ??<meta http-equiv="Refresh" content="3;url=http://www.baidu.com" />??
          • 描述:網(wǎng)頁5秒后自動(dòng)跳轉(zhuǎn)到谷歌主頁
          • url:為空則刷新本頁
          • 常用寫法:
          • 描述:規(guī)定當(dāng)前文檔與被鏈接文檔/資源之間的關(guān)系
          • rel:定義當(dāng)前文檔與被鏈接文檔之間的關(guān)系。rel 是 relationship的英文縮寫(必寫屬性)
          • type:規(guī)定被鏈接文檔的類型
          • href:鏈接的文件路徑
          • 示例:
          • 鏈接外部樣式表:??<link rel="stylesheet" type="text/css" href="a.css">??
          • 設(shè)置網(wǎng)頁icon圖標(biāo):??<link rel="icon" href="a.ico">??

          列表

          無序列表

          無序列表使用粗體圓點(diǎn)進(jìn)行標(biāo)記。簡(jiǎn)單示例如下。

          <ul>
                  <li>1</li>
                  <li>2</li>
                  <li>3</li>
                  ...
              </ul>

          有序列表

          有序列表使用數(shù)字進(jìn)行標(biāo)記,我們可以通過整數(shù)值start指定列表編號(hào)的起始值。簡(jiǎn)單示例如下。

          <ol start="2">
                  <li>a</li>
                  <li>b</li>
                  <li>c</li>
                  ...
              </ol>

          描述列表

          通過描述列表自定義列表,列表項(xiàng)內(nèi)部可以使用段落、換行符、圖片、鏈接以及其他列表等等。簡(jiǎn)單示例如下。

          <dl>
                  <dt>A</dt> <!-- 小標(biāo)題 -->
                      <dd>A1</dd> <!-- 解釋標(biāo)題 -->
                      <dd>A2</dd> <!-- 解釋標(biāo)題 -->
                  <dt>B</dt> <!-- 小標(biāo)題 -->
                      <dd>B1</dd> <!-- 解釋標(biāo)題 -->
                      <dd>B2</dd> <!-- 解釋標(biāo)題 -->
              </dl>

          表格

          基礎(chǔ)表格

          • 常用寫法:??<table width="" height="" border="" cellspacing="" cellpadding=""></table>??
          • width:表格寬度
          • height:表格高度
          • border:邊框?qū)挾?/li>
          • cellspacing:?jiǎn)卧耖g距
          • cellpadding:內(nèi)容與邊框間距

          簡(jiǎn)單示例如下。

          <table width="300px" height="100px" border="2" cellspacing="5px" cellpadding="0">
          <caption>表格標(biāo)題</caption> <!-- 定義表格標(biāo)題 -->
          
          <tr>
              <!-- 定義表格的行 -->
              <td>A1</td> <!-- 定義表格該行第一列中的數(shù)據(jù) -->
              <td>B1</td>
              <td>C1</td>
          </tr>
          <tr>
              <!-- 定義表格的行 -->
              <th>A</th> <!-- 定義表格每一列的標(biāo)題 -->
              <th>B</th>
              <th>C</th>
          </tr>
          <tr>
              <td>A2</td>
              <td>B2</td>
              <td>C2</td>
          </tr>
          </table>

          單元格合并

          • 常用寫法:??<td colspan=“” rowspan=“”></td>??
          • 描述:告訴表格該單元格可以橫跨colspan列,縱跨rowspan行

          簡(jiǎn)單示例如下。

          <table border="2" cellspacing="1px" width="400px" height="100px">
          <caption><strong>表格標(biāo)題</strong></caption> <!-- 定義表格標(biāo)題 -->
          <tr height="100">
              <!-- 定義表格的行 -->
              <td colspan="2">A1</td> <!-- 定義該行可以橫跨兩列 -->
              <td>B1</td>
          </tr>
          
          <tr height="100">
              <td>A2</td>
              <td>B2</td>
              <td rowspan="2">C</td> <!-- 定義該行可以橫跨兩行 -->
          </tr>
          
          <tr height="100">
              <td>A3</td>
              <td>B3</td>
          </tr>
          </table>

          對(duì)于??<input>??不同的type屬性值,輸入字段擁有很多種形式。輸入字段可以是文本字段、復(fù)選框、掩碼后的文本控件、單選按鈕、按鈕等等。

          文本輸入框

          • 常用寫法:??<input type="text" name="" maxlength="" readonly="" disabled="" value="">??
          • type:規(guī)定輸入字段的類型
          • name:輸入框的名字
          • maxlength:輸入文本長(zhǎng)度
          • readonly:輸入框是否只讀
          • disabled:輸入框是否未激活
          • value:輸入框默認(rèn)值

          簡(jiǎn)單示例如下。

          <input type="text" name="username" maxlength="6" readonly="readonly" disabled="disabled" value="用戶名">

          密碼輸入框

          • 常用寫法:??<input type="password" name="">??
          • type:規(guī)定輸入字段的類型
          • name:輸入框的名字
          • 密碼輸入框的其他參數(shù)和文本輸入框一樣

          簡(jiǎn)單示例如下。

          <input type="password" name="pwd" maxlength="6" readonly="readonly" disabled="disabled" value="密碼">

          單選框

          • 常用寫法:??<input type="radio" name="" checked="checked">??
          • type:規(guī)定輸入字段的類型
          • name:輸入框的名字
          • checked:設(shè)定該輸入框被預(yù)先選定
          • 想要多個(gè)單選框只能有一個(gè)被選中,設(shè)置所有單選框的name值相同即可實(shí)現(xiàn)

          示例一,兩個(gè)單選框都可以被選中

          <div>
              <input type="radio" name="man" checked="checked">男
          </div>
          <div>
              <input type="radio" name="woman">女
          </div>

          示例二,兩個(gè)單選框只能有一個(gè)被選中

          <div>
              <input type="radio" name="gender" checked="checked">男
            </div>
            <div>
              <input type="radio" name="gender">女
            </div>

          下拉列表

          ??<select>??

          • 常用寫法:??<select multiple=""></select>??
          • multiple:當(dāng)該屬性為true時(shí),可選擇多個(gè)選項(xiàng)。

          ??<optgroup>??

          • 常用寫法:??<optgroup label=""></optgroup>??
          • label:設(shè)定選項(xiàng)組的描述。

          ??<option>??

          • 常用寫法:??<option value="" selected="">選項(xiàng)值</option>??
          • value:定義送往服務(wù)器的選項(xiàng)值。
          • selected:當(dāng)該屬性為true時(shí),該選項(xiàng)被默認(rèn)選擇。

          示例一,單選下拉列表

          <select>
              <option value="a">a</option>
              <option value="b">b</option>
              <option value="c" selected='selected'>c</option>  <!-- 默認(rèn)選中 -->
            </select>

          示例二,帶組合的單選下拉列表

          <select>
              <optgroup label="A">
                <option value="a1">a1</option>
                <option value="a2" selected='selected'>a2</option>
              </optgroup>
              <optgroup label="B">
                <option value="b1">b1</option>
                <option value="b2">b2</option>
              </optgroup>
            </select>

          示例三,帶組合的多選下拉列表

          <select multiple=”multiple”>
              <optgroup label="A">
                <option value="a1">a1</option>
                <option value="a2" selected='selected'>a2</option>
              </optgroup>
              <optgroup label="B">
                <option value="b1" selected='selected'>b1</option>
                <option value="b2">b2</option>
              </optgroup>
            </select>

          多選框

          • 常用寫法:??<input type="checkbox" checked="">??
          • type:規(guī)定輸入字段的類型
          • checked:設(shè)定該輸入框被預(yù)先選定

          簡(jiǎn)單示例如下。

          <input type="checkbox"  checked="checked">A
            <input type="checkbox">B

          文本框

          • 常用寫法:??<textarea cols="" rows="" placeholder=""></textarea>??
          • cols:控制可見文本的列數(shù)
          • rows:控制可見文本的行數(shù)
          • placeholder:提示字符

          簡(jiǎn)單示例如下。

          <textarea cols="5" rows="2" placeholder="text"></textarea>

          文本上傳控件

          • 常用寫法:??<input type="file" accept=""/>??
          • accept:規(guī)定提交的文件的類型

          簡(jiǎn)單示例如下。

          <input type="file" accept="image/gif, image/jpeg"/>

          其他類型按鈕

          <input type="submit">文件提交按鈕
            <input type="button" value="">普通按鈕
            <input type="image" src="">圖片按鈕
            <input type="reset">重置按鈕
            <input type="url">網(wǎng)址控件
            <input type="date">日期控件 
            <input type="time">時(shí)間控件
            <!--email提供了郵箱的完整驗(yàn)證,必須包含@和后綴,如果不滿足驗(yàn)證,會(huì)阻止表單提交-->
            <input type="email">郵件控件
            <input type="number" step="3">數(shù)字控件
            <input type="range" step="100">滑塊控件
            <input type="color">顏色控件

          表單

          示例一,普通表單

          <form>
              First name: <input type="text" name="fname"><br>
              Last name: <input type="text" name="lname"><br>
              <input type="submit" value="提交">
            </form>

          示例二,帶分組信息表單

          <form>
              <fieldset>
                <legend>Personalia:</legend>
                First name: <input type="text" name="fname"><br>
                Last name: <input type="text" name="lname"><br>
                <input type="submit" value="提交">
              </fieldset>
          
              First nameA: <input type="text" name="fname"><br>
              Last nameB: <input type="text" name="lname"><br>
            </form>

          ??<progress>???與??<meter>??主要區(qū)別和用法見??HTML5 progress和meter控件??

          ??<progress>??

          • 常用寫法:??<progress value="" max=""></progress>??
          • value:規(guī)定進(jìn)程的當(dāng)前值
          • max:規(guī)定需要完成的值

          簡(jiǎn)單示例如下。

          <progress value="60" max="100"></progress>

          ??<meter>??

          • 常用寫法:??<meter min="" low="" high="" max="" value="" optimum=""></meter>??
          • value:規(guī)定度量的當(dāng)前值
          • max:規(guī)定被界定為高的值的范圍
          • min:規(guī)定被界定為低的值的范圍
          • low:規(guī)定被界定為低的值的范圍
          • high:規(guī)定被界定為高的值的范圍
          • optimum:規(guī)定度量的最優(yōu)值
          • 具體使用見meter標(biāo)簽改變顏色規(guī)則

          簡(jiǎn)單示例如下

          <meter min="0" low="40" high="90" max="100" value="91"></meter>
          <meter min="0" low="40" high="90" max="100" value="90"></meter>

          多媒體資源

          ??<audio>??

          • 常用寫法:??<audio src="" controls autoplay loop></audio>??
          • src:規(guī)定音頻文件的url
          • controls:如果出現(xiàn)該屬性,顯示音頻播放器的控制面板(比如播放/暫停按鈕)
          • autoplay:如果出現(xiàn)該屬性,自動(dòng)播放音頻
          • loop:如果出現(xiàn)該屬性,循環(huán)播放音頻

          簡(jiǎn)單示例如下

          <audio src="demo.mp3" controls autoplay></audio>

          ??<video>??

          • 常用寫法:??<video src="" width="" height="" poster="" controls autoplay loop></video>??
          • src:規(guī)定視頻文件的url
          • width:設(shè)置視頻播放器的寬度(pixels)
          • height:設(shè)置視頻播放器的高度(pixels)
          • poster:設(shè)置視頻未播放時(shí)展示的畫面
          • controls:如果出現(xiàn)該屬性,顯示音頻播放器的控制面板(比如播放/暫停按鈕)
          • autoplay:如果出現(xiàn)該屬性,自動(dòng)播放音頻
          • loop:如果出現(xiàn)該屬性,循環(huán)播放音頻

          簡(jiǎn)單示例如下

          <video src="demo.mp4" controls autoplay height="500px" poster="0.jpg"></video>

          ??<source>??

          • 常用寫法:??<source src="" type="">??
          • src:規(guī)定媒體文件的url
          • type:規(guī)定媒體文件的類型
          • 因?yàn)椴煌瑸g覽器支持的媒體格式不同,當(dāng)添加媒體文件時(shí),需要考慮瀏覽器是否支持它們。我們可以準(zhǔn)備多種不同格式的媒體文件,然后使用source 標(biāo)簽,讓瀏覽器從上到下選擇支持的媒體格式

          簡(jiǎn)單示例如下

          <video controls>
              <source src="demo.mp3" type="audio/mp3">
              <source src="demo.mp4" type="video/mp4">
              您的瀏覽器不支持video元素。
            </video>

          特殊字符

          ??HTML特殊字符編碼對(duì)照表??

          參考

          • ??HTML基礎(chǔ)??
          • ??HTML 參考手冊(cè)??
          • HTML中標(biāo)簽對(duì)應(yīng)的英文
          • meter標(biāo)簽改變顏色規(guī)則
          • HTML5 progress和meter控件

          一篇文章講解“模型-輸出替換”,本篇文章講解“模板-內(nèi)置標(biāo)簽之循環(huán)標(biāo)簽”。


          循環(huán)標(biāo)簽

          1. foreach標(biāo)簽

          foreach標(biāo)簽的用法和PHP語法非常接近,用于循環(huán)輸出數(shù)組或者對(duì)象的屬性,用法如下:

          1)基本使用——數(shù)據(jù)源通過模板變量賦值

          ①新建Index控制器,并新建index方法,在方法中獲取數(shù)據(jù)并賦值到模板中

          ②在index.html模板中用foreach循環(huán)輸出數(shù)據(jù)

          預(yù)覽:

          2)使用函數(shù)或者方法獲取數(shù)據(jù)源

          ①使用方法獲取數(shù)據(jù)源

          在index.html模板中使用函數(shù)或方法獲取數(shù)據(jù)源,為了區(qū)分,換一個(gè)表查詢,但注意此表要?jiǎng)?chuàng)建模型

          預(yù)覽:

          ②使用函數(shù)獲取數(shù)據(jù)源

          在公共函數(shù)文件common.php文件中,新建getData函數(shù),返回?cái)?shù)據(jù)。

          在index.html模板中使用函數(shù)獲取數(shù)據(jù)源,并循環(huán)輸出:

          預(yù)覽:


          2. volist標(biāo)簽

          volist標(biāo)簽通常用于查詢數(shù)據(jù)集或者二維數(shù)組的結(jié)果輸出。

          1)基本使用

          ①在Index控制器中,新建voshow方法,在方法中對(duì)模板進(jìn)行賦值

          ②在index.html模板中進(jìn)行volist循環(huán)展示

          預(yù)覽:

          2)函數(shù)設(shè)定數(shù)據(jù)集

          可以直接使用函數(shù)設(shè)定數(shù)據(jù)集,而不需要在控制器中給模板變量賦值傳入數(shù)據(jù)集變量,如:

          在index.html模板中使用函數(shù)設(shè)定數(shù)據(jù)集:

          訪問Index控制器的voshow方法,預(yù)覽:

          3)輸出部分?jǐn)?shù)據(jù)——屬性offset和length

          支持輸出查詢結(jié)果中的部分?jǐn)?shù)據(jù),例如輸出其中的第5~15條記錄。

          在index.html模板中使用屬性offset與length輸出部分?jǐn)?shù)據(jù)

          數(shù)據(jù)庫(kù)中數(shù)據(jù)的ID不是連續(xù)的。預(yù)覽:

          注意:

          1. offset為偏移量,從第幾條數(shù)據(jù)開始;length輸出的數(shù)據(jù)條數(shù),兩者功能類似于SQL語句中的limit。

          4)輸出偶數(shù)記錄——屬性mod

          在index.html中,輸出偶數(shù)記錄:

          預(yù)覽:

          mod屬性還用于控制一定記錄的換行,例如:

          在index.html模板中使用mod屬性控制換行。

          預(yù)覽:

          注意:

          1. mod屬性為取模,即取余數(shù),在volist中mod是行數(shù)(下標(biāo))除以mod取余數(shù),行數(shù)從0開始。

          5)數(shù)據(jù)源為空輸出提示——empty

          ①在Index控制器中新建emshow方法,為index.html模板分配空數(shù)據(jù)

          ②在index.html模板中,使用empty屬性,輸出為空提示

          預(yù)覽:

          empty屬性還支持變量輸出:

          ①在Index控制器的emshow方法中賦值給模板變量

          ②在index.html模板中輸出

          預(yù)覽:

          6)輸出循環(huán)變量——key

          在index.html模板中輸出循環(huán)變量:

          訪問voshow方法,預(yù)覽:

          注意:

          1. 如果沒有指定key屬性的話,默認(rèn)使用循環(huán)變量i。

          2. 循環(huán)變量值從1開始。

          如果要輸出數(shù)組的索引,可以直接使用key變量,和循環(huán)變量不同的是,這個(gè)key是由數(shù)據(jù)本身決定,而不是循環(huán)控制的。

          在index.html模板中,輸出數(shù)組索引key:

          預(yù)覽:


          3. for標(biāo)簽

          ①在Index控制器中,新建forshow方法:

          ②在index.html模板中循環(huán)

          解析后的代碼為:

          預(yù)覽:

          ③測(cè)試for循環(huán)的其他屬性

          預(yù)覽:

          ?ThinkPHP5連載為卓象程序員原創(chuàng),轉(zhuǎn)載請(qǐng)聯(lián)系卓象程序員

          關(guān)注卓象程序員,定期發(fā)布技術(shù)文章

          下一篇講解“模板-內(nèi)置標(biāo)簽之比較標(biāo)簽”


          主站蜘蛛池模板: 免费一本色道久久一区| 精品一区二区三区在线观看l| 国精产品一区一区三区MBA下载| 国产成人精品无码一区二区老年人| 国产成人无码AV一区二区| 精品久久综合一区二区| 日韩内射美女人妻一区二区三区| 一区二区三区电影在线观看| 亚洲日韩一区精品射精| 无码精品一区二区三区免费视频 | 精品免费AV一区二区三区| 中文字幕av日韩精品一区二区| 精品一区二区久久| 中文字幕国产一区| 国产一区二区三区露脸| 精品无人乱码一区二区三区 | 国产av夜夜欢一区二区三区| 亚洲一区二区三区无码国产| 国精品无码一区二区三区在线| 精品福利一区二区三区精品国产第一国产综合精品 | 日韩人妻无码一区二区三区久久| 亚洲AV日韩精品一区二区三区| 在线免费一区二区| 国精产品一区一区三区MBA下载| 亚洲午夜在线一区| 精品无码一区二区三区爱欲| 色噜噜狠狠一区二区三区果冻| 一本AV高清一区二区三区| 伊人激情AV一区二区三区| 国产自产在线视频一区| 亚洲午夜福利AV一区二区无码| 夜夜添无码一区二区三区| 精品国产一区二区三区免费| 亚洲日韩激情无码一区| 无码精品人妻一区二区三区漫画| 久久福利一区二区| 日韩毛片基地一区二区三区| 国产吧一区在线视频| 亚洲欧美日韩一区二区三区| 成人精品一区二区三区校园激情 | 亚洲无人区一区二区三区|