<head> 元素包含了所有的頭部標(biāo)簽元素。在 <head>元素中你可以插入腳本(scripts), 樣式文件(CSS),及各種meta信息。
可以添加在頭部區(qū)域的元素標(biāo)簽為: <title>, <style>, <meta>, <link>, <script>, <noscript> 和 <base>
<title> 標(biāo)簽定義了不同文檔的標(biāo)題。
<title> 在 HTML/XHTML 文檔中是必須的。
<title> 元素:
一個簡單的 HTML 文檔:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>文檔標(biāo)題</title>
</head>
<body>
文檔內(nèi)容......
</body>
</html>
<base> 標(biāo)簽描述了基本的鏈接地址/鏈接目標(biāo),該標(biāo)簽作為HTML文檔中所有的鏈接標(biāo)簽的默認(rèn)鏈接:
<head>
<link rel="stylesheet" type="text/css" href="mystyle.css">
</head>
<style> 標(biāo)簽定義了HTML文檔的樣式文件引用地址.
在<style> 元素中你也可以直接添加樣式來渲染 HTML 文檔:
<head>
<style type="text/css">
body {background-color:yellow}
p {color:blue}
</style>
</head>
meta標(biāo)簽描述了一些基本的元數(shù)據(jù)。
<meta> 標(biāo)簽提供了元數(shù)據(jù).元數(shù)據(jù)也不顯示在頁面上,但會被瀏覽器解析。
META 元素通常用于指定網(wǎng)頁的描述,關(guān)鍵詞,文件的最后修改時間,作者,和其他元數(shù)據(jù)。
元數(shù)據(jù)可以使用于瀏覽器(如何顯示內(nèi)容或重新加載頁面),搜索引擎(關(guān)鍵詞),或其他Web服務(wù)。
<meta> 一般放置于 <head> 區(qū)域
為搜索引擎定義關(guān)鍵詞:
<meta name="keywords" content="HTML, CSS, XML, XHTML, JavaScript">
為網(wǎng)頁定義描述內(nèi)容:
<meta name="description" content="免費(fèi) Web & 編程 教程">
定義網(wǎng)頁作者:
<meta name="author" content="tom">
每30秒鐘刷新當(dāng)前頁面:
<meta http-equiv="refresh" content="30">
<script>標(biāo)簽用于加載腳本文件或定義客戶端腳本,如: JavaScript。
<script> 元素既可包含腳本語句,也可通過 src 屬性指向外部腳本文件。
JavaScript 最常用于圖片操作、表單驗(yàn)證以及內(nèi)容動態(tài)更新。
下面的腳本會向?yàn)g覽器輸出"Hello World!":
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>菜鳥教程(runoob.com)</title>
</head>
<body>
<script>
document.write("Hello World!")
</script>
</body>
</html>
<noscript> 標(biāo)簽提供無法使用腳本時的替代內(nèi)容,比方在瀏覽器禁用腳本時,或?yàn)g覽器不支持客戶端腳本時。
<noscript>元素可包含普通 HTML 頁面的 body 元素中能夠找到的所有元素。
只有在瀏覽器不支持腳本或者禁用腳本時,才會顯示 <noscript> 元素中的內(nèi)容:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>文檔標(biāo)題</title>
</head>
<body>
<script>
document.write("Hello World!")
document.write("<h1>這是一個標(biāo)題</h1>");
document.write("<p>這是一個段落。</p>");
</script>
<noscript>抱歉,你的瀏覽器不支持 JavaScript!</noscript>
<p>不支持 JavaScript 的瀏覽器會使用 <noscript> 元素中定義的內(nèi)容(文本)來替代。</p>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>文檔標(biāo)題</title>
</head>
<body>
<h1>我的第一個 JavaScript </h1>
<p id="demo">
JavaScript 可以觸發(fā)事件,就像按鈕點(diǎn)擊。</p>
<script>
function myFunction()
{
document.getElementById("demo").innerHTML="Hello JavaScript!";
}
</script>
<button type="button" onclick="myFunction()">點(diǎn)我</button>
</body>
</html>
標(biāo)簽 | 描述 |
<script> | 定義了客戶端腳本 |
<noscript> | 定義了不支持腳本瀏覽器輸出的文本 |
HTML使用標(biāo)簽 <a>來設(shè)置超文本鏈接。
超鏈接可以是一個字,一個詞,或者一組詞,也可以是一幅圖像,您可以點(diǎn)擊這些內(nèi)容來跳轉(zhuǎn)到新的文檔或者當(dāng)前文檔中的某個部分。
當(dāng)您把鼠標(biāo)指針移動到網(wǎng)頁中的某個鏈接上時,箭頭會變?yōu)橐恢恍∈帧?/span>
在標(biāo)簽<a> 中使用了href屬性來描述鏈接的地址。
默認(rèn)情況下,鏈接將以以下形式出現(xiàn)在瀏覽器中:
注意:如果為這些超鏈接設(shè)置了 CSS 樣式,展示樣式會根據(jù) CSS 的設(shè)定而顯示。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>文檔標(biāo)題</title>
</head>
<body>
<p><a href="//www.microsoft.com/">本文本</a> 是一個指向萬維網(wǎng)上的頁面的鏈接。</p>
</body>
</html>
標(biāo)簽 | 描述 |
<head> | 定義了文檔的信息 |
<title> | 定義了文檔的標(biāo)題 |
<base> | 定義了頁面鏈接標(biāo)簽的默認(rèn)鏈接地址 |
<link> | 定義了一個文檔和外部資源之間的關(guān)系 |
<meta> | 定義了HTML文檔中的元數(shù)據(jù) |
<script> | 定義了客戶端的腳本文件 |
<style> | 定義了HTML文檔的樣式文件 |
了方面和節(jié)約時間,本次使用的python編譯器和解釋器分別為pycharm,python3.6.1RC
逢年過節(jié)
有一個神奇的網(wǎng)站
你一定不陌生
“12306”
是不是總搶不到票啊
是不是觀察著余票最新動態(tài)
告訴你一個新技能
賊666
12306自動搶票
前方高能,請系好好全帶~~
…
首先在買票前我們需要先確認(rèn)是否有票,那么進(jìn)行正常的查票,打開12306查票網(wǎng)站輸入出發(fā)地和目的地進(jìn)行搜索。
私信小編007 即可獲取數(shù)十套PDF以及大量的教學(xué)視頻!全都是從零到項(xiàng)目實(shí)戰(zhàn)的!
然后我們點(diǎn)擊查詢按鈕以后瀏覽器向服務(wù)器發(fā)起了兩次請求,那么我們來通過返回值分析下那個請求才是真正獲取到車次相關(guān)數(shù)據(jù)的請求,以便我們用Python來模擬瀏覽器操作。
第一次請求:
很明顯第一次請求返回的值沒有我們需要的車次信息。
第二次請求:
第二次請求里面看到了很多數(shù)據(jù),雖然我們暫時還沒看到車次信息,但是我們發(fā)現(xiàn)它有個特性,就是有個列表的值里面有6個元素,而剛好我們搜索出來的從西安到達(dá)州的車輛也是6條數(shù)據(jù),所以這兩者肯定有一定關(guān)系,那么我們先用Python來獲取到這些數(shù)據(jù)再進(jìn)行下一步分析。
# -*- coding: utf-8 -*-
import urllib2
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
def getList():
req = urllib2.Request('https://kyfw.12306.cn/otn/leftTicket/query?leftTicketDTO.train_date=2017-07-10&leftTicketDTO.from_station=CDW&leftTicketDTO.to_station=CSQ&purpose_codes=ADULT')
req.add_header('User-Agent','Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36')
html = urllib2.urlopen(req).read()
return html
print getList()
req.add_header(‘User-Agent’,’Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36’)
其中的
ssl._create_default_https_context =ssl._create_unverified_context
是因?yàn)?2306采用的是https協(xié)議,而ssl證書是它自己做的并沒有得到瀏覽器的認(rèn)可,所以Python默認(rèn)是不會請求不受信任的證書的網(wǎng)站的,我們可以通過這行代碼來關(guān)閉掉證書的驗(yàn)證。
那么我們先來看看能不能正常獲取到我們想要的信息。
事實(shí)證明我們的操作沒有問題,接下來先拿到包含有6條數(shù)據(jù)的這個列表再說。
返回的數(shù)據(jù)是json格式,但是Python標(biāo)準(zhǔn)數(shù)據(jù)類型中沒有json這個類型,所以對于Python而言它就是個字符串,如果要非常方便的操作這個json我們就可以借助Python中的json這個包來把json這個字符串變成dict類型,然后通過dict的鍵值對操作方法把列表取出來并進(jìn)行返回。
# -*- coding: utf-8 -*-
import urllib2
import ssl
import json
ssl._create_default_https_context = ssl._create_unverified_context
def getList():
req = urllib2.Request('https://kyfw.12306.cn/otn/leftTicket/query?leftTicketDTO.train_date=2017-07-10&leftTicketDTO.from_station=CDW&leftTicketDTO.to_station=CSQ&purpose_codes=ADULT')
req.add_header('User-Agent','Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36')
html = urllib2.urlopen(req).read()
dict = json.loads(html)
result = dict['data']['result']
return result
最終返回的是一個list數(shù)據(jù),我們先把這個數(shù)據(jù)for出來再看看每一條數(shù)據(jù)都有些什么東西。
for i in getList():
print i
for出來之后我們先來看看第一條數(shù)據(jù)是什么樣的:
|預(yù)定|76000G131805|G1318|ICW|IZQ|ICW|CWQ|07:54|18:54|11:00|N|UHESFcaIDeX22Z0zWfqttDuZXJFuWPdIa148i6TNk5spIqfp|20170710|3|W2|01|16|0|0|||||||||||無|無|無||O0M090|OM9
其實(shí)我們稍微留一下就會發(fā)現(xiàn)里面有包含G1318,07:54,18:54,無這樣的車次信息的,只不過看起來比較亂,但是他們都有一個特點(diǎn),每個數(shù)據(jù)都是由|這個符號分開的,所以我們可以通過用|分割看看能發(fā)現(xiàn)什么呢?
for i in getList():
for n in i.split('|'):
print n
break
可以看到所有的值都打印出來了,我們再在前面加上一個序號就能清楚到看到每個序號所對應(yīng)的值到底是什么了,比如有輛火車硬座還剩3張票,軟臥還剩8張票,那我們就查看哪個序號對應(yīng)的值是3哪個序號對應(yīng)的值是8就搞清楚了哪個序號是代表什么座次或者其他參數(shù)了。
c = 0
for i in getList():
for n in i.split('|'):
print '[%s] %s' %(c,n)
c += 1
c = 0
break
#索引3=車次
#索引8=出發(fā)時間
#索引9=到達(dá)時間
到了這里不知道同學(xué)們有沒有發(fā)現(xiàn)一個問題,就是我用的這個函數(shù)只能夠獲取到從長沙到成都的數(shù)據(jù),而別人不一定是買這個方向的火車,所以我們還得搞清楚請求的url當(dāng)中的出發(fā)站和到達(dá)站的值是怎么來的?
https://kyfw.12306.cn/otn/leftTicket/query?leftTicketDTO.train_date=2017-07-10&leftTicketDTO.from_station=CDW&leftTicketDTO.to_station=CSQ&purpose_codes=ADULT
先找到出發(fā)站和到達(dá)站的參數(shù)分別是:
leftTicketDTO.from_station=CDW
leftTicketDTO.to_station=CSQ
然而通過查找和分析我并沒有發(fā)現(xiàn)這兩個參數(shù)有規(guī)律,那么也就是說這兩個值是在之前的請求里面就已經(jīng)獲取到了的,通過檢查網(wǎng)頁源代碼沒有找到,那么又只能通過抓包的方式來找。
在抓包過程中找到了一個包的返回值是附帶有各城市的代號的,url如下:
https://kyfw.12306.cn/otn/resources/js/framework/station_name.js?station_version=1.9018
先找到出發(fā)站和到達(dá)站的參數(shù)分別是:
leftTicketDTO.from_station=CDW
leftTicketDTO.to_station=CSQ
然而通過查找和分析我并沒有發(fā)現(xiàn)這兩個參數(shù)有規(guī)律,那么也就是說這兩個值是在之前的請求里面就已經(jīng)獲取到了的,通過檢查網(wǎng)頁源代碼沒有找到,那么又只能通過抓包的方式來找。
在抓包過程中找到了一個包的返回值是附帶有各城市的代號的,url如下:
https://kyfw.12306.cn/otn/resources/js/framework/station_name.js?station_version=1.9018
那么我們把這里面的城市數(shù)據(jù)復(fù)制出來單獨(dú)新建一個cons.py的文件保存起來。
然后我們通過把參數(shù)做成通過輸入出發(fā)城市和到達(dá)城市就可以直接在這個數(shù)據(jù)里面匹配到相應(yīng)的城市代號,代碼如下:
station = {}
for i in cons.station_names.split('@'):
if i:
tmp = i.split('|')
station[tmp[1]] = tmp[2]
\#print station
train_date = raw_input('請輸入出發(fā)時間')
from_station = station[raw_input('請輸入出發(fā)城市')]
to_station = station[raw_input('請輸入到達(dá)城市')]
到這里就已經(jīng)能夠通過輸入“時間,城市”獲取相應(yīng)的車次信息了
那么我們再進(jìn)行一些簡單的判斷,就能實(shí)現(xiàn)檢查相應(yīng)的時間,地點(diǎn),車次是否有余票了。同時再結(jié)合登錄,購票等流程,通過自動判斷是否有票,如果無票就繼續(xù)刷新,直到有票之后自動登錄下單后通過短信或者電話等方式全自動聯(lián)系購票人手機(jī)就可以了。
未完待續(xù)!
HTML 編輯器推薦
可以使用專業(yè)的 HTML 編輯器來編輯 HTML,菜鳥教程為大家推薦幾款常用的編輯器:
Notepad++:https://notepad-plus-plus.org/
Sublime Text:http://www.sublimetext.com/
HBuilder:http://www.dcloud.io/
你可以從以上軟件的官網(wǎng)中下載對應(yīng)的軟件,按步驟安裝即可。
接下來我們將為大家演示如何使用Notepad++工具來創(chuàng)建 HTML 文件,其他兩個工具操作步驟類似。
Notepad++
Notepad++是 Windows操作系統(tǒng)下的一套文本編輯器(軟件版權(quán)許可證: GPL),有完整的中文化接口及支持多國語言編寫的功能(UTF8技術(shù))。
步驟 1: 新建 HTML 文件
在 Notepad++ 安裝完成后,選擇" 文件(F)->新建(N) ",在新建的文件中輸入以下代碼:
<!DOCTYPEhtml><html><head><metacharset="utf-8"><title>菜鳥教程(runoob.com)</title></head><body><h1>我的第一個標(biāo)題</h1><p>我的第一個段落。</p></body></html>
步驟 2: 另存為 HTML 文件
然后選擇" 文件(F)->另存為(A) ",文件名為 runoob.html:
當(dāng)您保存 HTML 文件時,既可以使用 .htm 也可以使用 .html 擴(kuò)展名。兩者沒有區(qū)別,完全根據(jù)您的喜好。
在一個容易記憶的文件夾中保存這個文件,比如 runoob
步驟 3: 在瀏覽器中運(yùn)行這個 HTML 文件
啟動您的瀏覽器,然后選擇"文件"菜單的"打開文件"命令,或者直接在文件夾中雙擊您的 HTML 文件,
運(yùn)行顯示結(jié)果類似如下:
Notepad++ 和 Sublime Text 還可以配合 Emmet 插件來提高編碼速度。
Emmet 官網(wǎng):http://emmet.io/
如您還有不明白的可以在下面與我留言或是與我探討QQ群308855039,我們一起飛!
*請認(rèn)真填寫需求信息,我們會在24小時內(nèi)與您取得聯(lián)系。