《Python網(wǎng)絡(luò)爬蟲(chóng)技術(shù)(第2版)(微課版)》課件全套 項(xiàng)目1-7 了解爬蟲(chóng)與Python爬蟲(chóng)環(huán)境-使用Scrapy爬蟲(chóng) 爬取某企業(yè)官網(wǎng)新聞動(dòng)態(tài)_第1頁(yè)
《Python網(wǎng)絡(luò)爬蟲(chóng)技術(shù)(第2版)(微課版)》課件全套 項(xiàng)目1-7 了解爬蟲(chóng)與Python爬蟲(chóng)環(huán)境-使用Scrapy爬蟲(chóng) 爬取某企業(yè)官網(wǎng)新聞動(dòng)態(tài)_第2頁(yè)
《Python網(wǎng)絡(luò)爬蟲(chóng)技術(shù)(第2版)(微課版)》課件全套 項(xiàng)目1-7 了解爬蟲(chóng)與Python爬蟲(chóng)環(huán)境-使用Scrapy爬蟲(chóng) 爬取某企業(yè)官網(wǎng)新聞動(dòng)態(tài)_第3頁(yè)
《Python網(wǎng)絡(luò)爬蟲(chóng)技術(shù)(第2版)(微課版)》課件全套 項(xiàng)目1-7 了解爬蟲(chóng)與Python爬蟲(chóng)環(huán)境-使用Scrapy爬蟲(chóng) 爬取某企業(yè)官網(wǎng)新聞動(dòng)態(tài)_第4頁(yè)
《Python網(wǎng)絡(luò)爬蟲(chóng)技術(shù)(第2版)(微課版)》課件全套 項(xiàng)目1-7 了解爬蟲(chóng)與Python爬蟲(chóng)環(huán)境-使用Scrapy爬蟲(chóng) 爬取某企業(yè)官網(wǎng)新聞動(dòng)態(tài)_第5頁(yè)
已閱讀5頁(yè),還剩429頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

了解爬蟲(chóng)與Python

爬蟲(chóng)環(huán)境1認(rèn)識(shí)反爬蟲(chóng)目錄認(rèn)識(shí)爬蟲(chóng)2配置Python爬蟲(chóng)環(huán)境3網(wǎng)絡(luò)爬蟲(chóng)(WebSpider,簡(jiǎn)稱爬蟲(chóng))也被稱為網(wǎng)絡(luò)蜘蛛、網(wǎng)絡(luò)機(jī)器人,是可以自動(dòng)下載網(wǎng)頁(yè)的計(jì)算機(jī)程序或自動(dòng)化腳本。網(wǎng)絡(luò)爬蟲(chóng)就像一只蜘蛛一樣在互聯(lián)網(wǎng)上爬行,它以一個(gè)被稱為種子集的統(tǒng)一資源定位符(UniformResourceLocator,URL)集合為起點(diǎn)。沿著URL的“絲線”爬行,下載每一個(gè)URL所指向的網(wǎng)頁(yè),分析頁(yè)面內(nèi)容。再提取新的URL并記錄下每個(gè)已爬行過(guò)的URL。如此往復(fù),直到URL隊(duì)列為空或滿足設(shè)定的終止條件為止,最終爬取所要的信息。認(rèn)識(shí)爬蟲(chóng)1.爬蟲(chóng)的概念網(wǎng)絡(luò)爬蟲(chóng)按照其系統(tǒng)結(jié)構(gòu)和運(yùn)作原理,大致可以分為4種:通用網(wǎng)絡(luò)爬蟲(chóng)、聚焦網(wǎng)絡(luò)爬蟲(chóng)、增量式網(wǎng)絡(luò)爬蟲(chóng)和深層網(wǎng)絡(luò)爬蟲(chóng)。通用網(wǎng)絡(luò)爬蟲(chóng):適合為搜索引擎搜索廣泛的主題。聚焦網(wǎng)絡(luò)爬蟲(chóng):節(jié)省硬件資源和網(wǎng)絡(luò)資源,能更快地更新保存的頁(yè)面。增量式網(wǎng)絡(luò)爬蟲(chóng):減少數(shù)據(jù)下載量,并及時(shí)更新已爬取過(guò)的網(wǎng)頁(yè),減少時(shí)間和存儲(chǔ)空間上的浪費(fèi)。深層網(wǎng)絡(luò)爬蟲(chóng):深層頁(yè)面是目前互聯(lián)網(wǎng)上發(fā)展最快、最大的新型信息資源。認(rèn)識(shí)爬蟲(chóng)2.爬蟲(chóng)的分類通用網(wǎng)絡(luò)爬蟲(chóng)常用的爬取策略可分為以下兩種。深度優(yōu)先策略:該策略的基本方法是按照深度由低到高的順序,依次訪問(wèn)網(wǎng)頁(yè)鏈接,直到無(wú)法再深入為止。在完成一個(gè)爬取分支后,返回上一節(jié)點(diǎn)搜索其他鏈接進(jìn)行訪問(wèn),當(dāng)遍歷完全部鏈接后,爬取過(guò)程結(jié)束。深度優(yōu)先策略比較適合垂直搜索或站內(nèi)搜索,其缺點(diǎn)是當(dāng)爬取層次較深的站點(diǎn)時(shí)會(huì)造成巨大的資源浪費(fèi)。廣度優(yōu)先策略:該策略按照網(wǎng)頁(yè)內(nèi)容目錄層次的深淺進(jìn)行爬取,優(yōu)先爬取較淺層次的頁(yè)面。當(dāng)同一層中的頁(yè)面全部爬取完畢后,再深入下一層。相較于深度優(yōu)先策略,廣度優(yōu)先策略能更有效地控制頁(yè)面爬取的深度,避免當(dāng)遇到一個(gè)無(wú)窮深層次的分支時(shí)無(wú)法結(jié)束爬取的問(wèn)題。廣度優(yōu)先策略不需要存儲(chǔ)大量的中間節(jié)點(diǎn),但其缺點(diǎn)是需要較長(zhǎng)時(shí)間才能爬取到目錄層次較深的頁(yè)面。認(rèn)識(shí)爬蟲(chóng)通用網(wǎng)絡(luò)爬蟲(chóng)聚焦網(wǎng)絡(luò)爬蟲(chóng)的爬取策略可分為以下4種?;趦?nèi)容評(píng)價(jià)的爬取策略:該策略將用戶輸入的查詢?cè)~作為主題,包含查詢?cè)~的頁(yè)面被視為與主題相關(guān)的頁(yè)面?;阪溄咏Y(jié)構(gòu)評(píng)價(jià)的爬取策略:該策略將包含很多結(jié)構(gòu)信息的半結(jié)構(gòu)化文檔(如Web頁(yè)面)用于評(píng)價(jià)鏈接的重要性。基于增強(qiáng)學(xué)習(xí)的爬取策略:該策略將增強(qiáng)學(xué)習(xí)引入聚焦網(wǎng)絡(luò)爬蟲(chóng),利用貝葉斯分類器基于整個(gè)網(wǎng)頁(yè)文本和鏈接文本來(lái)對(duì)超鏈接進(jìn)行分類,計(jì)算每個(gè)鏈接的重要性,按照重要性決定鏈接的訪問(wèn)順序?;谡Z(yǔ)境圖的爬取策略:該策略通過(guò)建立語(yǔ)境圖來(lái)學(xué)習(xí)網(wǎng)頁(yè)之間的相關(guān)度,具體方法為:計(jì)算當(dāng)前頁(yè)面到相關(guān)頁(yè)面的距離,距離越近的頁(yè)面中的鏈接越被優(yōu)先訪問(wèn)。認(rèn)識(shí)爬蟲(chóng)聚焦類爬蟲(chóng)增量式網(wǎng)絡(luò)爬蟲(chóng)的爬取策略常用的方法有以下3種。統(tǒng)一更新法:爬蟲(chóng)以相同的頻率訪問(wèn)所有網(wǎng)頁(yè),不受網(wǎng)頁(yè)本身的改變頻率的影響。個(gè)體更新法:爬蟲(chóng)根據(jù)單個(gè)網(wǎng)頁(yè)的改變頻率來(lái)決定重新訪問(wèn)各頁(yè)面的頻率?;诜诸惖母路ǎ号老x(chóng)按照網(wǎng)頁(yè)變化頻率將網(wǎng)頁(yè)分為更新較快的網(wǎng)頁(yè)和更新較慢的網(wǎng)頁(yè),并分別設(shè)定不同的頻率來(lái)訪問(wèn)這兩類網(wǎng)頁(yè)。認(rèn)識(shí)爬蟲(chóng)增量式網(wǎng)絡(luò)爬蟲(chóng)在深層網(wǎng)絡(luò)爬蟲(chóng)爬取數(shù)據(jù)的過(guò)程中,最重要的部分就是表單填寫(xiě)。表單填寫(xiě)主要包含以下兩種方法?;陬I(lǐng)域知識(shí)的表單填寫(xiě):該方法一般會(huì)維持一個(gè)本體庫(kù),并通過(guò)語(yǔ)義分析來(lái)選取合適的關(guān)鍵詞填寫(xiě)表單。通過(guò)將表單按語(yǔ)義分配至各組中,從多方面對(duì)每組進(jìn)行注解,并結(jié)合各組注解結(jié)果預(yù)測(cè)最終的注解標(biāo)簽?;诰W(wǎng)頁(yè)結(jié)構(gòu)分析的表單填寫(xiě):該方法一般無(wú)領(lǐng)域知識(shí)或僅有有限的領(lǐng)域知識(shí),其將超文本標(biāo)記語(yǔ)言(HypertextMarkupLanguage,HTML)網(wǎng)頁(yè)表示為文檔對(duì)象模型(DocumentObjectModel,DOM)樹(shù)形式,將表單區(qū)分為單屬性表單和多屬性表單,并分別進(jìn)行處理,從DOM樹(shù)中提取表單各字段值。認(rèn)識(shí)爬蟲(chóng)深層網(wǎng)絡(luò)爬蟲(chóng)爬蟲(chóng)的合法性多數(shù)網(wǎng)站允許將爬蟲(chóng)爬取的數(shù)據(jù)用于個(gè)人使用或科學(xué)研究。但如果將爬取的數(shù)據(jù)用于其他用途,尤其是轉(zhuǎn)載或商業(yè)用途,則依據(jù)各網(wǎng)站的具體情況可能會(huì)產(chǎn)生不同的后果,嚴(yán)重的可能會(huì)觸犯法律或引起民事糾紛。個(gè)人隱私數(shù)據(jù)、明確禁止他人訪問(wèn)的數(shù)據(jù)是不能爬蟲(chóng),更不能用于商業(yè)用途。robots協(xié)議當(dāng)使用爬蟲(chóng)爬取網(wǎng)站的數(shù)據(jù)時(shí),需要遵守網(wǎng)站所有者針對(duì)所有爬蟲(chóng)所制定的協(xié)議——robots協(xié)議。該協(xié)議通常存放在網(wǎng)站根目錄下,里面規(guī)定了此網(wǎng)站中哪些內(nèi)容可以被爬蟲(chóng)獲取、哪些內(nèi)容是不允許爬蟲(chóng)獲取的。認(rèn)識(shí)爬蟲(chóng)3.爬蟲(chóng)運(yùn)作時(shí)應(yīng)遵守的規(guī)則相關(guān)法律法規(guī)不正當(dāng)競(jìng)爭(zhēng)行為。非法獲取計(jì)算機(jī)信息系統(tǒng)數(shù)據(jù)罪、非法侵入計(jì)算機(jī)信息系統(tǒng)罪、破壞計(jì)算機(jī)信息系統(tǒng)罪等刑事犯罪。侵犯公民個(gè)人信息罪、侵犯著作權(quán)罪、侵犯商業(yè)秘密罪。認(rèn)識(shí)爬蟲(chóng)3.爬蟲(chóng)運(yùn)作時(shí)應(yīng)遵守的規(guī)則1認(rèn)識(shí)反爬蟲(chóng)目錄認(rèn)識(shí)爬蟲(chóng)2配置Python爬蟲(chóng)環(huán)境31.網(wǎng)站反爬蟲(chóng)概念網(wǎng)站所有者從所有網(wǎng)站來(lái)訪者中識(shí)別出爬蟲(chóng)并對(duì)其做出相應(yīng)處理(通常為封禁IP地址)的過(guò)程,被稱為反爬蟲(chóng)。對(duì)于網(wǎng)站所有者而言,爬蟲(chóng)并不是一個(gè)受歡迎的“客人”。爬蟲(chóng)會(huì)消耗大量的服務(wù)器資源,影響服務(wù)器的穩(wěn)定性,增加運(yùn)營(yíng)的網(wǎng)絡(luò)成本??晒┟赓M(fèi)查詢的資源也有極大可能被競(jìng)爭(zhēng)對(duì)手使用爬蟲(chóng)爬走,造成自身競(jìng)爭(zhēng)力下降。以上種種因素會(huì)讓網(wǎng)站所有者想方設(shè)法阻止爬蟲(chóng)爬取自家網(wǎng)站的數(shù)據(jù)。爬蟲(chóng)行為與普通用戶訪問(wèn)網(wǎng)站行為極為類似,網(wǎng)站所有者在進(jìn)行反爬蟲(chóng)時(shí)會(huì)盡可能地減少對(duì)普通用戶的干擾。網(wǎng)站常用反爬蟲(chóng)手段通常分為以下幾種。認(rèn)識(shí)反爬蟲(chóng)2.反爬蟲(chóng)手段:通過(guò)User-Agent校驗(yàn)反爬蟲(chóng):User-Agent標(biāo)示一個(gè)瀏覽器的型號(hào),服務(wù)器會(huì)通過(guò)User-Agent的值來(lái)區(qū)分不同的瀏覽器。通過(guò)訪問(wèn)頻度反爬蟲(chóng):由于普通用戶通過(guò)瀏覽器訪問(wèn)網(wǎng)站的速度相對(duì)爬蟲(chóng)而言要慢得多,所以不少網(wǎng)站會(huì)利用這一特點(diǎn)對(duì)訪問(wèn)頻度設(shè)定一個(gè)閾值。通過(guò)驗(yàn)證碼校驗(yàn)反爬蟲(chóng):與通過(guò)訪問(wèn)頻度反爬蟲(chóng)不同,部分網(wǎng)站不論訪問(wèn)頻度如何,一定要來(lái)訪者輸入驗(yàn)證碼才能繼續(xù)操作。通過(guò)變換網(wǎng)頁(yè)結(jié)構(gòu)反爬蟲(chóng):一些社交網(wǎng)站常常會(huì)更換網(wǎng)頁(yè)結(jié)構(gòu),而爬蟲(chóng)在大部分情況下,需要通過(guò)網(wǎng)頁(yè)結(jié)構(gòu)來(lái)解析需要的數(shù)據(jù),變換網(wǎng)頁(yè)結(jié)構(gòu)的做法能起到反爬蟲(chóng)的作用。通過(guò)賬號(hào)權(quán)限反爬蟲(chóng):部分網(wǎng)站需要登錄才能繼續(xù)操作。認(rèn)識(shí)反爬蟲(chóng)針對(duì)介紹的常用反爬蟲(chóng)手段,可以制定以下相對(duì)應(yīng)的爬取策略發(fā)送模擬User-Agent:爬蟲(chóng)可通過(guò)發(fā)送模擬User-Agent來(lái)進(jìn)行服務(wù)器的User-Agent檢驗(yàn)。模擬User-Agent是將要發(fā)送至網(wǎng)站服務(wù)器的請(qǐng)求的User-Agent值偽裝成一般用戶登錄網(wǎng)站時(shí)使用的User-Agent值,通過(guò)這種方法能很好地規(guī)避服務(wù)器檢驗(yàn)。調(diào)整訪問(wèn)頻度:通過(guò)備用IP地址測(cè)試網(wǎng)站的訪問(wèn)頻度閾值,然后設(shè)置比閾值略低的訪問(wèn)頻度通過(guò)驗(yàn)證碼校驗(yàn):通過(guò)算法識(shí)別驗(yàn)證碼或使用Cookie繞過(guò)驗(yàn)證碼才能進(jìn)行后續(xù)操作。認(rèn)識(shí)反爬蟲(chóng)3.爬取策略制定針對(duì)介紹的常用反爬蟲(chóng)手段,可以制定以下相對(duì)應(yīng)的爬取策略應(yīng)對(duì)網(wǎng)站結(jié)構(gòu)變化第一種方法:如果網(wǎng)站只爬取一次,那么要盡量趕在其網(wǎng)站結(jié)構(gòu)調(diào)整之前,將需要的數(shù)據(jù)全部爬取下來(lái)。第二種方法:如果網(wǎng)站需要持續(xù)性爬取,那么可以使用腳本對(duì)網(wǎng)站結(jié)構(gòu)進(jìn)行監(jiān)測(cè),若結(jié)構(gòu)發(fā)生變化,則發(fā)出告警并及時(shí)停止爬蟲(chóng),避免爬取過(guò)多無(wú)效數(shù)據(jù)。通過(guò)賬號(hào)權(quán)限限制:對(duì)于需要登錄的網(wǎng)站,可通過(guò)模擬登錄的方法進(jìn)行規(guī)避。當(dāng)模擬登錄時(shí),除了需要提交賬號(hào)和密碼之外,往往也需要通過(guò)驗(yàn)證碼校驗(yàn)。認(rèn)識(shí)反爬蟲(chóng)3.爬取策略制定1認(rèn)識(shí)反爬蟲(chóng)目錄認(rèn)識(shí)爬蟲(chóng)2配置Python爬蟲(chóng)環(huán)境3了解常用的PythonIDEIDE是一種輔助程序開(kāi)發(fā)人員進(jìn)行開(kāi)發(fā)工作的應(yīng)用軟件,在開(kāi)發(fā)工具內(nèi)部即可輔助編寫(xiě)代碼,并編譯打包,使其成為可用的程序,有些IDE甚至可以用于設(shè)計(jì)圖形接口。IDE是集成了代碼編寫(xiě)功能、分析功能、編譯功能、調(diào)試功能等于一體的開(kāi)發(fā)軟件服務(wù)套(組),通常包括編程語(yǔ)言編輯器、自動(dòng)構(gòu)建工具和調(diào)試器。在Python的應(yīng)用過(guò)程中少不了IDE工具,這些工具可以幫助開(kāi)發(fā)者加快開(kāi)發(fā)速度,提高效率。在Python中,常見(jiàn)的IDE有IDLE、PyCharm、JupyterNotebook、VSCode等,基本介紹如下。IDLE:

IDLE完全由Python編寫(xiě),并使用TkinterUI工具集。盡管IDLE不適用于大型項(xiàng)目開(kāi)發(fā),但它對(duì)小型的Python代碼和Python不同特性的實(shí)驗(yàn)非常有幫助。配置Python爬蟲(chóng)環(huán)境

1.配置PyCharmPyCharm:

PyCharm由JetBrains公司開(kāi)發(fā),帶有一整套可以幫助用戶在使用Python語(yǔ)言開(kāi)發(fā)時(shí)提高其效率的工具,如調(diào)試、語(yǔ)法高亮、單元測(cè)試、版本控制等。此外,PyCharm提供了一些高級(jí)功能,以用于支持Django框架下的專業(yè)Web開(kāi)發(fā)。PyCharm中的大多數(shù)特性都能通過(guò)免費(fèi)的Python插件帶入IntelliJ中。JupyterNotebook:JupyterNotebook采用網(wǎng)頁(yè)版的Python編寫(xiě)交互模式,其使用過(guò)程類似于使用紙和筆,可輕松擦除先前編寫(xiě)的代碼,并且可以將編寫(xiě)的代碼進(jìn)行保存記錄,可用于做筆記以及編寫(xiě)簡(jiǎn)單代碼,相當(dāng)方便。VSCode:VSCode(VisualStudioCode)是Microsoft(微軟)在2015年4月30日正式發(fā)布的針對(duì)編寫(xiě)現(xiàn)代Web應(yīng)用和云應(yīng)用的跨平臺(tái)源代碼編輯器,可在多種平臺(tái)運(yùn)行,它內(nèi)置對(duì)JavaScript、TypeScript和Node.js支持的功能,并支持豐富的語(yǔ)言(如C++、C#、Java、Python、PHP、Go等)和運(yùn)行時(shí)擴(kuò)展的生態(tài)系統(tǒng)。配置Python爬蟲(chóng)環(huán)境PyCharm可以跨平臺(tái)使用,分為社區(qū)版和專業(yè)版。其中,社區(qū)版是免費(fèi)的,專業(yè)版是付費(fèi)的。在使用PyCharm之前,需安裝該應(yīng)用軟件。在64位的Windows操作系統(tǒng)上,安裝該版本PyCharm的具體安裝步驟如下。打開(kāi)PyCharm官網(wǎng),如下圖所示,單擊“DOWNLOAD”下載按鈕。配置Python爬蟲(chóng)環(huán)境安裝PyCharm選擇Windows系統(tǒng)的“Community”(社區(qū)版),單擊“Download”按鈕即可下載安裝包,如下圖所示。配置Python爬蟲(chóng)環(huán)境配置Python爬蟲(chóng)環(huán)境下載完成后,雙擊安裝包,打開(kāi)安裝向?qū)?,如下圖所示,單擊“Next”按鈕進(jìn)行下一步操作。配置Python爬蟲(chóng)環(huán)境在進(jìn)入的界面中自定義軟件安裝路徑,建議安裝路徑不包含中文字符,如下圖所示,單擊“Next”按鈕。配置Python爬蟲(chóng)環(huán)境設(shè)置完成軟件安裝路徑后,在進(jìn)入的界面中勾選全部的安裝選項(xiàng),如下圖所示,單擊“Next”按鈕進(jìn)行下一步操作。配置Python爬蟲(chóng)環(huán)境在進(jìn)入的界面中單擊“Install”按鈕,默認(rèn)安裝PyCharm。等待安裝完成后單擊“Finish”按鈕完成安裝,如下圖所示。配置Python爬蟲(chóng)環(huán)境雙擊桌面上生成的快捷方式圖標(biāo),在彈出的“ImportPyCharmSettings”對(duì)話框中選擇“Donotimportsettings”選項(xiàng),如下圖所示,然后單擊“OK”按鈕。配置Python爬蟲(chóng)環(huán)境在彈出的“DataSharing”對(duì)話框中單擊“Don’tSend”按鈕,如下圖所示。配置Python爬蟲(chóng)環(huán)境重啟PyCharm后,將會(huì)彈出下圖所示的窗口,選擇“NewProject”選項(xiàng)創(chuàng)建新項(xiàng)目。配置Python爬蟲(chóng)環(huán)境打開(kāi)“NewProject”窗口,自定義項(xiàng)目存儲(chǔ)路徑,IDE默認(rèn)關(guān)聯(lián)Python解釋器,單擊“Create”按鈕,如右圖所示。配置Python爬蟲(chóng)環(huán)境在彈出的提示框中單擊“Close”按鈕,設(shè)置在啟動(dòng)時(shí)不顯示提示,如下左圖所示。這樣就進(jìn)入了PyCharm界面,如下右圖所示,單擊左下角的圖標(biāo)可顯示或隱藏功能側(cè)邊欄。配置Python爬蟲(chóng)環(huán)境更換PyCharm的主題。單擊“File”,選擇“Settings”命令,如圖113所示。進(jìn)入“Settings”界面后,依次選擇“Appearance&Behavior”→“Appearance”命令,在“Theme”中選擇自己喜歡的主題,這里選“Windows10Light”,如下圖所示。在安裝完P(guān)yCharm后,可通過(guò)創(chuàng)建一個(gè).py文件,進(jìn)行代碼的測(cè)試,基本步驟如下。新建好項(xiàng)目(此處項(xiàng)目名為python)后,還要新建一個(gè).py文件。右擊項(xiàng)目名“python”,選“New”→“PythonFile”命令,如下圖所示。配置Python爬蟲(chóng)環(huán)境使用PyCharm配置Python爬蟲(chóng)環(huán)境在彈出的對(duì)話框中輸入文件名“study”即可新建study.py文件,如下圖所示。按“Enter”鍵即可打開(kāi)此腳本文件。配置Python爬蟲(chóng)環(huán)境PyCharm是可用于編寫(xiě)代碼的IDE工具。為了方便讀者編寫(xiě)或修改代碼,本書(shū)的代碼均使用PyCharm進(jìn)行編寫(xiě)和測(cè)試。PyCharm的界面如圖117所示。配置Python爬蟲(chóng)環(huán)境由下圖所示的標(biāo)注可知,PyCharm界面可分為菜單欄、項(xiàng)目結(jié)構(gòu)區(qū)、代碼區(qū)、信息顯示區(qū)和工具欄。各個(gè)區(qū)域的功能介紹如下。(1)菜單欄:包含影響整個(gè)項(xiàng)目或部分項(xiàng)目的命令,如打開(kāi)項(xiàng)目、創(chuàng)建項(xiàng)目、重構(gòu)代碼、運(yùn)行和調(diào)試應(yīng)用程序、保存文件等。(2)項(xiàng)目結(jié)構(gòu)區(qū):已經(jīng)創(chuàng)建完成的項(xiàng)目或文件展示區(qū)域。(3)代碼區(qū):編寫(xiě)代碼的區(qū)域。(4)信息顯示區(qū):查看程序輸出信息的區(qū)域。(5)工具欄:包含快捷菜單,涉及終端、Python交互式模式等。配置Python爬蟲(chóng)環(huán)境除了可以在PyCharm中的代碼區(qū)編輯代碼之外,還可以通過(guò)工具欄中的PythonConsole(即Python交互式模式)直接輸入代碼,然后執(zhí)行,并且立刻得到結(jié)果。交互式模式主要有兩種形式,一種是通過(guò)In輸入,Out輸出;另一種是通過(guò)“>>>”的形式輸入,直接顯示輸出結(jié)果。交互式模式默認(rèn)為In、Out的形式,本書(shū)主要以“>>>”形式編寫(xiě)代碼,如上頁(yè)圖所示。讀者可以通過(guò)單擊“File”→“Settings”→“Build,Execution,Deployment”→“Console”,在“GeneralSettings”復(fù)選框中取消勾選“UseIPythonifavailable”,將默認(rèn)形式修改為“>>>”形式。類型庫(kù)名簡(jiǎn)介通用urlliburllib是Python內(nèi)置的HTTP請(qǐng)求庫(kù),提供一系列用于操作URL的功能Requests基于urllib,采用Apache2Licensed開(kāi)源協(xié)議的HTTP庫(kù)urllib3urllib3提供很多Python標(biāo)準(zhǔn)庫(kù)里所沒(méi)有的重要特性:線程安全,管理連接池,客戶端SSL/TLS(SecureSocketLayer/TransportLayerSecurity,安全套接字層/傳輸層安全協(xié)議)驗(yàn)證,文件分部編碼上傳,協(xié)助處理重復(fù)請(qǐng)求和HTTP重定位,支持壓縮編碼,支持HTTP和SOCKS代理,100%測(cè)試覆蓋率框架ScrapyScrapy是一個(gè)為爬取網(wǎng)站數(shù)據(jù)、提取結(jié)構(gòu)化數(shù)據(jù)而編寫(xiě)的應(yīng)用框架。可應(yīng)用在包括數(shù)據(jù)挖掘、信息處理或歷史數(shù)據(jù)存儲(chǔ)等一系列功能的程序中HTML/XML解析器lxmlC語(yǔ)言編寫(xiě)的高效HTML/XML處理庫(kù),支持XPathBeautifulSoup4純Python實(shí)現(xiàn)的HTML/XML處理庫(kù),效率相對(duì)較低配置Python爬蟲(chóng)環(huán)境2.常用的Python爬蟲(chóng)相關(guān)庫(kù)配置Python爬蟲(chóng)環(huán)境除Python自帶的urllib庫(kù)外,Requests、urllib3、Scrapy、lxml和BeautifulSoup4等庫(kù)都可以通過(guò)pip工具進(jìn)行安裝。pip工具可直接在命令提示符窗口中運(yùn)行,但需將Python安裝路徑下的scripts目錄加入環(huán)境變量Path中。另外,pip工具支持指定版本庫(kù)的安裝,通過(guò)使用==、>=、<=、>、<符號(hào)來(lái)指定版本號(hào)。同時(shí),如果有requirements.txt文件,也可使用pip工具來(lái)調(diào)用。使用pip工具安裝Requests庫(kù)的程序如代碼所示。MySQL是目前廣泛應(yīng)用的關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)之一,由瑞典的MySQLAB公司開(kāi)發(fā),現(xiàn)屬于Oracle公司。關(guān)系數(shù)據(jù)庫(kù)將數(shù)據(jù)保存在不同的表中,使得數(shù)據(jù)的存儲(chǔ)、查詢和管理更加靈活和高效。由于MySQL數(shù)據(jù)庫(kù)具備體積小、速度快、成本低、開(kāi)放源代碼等特點(diǎn),所以多數(shù)中小型網(wǎng)站都選MySQL數(shù)據(jù)庫(kù)用于網(wǎng)站數(shù)據(jù)支持。爬蟲(chóng)爬取的網(wǎng)頁(yè)信息(如URL、文字信息等)經(jīng)過(guò)整理后存儲(chǔ)在數(shù)據(jù)庫(kù)中,格式化后存儲(chǔ)在關(guān)系數(shù)據(jù)庫(kù)中的數(shù)據(jù)可供后續(xù)解析程序或者其他程序復(fù)用。在Windows操作系統(tǒng)上配置MySQL本小節(jié)使用的MySQL為社區(qū)版,安裝包為mysql-installer-community-8.0.13.msi,是一個(gè)免費(fèi)版本,讀者可依據(jù)需求選擇其他的版本。在64位的Windows操作系統(tǒng)上,安裝該版本MySQL的具體步驟如下。配置Python爬蟲(chóng)環(huán)境

3.配置MySQL雙擊打開(kāi)msi安裝包,打開(kāi)接受許可條款界面,如下圖所示,勾選“Iacceptthelicenseterms”選項(xiàng)后單擊“Next”按鈕后進(jìn)入選擇安裝類型(ChoosingaSetupType)界面。配置Python爬蟲(chóng)環(huán)境選擇“Custom”選項(xiàng),單擊“Next”按鈕,如下圖所示。配置Python爬蟲(chóng)環(huán)境在選擇產(chǎn)品和功能界面中單擊“Edit”按鈕,在彈出框中選擇“64-bit”選項(xiàng),之后單擊“Filter”按鈕,如下圖所示。配置Python爬蟲(chóng)環(huán)境在下圖所示的左側(cè)欄內(nèi)選擇需要安裝的程序,單擊中間的向右箭頭將程序移至安裝欄內(nèi)。配置Python爬蟲(chóng)環(huán)境單擊下圖所示的“Next”按鈕,檢測(cè)系統(tǒng)上是否安裝有相關(guān)依賴的軟件,若沒(méi)有安裝,則會(huì)出現(xiàn)類似下圖所示的界面。配置Python爬蟲(chóng)環(huán)境單擊下圖所示的“Next”按鈕后,進(jìn)入安裝確認(rèn)步驟,被安裝的程序會(huì)顯示在框內(nèi),單擊“Execute”按鈕開(kāi)始安裝,如下圖所示。配置Python爬蟲(chóng)環(huán)境安裝完成后,還需配置服務(wù)。進(jìn)入組復(fù)制(GroupReplication)界面,選擇“StandaloneMySQLServer/ClassicMySQLReplication”選項(xiàng),如下圖所示,之后單擊“Next”按鈕。配置Python爬蟲(chóng)環(huán)境對(duì)于一般用戶來(lái)說(shuō),在類型與網(wǎng)絡(luò)(TypeandNetworking)界面的“ConfigType”中選擇“DevelopmentComputer”即可,MySQL的默認(rèn)端口為3306,如下圖所示,之后單擊“Next”按鈕。配置Python爬蟲(chóng)環(huán)境在驗(yàn)證方法(AuthenticationMethod)界面選擇“UseStrongPasswordEncryptionforAuthentication(RECOMMENDED)”選項(xiàng),如下圖所示,之后單擊“Next”按鈕。配置Python爬蟲(chóng)環(huán)境單擊“AddUser”按鈕可添加一個(gè)具有普通用戶權(quán)限的MySQL用戶賬戶,也可不添加,如下圖所示,之后單擊“Next”按鈕。配置Python爬蟲(chóng)環(huán)境在Windows服務(wù)界面中勾選“ConfigureMySQLServerasaWindowsService”選項(xiàng)后,將以系統(tǒng)用戶的身份運(yùn)行Windows服務(wù)。在Windows下,MySQL的默認(rèn)服務(wù)名為MySQL80,如下圖所示。配置Python爬蟲(chóng)環(huán)境進(jìn)入應(yīng)用服務(wù)配置界面,單擊“Execute”按鈕開(kāi)始執(zhí)行,如下圖所示。配置Python爬蟲(chóng)環(huán)境執(zhí)行成功的應(yīng)用服務(wù)配置將變?yōu)榫G色的勾選狀態(tài),單擊下左所示的“Finish”按鈕完成配置過(guò)程,則會(huì)彈出下右所示的界面,之后單擊“Next”按鈕。配置Python爬蟲(chóng)環(huán)境進(jìn)入安裝完成(InstallationComplete)界面,取消勾選“StartMySQLWorkbenchafterSetup”和“StartMySQLShellafterSetup”,單擊“Finish”按鈕完成安裝,如下圖所示。配置Python爬蟲(chóng)環(huán)境執(zhí)行成功的應(yīng)用服務(wù)配置將變?yōu)榫G色的勾選狀態(tài),單擊下左所示的“Finish”按鈕完成配置過(guò)程,則會(huì)彈出下右所示的界面,之后單擊“Next”按鈕。配置Python爬蟲(chóng)環(huán)境MySQL安裝完成后還需要配置MySQL的環(huán)境變量,步驟如下。打開(kāi)“環(huán)境變量”對(duì)話框。右擊“此電腦”圖標(biāo),單擊彈出的菜單中的“屬性”選項(xiàng),之后在彈出的“設(shè)置”對(duì)話框中,單擊下左所示的“高級(jí)系統(tǒng)設(shè)置”選項(xiàng)。在彈出的下中所示的“系統(tǒng)屬性”對(duì)話框中,單擊“環(huán)境變量”按鈕,即可彈出“環(huán)境變量”對(duì)話框,如下右所示。配置Python爬蟲(chóng)環(huán)境設(shè)置MySQL的環(huán)境變量。設(shè)置環(huán)境變量有以下兩種方法

方法一:?jiǎn)螕簟碍h(huán)境變量”對(duì)話框中“系統(tǒng)變量”的“新建”按鈕,彈出“新建系統(tǒng)變量”對(duì)話框中,在“變量名”后填寫(xiě)“MYSQL_HOME”,在“變量值”后填寫(xiě)“C:\ProgramFiles\MySQL\MySQLServer8.0”,MySQL默認(rèn)安裝在C:\ProgramFiles路徑下,如下左圖所示。

在“環(huán)境變量”對(duì)話框中的用戶變量列表中選擇“Path”變量,單擊“編輯”按鈕,在彈出的“編輯環(huán)境變量”對(duì)話框中,單擊“新建”按鈕添加“%MYSQL_HOME%\bin”即可,如下右所示。配置Python爬蟲(chóng)環(huán)境方法二:在“環(huán)境變量”對(duì)話框中單擊“新建”按鈕添加“C:\ProgramFiles\MySQL\MySQLServer8.0\bin”,即直接添加MySQL安裝目錄下的bin配置到Path變量下,如下圖所示。配置Python爬蟲(chóng)環(huán)境配置環(huán)境變量后,可使用管理員權(quán)限運(yùn)行命令提示符窗口,使用“netstartmysql80”命令啟動(dòng)MySQL服務(wù)。其中,“mysql80”需要與安裝的MySQL版本一致。使用“netstopmysql80”命令可關(guān)閉MySQL服務(wù),如下圖所示。配置Python爬蟲(chóng)環(huán)境在Linux操作系統(tǒng)上配置MySQL本小節(jié)使用的Linux版本為CentOS7,使用“yum”命令安裝MySQL(mysql-community-8.0.30)的具體步驟如下。切換至root用戶,使用“rpm-qa|grepmysql”命令查看是否已經(jīng)安裝MySQL數(shù)據(jù)庫(kù),如果沒(méi)有安裝,則沒(méi)有顯示結(jié)果。

如果原本安裝了MySQL,則可使用“rpm-emysql”命令進(jìn)行卸載,在沒(méi)有安裝MySQL時(shí)使用該命令,將顯

示如下圖所示的錯(cuò)誤信息。配置Python爬蟲(chóng)環(huán)境由于CentOS7上將MySQL從默認(rèn)軟件列表中移除,用MariaDB來(lái)代替,所以必須要去官網(wǎng)上下載MySQL,在官網(wǎng)上找到下載鏈接,用“wget/get/mysql80-community-release-el7-4.noarch.rpm”命令打開(kāi)下載鏈接,如下圖所示。配置Python爬蟲(chóng)環(huán)境下載完成后,使用“rpm-ivhmysql80-community-release-el7-4.noarch.rpm”命令進(jìn)行加載,之后運(yùn)行“yum-yinstallmysqlmysql-servermysql-devel--nogpgcheck”命令進(jìn)行安裝,如下圖所示配置Python爬蟲(chóng)環(huán)境安裝完成后,運(yùn)行“yum-yinstallmysqlmysql-servermysql-devel”命令和“rpm-qa|grepmysql”命令進(jìn)行確認(rèn),如下圖所示。配置Python爬蟲(chóng)環(huán)境使用MySQL數(shù)據(jù)庫(kù)前,需要使用“servicemysqldstart”命令啟用MySQL服務(wù),如下圖所示。運(yùn)行“grep'password'/var/log/mysqld.log”命令查看默認(rèn)密碼,如圖1?46所示。配置Python爬蟲(chóng)環(huán)境運(yùn)行“mysql-uroot-p”命令,如下圖所示,輸入默認(rèn)密碼,進(jìn)入MySQL客戶端。配置Python爬蟲(chóng)環(huán)境如下圖所示,運(yùn)行“mysql-uroot-p”命令,輸入修改后的密碼進(jìn)入MySQL客戶端,可使用“help”或“\h”命令查看幫助。配置Python爬蟲(chóng)環(huán)境使用修改后的密碼進(jìn)入MySQL客戶端配置Python爬蟲(chóng)環(huán)境第二章爬蟲(chóng)基礎(chǔ)知識(shí)準(zhǔn)備1認(rèn)識(shí)HTTP目錄了解網(wǎng)頁(yè)基礎(chǔ)2網(wǎng)絡(luò)爬蟲(chóng)就是按照一定的規(guī)則,自動(dòng)地抓取萬(wàn)維網(wǎng)信息的程序或腳本。爬取通常是從網(wǎng)站的某個(gè)頁(yè)面開(kāi)始的,通過(guò)解析網(wǎng)頁(yè)內(nèi)容獲取目標(biāo)數(shù)據(jù)。使用瀏覽器訪問(wèn)某企業(yè)網(wǎng)址/,借助瀏覽器開(kāi)發(fā)者工具,查看網(wǎng)頁(yè)源代碼并分析頁(yè)面的結(jié)構(gòu)和常用標(biāo)簽作用,查找網(wǎng)頁(yè)資源中是否傳輸XML和JSON類型的數(shù)據(jù)。任務(wù)描述根據(jù)網(wǎng)頁(yè)源代碼,分析網(wǎng)頁(yè)結(jié)構(gòu)和常用的標(biāo)簽作用。根據(jù)網(wǎng)頁(yè)源代碼,明確各標(biāo)簽之間的嵌套關(guān)系。能區(qū)分動(dòng)態(tài)網(wǎng)頁(yè)和靜態(tài)網(wǎng)頁(yè)。能區(qū)分不同類型的數(shù)據(jù)。任務(wù)分析HTML主要通過(guò)HTML標(biāo)簽對(duì)網(wǎng)頁(yè)中的文本、按鈕、圖片、聲音等內(nèi)容進(jìn)行描述。HTML提供了很多標(biāo)簽,如段落標(biāo)簽<p>、標(biāo)題標(biāo)簽<h1>、超鏈接標(biāo)簽<a>、圖片標(biāo)簽<img>等(在2.1.2小節(jié)中,會(huì)對(duì)各種常用HTML標(biāo)簽做簡(jiǎn)單介紹)。網(wǎng)頁(yè)中需要定義什么內(nèi)容,用對(duì)應(yīng)的HTML標(biāo)簽描述即可。HTML之所以稱為超文本標(biāo)記語(yǔ)言,是因?yàn)樗粌H通過(guò)標(biāo)簽描述網(wǎng)頁(yè)內(nèi)容,而且在文本中包含超鏈接。開(kāi)發(fā)人員通過(guò)超鏈接將網(wǎng)頁(yè)和各種網(wǎng)頁(yè)元素鏈接起來(lái),創(chuàng)造了形式多樣的網(wǎng)站。了解網(wǎng)頁(yè)開(kāi)發(fā)技術(shù)1.HTML下面通過(guò)某企業(yè)官網(wǎng)首頁(yè)的網(wǎng)頁(yè)源代碼,查看該頁(yè)面對(duì)應(yīng)的HTML標(biāo)簽,如下頁(yè)P(yáng)PT圖所示。(使用Chrome開(kāi)發(fā)者工具查看網(wǎng)頁(yè)會(huì)在3.1.1小節(jié)介紹。)網(wǎng)頁(yè)內(nèi)容通過(guò)一系列HTML標(biāo)簽描述,瀏覽器解析這些標(biāo)簽后,便會(huì)在網(wǎng)頁(yè)中將它們渲染成一個(gè)個(gè)節(jié)點(diǎn),便形成了瀏覽器中看到的網(wǎng)頁(yè)。不同標(biāo)簽對(duì)應(yīng)不同的功能,各標(biāo)簽定義的節(jié)點(diǎn)相互嵌套組合成復(fù)雜的層次關(guān)系,形成了網(wǎng)頁(yè)的基礎(chǔ)架構(gòu)。了解網(wǎng)頁(yè)開(kāi)發(fā)技術(shù)雖然HTML定義了網(wǎng)頁(yè)的基礎(chǔ)架構(gòu),但是只有HTML標(biāo)簽的頁(yè)面布局并不美觀。為了讓網(wǎng)頁(yè)內(nèi)容更加美觀,需要借助CSS來(lái)實(shí)現(xiàn)。了解網(wǎng)頁(yè)開(kāi)發(fā)技術(shù)2.CSSCSS(CascadingStyleSheets,串聯(lián)樣式表)主要用于設(shè)置HTML頁(yè)面中的文本樣式(字體、大小、對(duì)齊方式等)、圖片的外形(寬高、邊框樣式、邊距等)和版面的布局等外觀樣式。CSS以HTML為基礎(chǔ),提供了豐富的功能,如字體、顏色、背景的控制和整體排版等。使用CSS設(shè)置不同樣式的文字效果如下圖所示,圖中文字的粗體、行間距等,都可以通過(guò)CSS來(lái)控制。了解網(wǎng)頁(yè)開(kāi)發(fā)技術(shù)如下圖所示,框中的部分為當(dāng)前已選中<a>標(biāo)簽對(duì)應(yīng)的CSS樣式代碼。了解網(wǎng)頁(yè)開(kāi)發(fā)技術(shù)JavaScript是網(wǎng)頁(yè)中的一種腳本語(yǔ)言,簡(jiǎn)稱為JS。HTML和CSS組合使用,提供給用戶的是一種靜態(tài)的網(wǎng)頁(yè),缺乏動(dòng)態(tài)性和交互性。在大多數(shù)網(wǎng)頁(yè)中都能看到一些交互和動(dòng)畫(huà)效果,如下載進(jìn)度條、輪播圖、密碼輸入錯(cuò)誤的動(dòng)態(tài)提示信息等,這些通常就是JavaScript的功勞。了解網(wǎng)頁(yè)開(kāi)發(fā)技術(shù)3.JavaScript如下圖所示為某企業(yè)官網(wǎng)首頁(yè)中的圖片輪播效果,該效果由JavaScript實(shí)現(xiàn)。了解網(wǎng)頁(yè)開(kāi)發(fā)技術(shù)JavaScript代碼通常是以單獨(dú)的文件形式進(jìn)行加載的,文件擴(kuò)展名為.js,如下圖框中的代碼所示。了解網(wǎng)頁(yè)開(kāi)發(fā)技術(shù)網(wǎng)頁(yè)主要由圖像和文字等元素組成,都遵循同樣的HTML文檔格式。使用不同的標(biāo)簽可以呈現(xiàn)不同的效果,本小節(jié)將會(huì)簡(jiǎn)單介紹網(wǎng)頁(yè)的基本結(jié)構(gòu)以及常用的一些HTML標(biāo)簽。了解網(wǎng)頁(yè)的結(jié)構(gòu)1.

網(wǎng)頁(yè)基本結(jié)構(gòu)<!DOCTYPEhtml><html><head><metacharset='utf-8'><title>測(cè)試文件</title></head><body></body></html>程序下列代碼是一個(gè)HTML網(wǎng)頁(yè)文件的內(nèi)容,展示了一個(gè)最簡(jiǎn)單的網(wǎng)頁(yè)結(jié)構(gòu)。這段代碼使用DOCTYPE開(kāi)始,最外層用<html>標(biāo)簽,代碼最后有對(duì)應(yīng)的結(jié)束標(biāo)簽表示閉合,<html>標(biāo)簽內(nèi)部是<head>標(biāo)簽和<body>標(biāo)簽。<!DOCTYPEhtml><html><head><metacharset='utf-8'><title>測(cè)試文件</title></head><body></body></html>程序帶有“<>”符號(hào)的元素被稱為HTML標(biāo)簽,如<html>、<head>、<body>都是HTML標(biāo)簽。標(biāo)簽名存放在“<>”中,表示某個(gè)功能的編碼命令。<!DOCTYPE>聲明必須位于HTML文檔的第一行,且在<html>標(biāo)簽之前。<!DOCTYPE>聲明不是HTML標(biāo)簽,是一條指令,它用于向?yàn)g覽器說(shuō)明當(dāng)前文檔使用哪種HTML標(biāo)準(zhǔn)規(guī)范,網(wǎng)頁(yè)在開(kāi)頭處使用<!DOCTYPE>聲明為所有的HTML文檔指定HTML版本和類型。這樣瀏覽器將該網(wǎng)頁(yè)作為有效的HTML文檔,并按指定的文檔類型進(jìn)行解析。<!DOCTYPEhtml>表示使用的是HTML5版本。了解網(wǎng)頁(yè)的結(jié)構(gòu)(1)<!DOCTYPE>聲明<html>標(biāo)簽位于<!DOCTYPE>聲明之后,也被稱為根標(biāo)簽。根標(biāo)簽主要用于告訴瀏覽器該文檔是一個(gè)HTML文檔。<html>標(biāo)簽標(biāo)志著HTML文檔的開(kāi)始,</html>標(biāo)簽則標(biāo)志著HTML文檔的結(jié)束,<html>標(biāo)簽和</html>標(biāo)簽之間是文檔的頭部和主體內(nèi)容。了解網(wǎng)頁(yè)的結(jié)構(gòu)(2)<html>標(biāo)簽<head>標(biāo)簽用于定義HTML文檔的頭部信息,也被稱為頭部標(biāo)簽。<head>標(biāo)簽緊跟在<html>標(biāo)簽之后,主要用于封裝其他位于文檔頭部的標(biāo)簽,如<title>、<meta>、<link>和<style>等標(biāo)簽。了解網(wǎng)頁(yè)的結(jié)構(gòu)(3)<head>標(biāo)簽<body>標(biāo)簽用于定義HTML文檔所要顯示的內(nèi)容,也被稱為主體標(biāo)簽。瀏覽器中顯示的文本、圖像、音頻和視頻等信息都必須位于<body>標(biāo)簽內(nèi),才能最終展示給用戶。需要注意的是,一個(gè)HTML文檔只能包含一對(duì)<body></body>標(biāo)簽,且<body>標(biāo)簽必須在<html>標(biāo)簽內(nèi),位于<head>標(biāo)簽之后,與<head>標(biāo)簽是并列關(guān)系。了解網(wǎng)頁(yè)的結(jié)構(gòu)(4)<body>標(biāo)簽不同網(wǎng)頁(yè)想要呈現(xiàn)出不同的文字、圖片等信息,在網(wǎng)頁(yè)基本結(jié)構(gòu)的基礎(chǔ)上,還需要在<body>標(biāo)簽中添加具有其他功能的標(biāo)簽,下面將對(duì)常用的HTML標(biāo)簽進(jìn)行基本介紹。了解網(wǎng)頁(yè)的結(jié)構(gòu)2.常用的HTML標(biāo)簽為了使網(wǎng)頁(yè)更加語(yǔ)義化,經(jīng)常會(huì)用到標(biāo)題標(biāo)簽,HTML提供了6個(gè)等級(jí)的標(biāo)題標(biāo)簽,分別是<h1>、<h2>、<h3>、<h4>、<h5>和<h6>,從<h1>到<h6>標(biāo)題標(biāo)簽的重要性依次遞減。了解網(wǎng)頁(yè)的結(jié)構(gòu)(1)標(biāo)題標(biāo)簽<body> <h1>一級(jí)標(biāo)題</h1> <h2>二級(jí)標(biāo)題</h2> <h3>三級(jí)標(biāo)題</h3> <h4>四級(jí)標(biāo)題</h4> <h5>五級(jí)標(biāo)題</h5> <h6>六級(jí)標(biāo)題</h6></body>程序利用標(biāo)題標(biāo)簽創(chuàng)建各等級(jí)標(biāo)題如下面代碼所示。下面代碼所示的示例在瀏覽器中的效果如下圖所示。在網(wǎng)頁(yè)中,使用<p>標(biāo)簽來(lái)定義段落。默認(rèn)情況下,一個(gè)段落中的文本會(huì)根據(jù)瀏覽器窗口的大小自動(dòng)換行。了解網(wǎng)頁(yè)的結(jié)構(gòu)(2)段落標(biāo)簽<body><p>在慶祝中國(guó)共產(chǎn)主義青年團(tuán)成立100周年大會(huì)上,總書(shū)記勉勵(lì)新時(shí)代的廣大共青團(tuán)員,要做理想遠(yuǎn)大、信念堅(jiān)定的模范;要做刻苦學(xué)習(xí)、銳意創(chuàng)新的模范;要做敢于斗爭(zhēng)、善于斗爭(zhēng)的模范;要做艱苦奮斗、無(wú)私奉獻(xiàn)的模范;要做崇德向善、嚴(yán)守紀(jì)律的模范。</p></body>程序如下代碼所示為HTML文件中的關(guān)鍵代碼,在瀏覽器中的效果如下圖所示,調(diào)整瀏覽器窗口的寬度,會(huì)發(fā)現(xiàn)段落中的文字會(huì)自動(dòng)換行。用戶想要在HTML網(wǎng)頁(yè)中顯示圖像,就需要使用圖像標(biāo)簽<img>。<img>標(biāo)簽的基本語(yǔ)法格式如下。在<img>標(biāo)簽的語(yǔ)法格式中,src屬性用于指定圖像文件路徑,是<img>標(biāo)簽的必備屬性。了解網(wǎng)頁(yè)的結(jié)構(gòu)(3)圖像標(biāo)簽<imgsrc="圖像URL"/><body><imgsrc='/r/cms/tipdmcom/tipdmcom/tip/logo.png'width='200px'alt='泰迪智能科技'/></body>了解網(wǎng)頁(yè)的結(jié)構(gòu)在實(shí)際使用過(guò)程中,除了src屬性之外,還可以根據(jù)不同的需要設(shè)置更多屬性。<img>標(biāo)簽除了src屬性外還有兩個(gè)屬性,分別為width和alt,width用于設(shè)置圖片的寬度;alt用于設(shè)置圖像不能顯示時(shí)的提示文本。下述代碼所示的示例在瀏覽器中的效果如下所示。超鏈接是網(wǎng)頁(yè)中常用的元素,使用HTML創(chuàng)建超鏈接較為簡(jiǎn)單,只需要使用<a>標(biāo)簽“環(huán)繞”需要被鏈接的對(duì)象即可。使用<a>標(biāo)簽創(chuàng)建超鏈接的基本語(yǔ)法格式如下。了解網(wǎng)頁(yè)的結(jié)構(gòu)(4)超鏈接標(biāo)簽<ahref="跳轉(zhuǎn)目標(biāo)"target="目標(biāo)窗口彈出的方式">文本或圖像</a>在<a>標(biāo)簽的語(yǔ)法格式中,href和target是<a>標(biāo)簽的常用屬性。href屬性用于指定鏈接指向的頁(yè)面的URL,target屬性用于指定頁(yè)面的打開(kāi)方式。了解網(wǎng)頁(yè)的結(jié)構(gòu)<body> <ahref='/'target='_blank'>泰迪智能科技</a></body>程序在下述代碼中,<a>標(biāo)簽的href屬性值為某企業(yè)官網(wǎng)URL,target屬性值表示在新窗口中打開(kāi)頁(yè)面。下述代碼的示例中,單擊“泰迪智能科技”,瀏覽器會(huì)打開(kāi)一個(gè)新頁(yè)面,如代碼旁圖所示。列表標(biāo)簽是網(wǎng)頁(yè)結(jié)構(gòu)中常用的標(biāo)簽,網(wǎng)頁(yè)中的列表通常劃分為3類,分別為無(wú)序列表、有序列表和定義列表。下面分別對(duì)3類列表標(biāo)簽進(jìn)行介紹。了解網(wǎng)頁(yè)的結(jié)構(gòu)(5)列表標(biāo)簽無(wú)序列表是一種沒(méi)有特定順序的列表,各個(gè)列表項(xiàng)之間沒(méi)有先后順序之分,通常是并列的。了解網(wǎng)頁(yè)的結(jié)構(gòu)①無(wú)序列表標(biāo)簽<body>

工匠精神內(nèi)涵

<ul> <li>敬業(yè)</li> <li>精益</li> <li>專注</li> <li>創(chuàng)新</li> </ul></body>程序下述代碼給出了無(wú)序列表標(biāo)簽<ul>和<li>標(biāo)簽的用法,<li>標(biāo)簽嵌套在<ul>標(biāo)簽中,用于描述具體的列表項(xiàng),每對(duì)<ul></ul>標(biāo)簽中至少應(yīng)包含一對(duì)<li></li>標(biāo)簽。代碼所示的示例在瀏覽器中的效果如旁圖所示。有序列表是一種強(qiáng)調(diào)排列順序的列表,使用<ol>標(biāo)簽定義,<ol>標(biāo)簽內(nèi)部可以嵌套多個(gè)<li>標(biāo)簽。例如,網(wǎng)頁(yè)中常見(jiàn)的各種排行榜,都可以通過(guò)有序列表來(lái)定義。了解網(wǎng)頁(yè)的結(jié)構(gòu)②有序列表標(biāo)簽<body>

爬蟲(chóng)一般步驟:

<ol> <li>向網(wǎng)址發(fā)送請(qǐng)求</li> <li>獲得響應(yīng)</li> <li>解析響應(yīng)內(nèi)容</li> <li>保存數(shù)據(jù)</li> </ol></body>程序下述代碼展示了<ol>和<li>標(biāo)簽的使用方法,示例在瀏覽器中的效果如旁圖所示。定義列表和有序列表、無(wú)序列表有所不同,它使用3個(gè)標(biāo)簽定義,即<dl>、<dt>和<dd>。一對(duì)<dt></dt>標(biāo)簽可以對(duì)應(yīng)多對(duì)<dd></dd>標(biāo)簽,也就是說(shuō),可以對(duì)一個(gè)名詞進(jìn)行多方面解釋。了解網(wǎng)頁(yè)的結(jié)構(gòu)③定義列表標(biāo)簽<body> <dl> <dt>工匠精神</dt> <dd>是一種職業(yè)精神,它是職業(yè)道德、職業(yè)能力、職業(yè)品質(zhì)的體現(xiàn),是從業(yè)者的一種職業(yè)價(jià)值取向和行為表現(xiàn)?!肮そ尘瘛钡幕緝?nèi)涵包括敬業(yè)、精益、專注、創(chuàng)新等方面的內(nèi)容。</dd> </dl></body>程序定義列表標(biāo)簽的一個(gè)示例如下列代碼所示,<dl>標(biāo)簽用于指定定義列表,<dt>標(biāo)簽和<dd>標(biāo)簽并列嵌套于<dl>標(biāo)簽中。其中,<dt>標(biāo)簽用于指定術(shù)語(yǔ)名詞,<dd>標(biāo)簽用于對(duì)名詞進(jìn)行解釋和描述。<div>標(biāo)簽為一個(gè)塊標(biāo)簽,可以實(shí)現(xiàn)網(wǎng)頁(yè)的規(guī)劃和布局。可以通過(guò)HTML把頁(yè)面劃分為多個(gè)區(qū)域,如導(dǎo)航欄、內(nèi)容區(qū)等,不同區(qū)域顯示不同的內(nèi)容,這些區(qū)域一般都通過(guò)<div>標(biāo)簽進(jìn)行隔離。用戶可以在<div>標(biāo)簽中設(shè)置區(qū)域的外邊距、內(nèi)邊距、寬和高等,同時(shí)<div>標(biāo)簽內(nèi)部可以容納段落、標(biāo)題、表格、圖像等多種網(wǎng)頁(yè)元素。也就是說(shuō),大多數(shù)HTML標(biāo)簽都可以嵌套在<div>標(biāo)簽中,<div>標(biāo)簽中還可以嵌套多層<div>標(biāo)簽。在當(dāng)前的網(wǎng)頁(yè)設(shè)計(jì)中,<div>標(biāo)簽應(yīng)用十分廣泛,可以通過(guò)與id、class等屬性結(jié)合設(shè)置CSS樣式,替代大多數(shù)塊級(jí)文本標(biāo)簽。了解網(wǎng)頁(yè)的結(jié)構(gòu)(6)<div>標(biāo)簽<span>作為容器標(biāo)簽被廣泛應(yīng)用在HTML頁(yè)面中。與<div>標(biāo)簽不同的是,<span>標(biāo)簽是行內(nèi)元素,僅作為只包含文本和各種行內(nèi)標(biāo)簽的容器。<span>標(biāo)簽可以嵌套多層<span>標(biāo)簽。<span>標(biāo)簽通常用于定義網(wǎng)頁(yè)中某些特殊顯示的文本,可結(jié)合class屬性使用。<span>標(biāo)簽本身沒(méi)有結(jié)構(gòu)特征,只有在應(yīng)用樣式時(shí),才會(huì)產(chǎn)生視覺(jué)上的變化。了解網(wǎng)頁(yè)的結(jié)構(gòu)(7)<span>標(biāo)簽靜態(tài)網(wǎng)頁(yè)中的內(nèi)容是固定的,不會(huì)根據(jù)瀏覽者的需要而改變。靜態(tài)網(wǎng)頁(yè)是相對(duì)于動(dòng)態(tài)網(wǎng)頁(yè)而言的,是指沒(méi)有后臺(tái)數(shù)據(jù)庫(kù)、不含程序、不可交互的網(wǎng)頁(yè)。早期的Web應(yīng)用主要通過(guò)靜態(tài)頁(yè)面進(jìn)行瀏覽,即靜態(tài)網(wǎng)頁(yè)。靜態(tài)網(wǎng)頁(yè)是HTML文件,一般以.htm、.html或.shtml為擴(kuò)展名,一個(gè)文件對(duì)應(yīng)一個(gè)URL;當(dāng)文件寫(xiě)好后,需更新至服務(wù)器上。若需要修改頁(yè)面內(nèi)容,則需修改源文件并重新上傳。了解網(wǎng)頁(yè)的分類1.靜態(tài)網(wǎng)頁(yè)靜態(tài)網(wǎng)頁(yè)的工作原理如圖215所示,客戶端通過(guò)瀏覽器,使用HTTP發(fā)送一個(gè)請(qǐng)求(Request)給服務(wù)器;服務(wù)器接收到請(qǐng)求后,從文件系統(tǒng)中取出對(duì)應(yīng)內(nèi)容,再返回給瀏覽器一個(gè)響應(yīng)(Response);客戶端瀏覽器收到內(nèi)容后,進(jìn)行渲染展示。了解網(wǎng)頁(yè)的分類動(dòng)態(tài)網(wǎng)頁(yè)可以根據(jù)用戶的請(qǐng)求動(dòng)態(tài)生成頁(yè)面信息。動(dòng)態(tài)網(wǎng)頁(yè)一般使用HTML和動(dòng)態(tài)腳本語(yǔ)言如JSP、ASP或PHP等進(jìn)行編寫(xiě)。動(dòng)態(tài)網(wǎng)頁(yè)的代碼一般可不變動(dòng),頁(yè)面內(nèi)容可通過(guò)后臺(tái)數(shù)據(jù)庫(kù)交互進(jìn)行數(shù)據(jù)傳遞,頁(yè)面文件一般以.php、.asp或.jsp為擴(kuò)展名。通常情況下,相關(guān)人員只需要維護(hù)后臺(tái)數(shù)據(jù)庫(kù)內(nèi)容即可,必要時(shí)才會(huì)調(diào)整頁(yè)面代碼。動(dòng)態(tài)網(wǎng)頁(yè)常用于實(shí)現(xiàn)用戶登錄、注冊(cè)等,且動(dòng)態(tài)網(wǎng)頁(yè)、靜態(tài)網(wǎng)頁(yè)可混合使用。了解網(wǎng)頁(yè)的分類2.動(dòng)態(tài)網(wǎng)頁(yè)動(dòng)態(tài)網(wǎng)頁(yè)的工作原理如下圖所示,客戶端通過(guò)瀏覽器,使用HTTP發(fā)送一個(gè)請(qǐng)求給服務(wù)器。服務(wù)器獲得請(qǐng)求后,判斷請(qǐng)求資源類型,若客戶端請(qǐng)求的是靜態(tài)資源(.html、.htm文件等),則將請(qǐng)求直接轉(zhuǎn)交給服務(wù)器,服務(wù)器從文件系統(tǒng)中取出內(nèi)容,發(fā)送回客戶端瀏覽器進(jìn)行解析;若客戶端請(qǐng)求的是動(dòng)態(tài)資源(.jsp、.asp、.php文件等),則先將請(qǐng)求轉(zhuǎn)交給WebContainer(Web容器),Web容器將動(dòng)態(tài)響應(yīng)轉(zhuǎn)交給服務(wù)器,之后通過(guò)服務(wù)器將內(nèi)容發(fā)送給客戶端瀏覽器進(jìn)行解析。了解網(wǎng)頁(yè)的分類區(qū)分動(dòng)態(tài)網(wǎng)頁(yè)和靜態(tài)網(wǎng)頁(yè)并不依賴于觀察這個(gè)頁(yè)面中是否能“動(dòng)”。動(dòng)態(tài)網(wǎng)頁(yè)向不同的訪問(wèn)者顯示的信息,因?yàn)閯?dòng)態(tài)網(wǎng)頁(yè)會(huì)隨著位置、時(shí)間、設(shè)置和用戶操作等方面的不同,而顯示不同的內(nèi)容。例如,當(dāng)不同的用戶登錄淘寶網(wǎng)時(shí),淘寶網(wǎng)首頁(yè)所推薦的商品會(huì)有所區(qū)別,即每個(gè)人看到的淘寶網(wǎng)首頁(yè)內(nèi)容都不盡相同;而靜態(tài)網(wǎng)頁(yè)內(nèi)容在任何訪問(wèn)者看來(lái)都是完全相同的。在網(wǎng)頁(yè)中呈現(xiàn)出的內(nèi)容,一部分由HTML標(biāo)簽和CSS樣式?jīng)Q定,另一部分可能是JavaScript動(dòng)態(tài)渲染之后的結(jié)果。要區(qū)分網(wǎng)頁(yè)中哪些元素是服務(wù)器發(fā)過(guò)來(lái)的,哪些是JavaScript動(dòng)態(tài)渲染生成的,可以使用瀏覽器的“檢查”和“查看網(wǎng)頁(yè)源代碼”功能。了解網(wǎng)頁(yè)的分類3.區(qū)分動(dòng)態(tài)網(wǎng)頁(yè)和靜態(tài)網(wǎng)頁(yè)以人民郵電出版社官網(wǎng)“/”為例,在該網(wǎng)頁(yè)上右擊并選擇“檢查”選項(xiàng),在網(wǎng)頁(yè)源代碼中定位“趣學(xué)算法(第2版)”,可以定位相應(yīng)的標(biāo)簽,如下圖所示。了解網(wǎng)頁(yè)的分類同時(shí),在該網(wǎng)頁(yè)上右擊并選擇“查看網(wǎng)頁(yè)源代碼”,在源代碼的頁(yè)面中,按“Ctrl+F”組合鍵并輸入“趣學(xué)算法(第2版)”發(fā)現(xiàn)沒(méi)有匹配的結(jié)果,如下圖所示。借助此方式,可以用來(lái)區(qū)分網(wǎng)頁(yè)中的內(nèi)容是經(jīng)過(guò)JavaScript動(dòng)態(tài)渲染后生成的代碼(“檢查”對(duì)應(yīng)的代碼),還是服務(wù)器發(fā)送到瀏覽器的原始代碼(“查看網(wǎng)頁(yè)源代碼”對(duì)應(yīng)的代碼)。了解網(wǎng)頁(yè)的分類網(wǎng)頁(yè)中存在多種類型的數(shù)據(jù),如文字、圖片、視頻等,網(wǎng)頁(yè)的前端和后端之間要進(jìn)行數(shù)據(jù)交互,經(jīng)常用到的兩種數(shù)據(jù)格式是XML和JSON。了解網(wǎng)頁(yè)的數(shù)據(jù)結(jié)構(gòu)可擴(kuò)展標(biāo)記語(yǔ)言(ExtensibleMarkupLanguage,XML)被設(shè)計(jì)用來(lái)傳輸和存儲(chǔ)數(shù)據(jù),不用于表現(xiàn)數(shù)據(jù),HTML則用來(lái)表現(xiàn)數(shù)據(jù)。由于XML具有良好的拓展性、內(nèi)容和形式相分離以及嚴(yán)格的語(yǔ)法要求等特點(diǎn),在網(wǎng)頁(yè)設(shè)計(jì)中得到了廣泛的應(yīng)用。XML是一種可以擴(kuò)展的標(biāo)記語(yǔ)言,這種語(yǔ)言實(shí)質(zhì)上是將文檔分成許多部分,并對(duì)分開(kāi)的部分加以標(biāo)記。下述給出了一個(gè)簡(jiǎn)單的XML文件示例,是小紅寫(xiě)給小明的便簽,該便簽具有自我描述性,它包含發(fā)送者和接收者的信息,同時(shí)擁有標(biāo)題和消息主體。了解網(wǎng)頁(yè)的數(shù)據(jù)結(jié)構(gòu)1.XML<?xmlversion='1.0'encoding='UTF-8'?><note><to>小明</to><from>小紅</from><heading>Reminder</heading><body>注意理論與實(shí)踐結(jié)合!</body></note>程序一個(gè)簡(jiǎn)單的XML文件JS對(duì)象表示法(JavaScriptObjectNotation,JSON)是一種輕量級(jí)的數(shù)據(jù)交換格式,目前使用特別廣泛。JSON具有以下特點(diǎn),使得它在當(dāng)前網(wǎng)頁(yè)中逐漸取代XML。(1)JSON采用完全獨(dú)立于編程語(yǔ)言的文本格式來(lái)存儲(chǔ)和表示數(shù)據(jù)。(2)簡(jiǎn)潔、清晰的層次結(jié)構(gòu)使得JSON成為理想的數(shù)據(jù)交換格式。(3)JSON易于人們閱讀和編寫(xiě),也易于機(jī)器解析和生成,有效地提升了網(wǎng)絡(luò)傳輸?shù)男?。了解網(wǎng)頁(yè)的數(shù)據(jù)結(jié)構(gòu)2.JSON在JavaScript語(yǔ)言中,任何JavaScript支持的類型都可以通過(guò)JSON來(lái)表示,如字符串、數(shù)字、對(duì)象、數(shù)組等。JSON的語(yǔ)法格式要求如下。(1)對(duì)象用鍵值對(duì)表示,數(shù)據(jù)由逗號(hào)分隔。(2)用花括號(hào)標(biāo)識(shí)對(duì)象。(3)用方括號(hào)標(biāo)識(shí)數(shù)組。了解網(wǎng)頁(yè)的數(shù)據(jù)結(jié)構(gòu)例如,在人民郵電出版社首頁(yè)“/”中,“新書(shū)推薦”欄中8本圖書(shū)的信息,通過(guò)圖2-19右側(cè)的網(wǎng)頁(yè)文件資源可知,這些信息采用JSON格式存儲(chǔ),存儲(chǔ)信息包括圖書(shū)id(bookId)、書(shū)名(bookName)和封面圖片地址(picPath)。了解網(wǎng)頁(yè)的數(shù)據(jù)結(jié)構(gòu)1認(rèn)識(shí)HTTP目錄了解網(wǎng)頁(yè)基礎(chǔ)2通過(guò)瀏覽器訪問(wèn)網(wǎng)頁(yè)的過(guò)程需要使用HTTP進(jìn)行通信,瀏覽器作為客戶端向網(wǎng)頁(yè)服務(wù)器發(fā)送請(qǐng)求,服務(wù)器收到請(qǐng)求后給客戶端發(fā)送響應(yīng)。訪問(wèn)網(wǎng)頁(yè)時(shí),借助瀏覽器的開(kāi)發(fā)者工具,可查看網(wǎng)絡(luò)資源加載情況,分析請(qǐng)求方法類型、請(qǐng)求頭字段、響應(yīng)狀態(tài)碼和響應(yīng)頭信息。若需要維持客戶端和服務(wù)器的通信狀態(tài),則需要用到Cookie,可使用瀏覽器的開(kāi)發(fā)者工具定位Cookie信息,掌握Cookie的運(yùn)行機(jī)制。任務(wù)描述在瀏覽器中訪問(wèn)網(wǎng)址,分析HTTP請(qǐng)求的工作過(guò)程。使用瀏覽器開(kāi)發(fā)者工具,查看訪問(wèn)網(wǎng)頁(yè)過(guò)程中加載的多種資源。分析請(qǐng)求信息中的請(qǐng)求方法、請(qǐng)求頭信息。分析響應(yīng)信息中的響應(yīng)狀態(tài)碼、響應(yīng)頭信息。查看請(qǐng)求頭信息中是否攜帶Cookie。任務(wù)分析HTTP規(guī)定了客戶端與服務(wù)器之間進(jìn)行網(wǎng)頁(yè)內(nèi)容傳輸時(shí),所必須遵守的傳輸格式。HTTP客戶端會(huì)向服務(wù)器發(fā)起一個(gè)請(qǐng)求,創(chuàng)建一個(gè)到服務(wù)器指定端口(默認(rèn)是80端口)的TCP(TransmissionControlProtocol,傳輸控制協(xié)議)連接。HTTP服務(wù)器則從該端口監(jiān)聽(tīng)客戶端的請(qǐng)求。一旦接收到請(qǐng)求,服務(wù)器會(huì)向客戶端返回一個(gè)響應(yīng)狀態(tài),如“HTTP/1.1200OK”,除了響應(yīng)狀態(tài)之外,還會(huì)向客戶端返回響應(yīng)的內(nèi)容,如請(qǐng)求的文件、錯(cuò)誤消息或其他信息。熟悉HTTP請(qǐng)求方法與過(guò)程在HTTP/1.1中,一共定義了8種方法(也叫“動(dòng)作”)來(lái)以不同方式操作指定的資源,如下表所示。熟悉HTTP請(qǐng)求方法與過(guò)程1.請(qǐng)求方法請(qǐng)求方法方法描述GET請(qǐng)求指定的頁(yè)面信息,并返回響應(yīng)體。GET可能會(huì)被網(wǎng)絡(luò)爬蟲(chóng)等隨意訪問(wèn),因此GET方法應(yīng)該只用于讀取數(shù)據(jù)HEADHEAD方法與GET方法都是向服務(wù)器發(fā)出指定資源的請(qǐng)求方法,只不過(guò)服務(wù)器將不傳回具體的內(nèi)容。使用HEAD方法可以在不必傳輸全部?jī)?nèi)容的情況下,獲取該資源的相關(guān)信息(元信息或稱元數(shù)據(jù))POST向指定資源提交數(shù)據(jù)(如提交表單或上傳文件),請(qǐng)求服務(wù)器進(jìn)行處理。數(shù)據(jù)會(huì)被包含在請(qǐng)求中,POST請(qǐng)求可能會(huì)創(chuàng)建新的資源或修改現(xiàn)有資源,或兩者皆有PUT從客戶端上傳指定資源的最新內(nèi)容,即更新服務(wù)器的指定資源DELETE請(qǐng)求服務(wù)器刪除標(biāo)識(shí)的指定資源續(xù)上表熟悉HTTP請(qǐng)求方法與過(guò)程TRACE回顯服務(wù)器收到的請(qǐng)求,主要用于測(cè)試或診斷OPTIONS允許客戶端查看服務(wù)器端上指定資源所支持的所有HTTP請(qǐng)求方法。用“*”來(lái)代替資源名稱,向服務(wù)器發(fā)送OPTIONS請(qǐng)求,可以測(cè)試服務(wù)器功能是否正常CONNECT在HTTP/1.1中,預(yù)留給能夠?qū)⑦B接改為管道方式的代理服務(wù)器請(qǐng)求方法方法描述注意:請(qǐng)求方法名稱是區(qū)分大小寫(xiě)的。當(dāng)某個(gè)請(qǐng)求所指定的資源不支持對(duì)應(yīng)的請(qǐng)求方法時(shí),服務(wù)器會(huì)返回狀態(tài)碼405(MethodNotAllowed);當(dāng)服務(wù)器不認(rèn)識(shí)或不支持對(duì)應(yīng)的請(qǐng)求方法時(shí),會(huì)返回狀態(tài)碼501(NotImplemented)。一般情況下,HTTP服務(wù)器至少需要實(shí)現(xiàn)GET和HEAD方法,其他方法為可選項(xiàng)。所有的方法支持的實(shí)現(xiàn)都應(yīng)當(dāng)匹配方法各自的語(yǔ)法格式。除表21所介紹的方法外,特定的HTTP服務(wù)器還能夠擴(kuò)展自定義的方法。熟悉HTTP請(qǐng)求方法與過(guò)程HTTP采用請(qǐng)求/響應(yīng)模型。客戶端向服務(wù)器發(fā)送一個(gè)請(qǐng)求報(bào)文,請(qǐng)求報(bào)文包含請(qǐng)求方法、URL、協(xié)議版本、請(qǐng)求頭部和請(qǐng)求數(shù)據(jù)。服務(wù)器以一個(gè)狀態(tài)行作為響應(yīng),響應(yīng)的內(nèi)容包括協(xié)議版本、響應(yīng)狀態(tài)、服務(wù)器信息、響應(yīng)頭部和響應(yīng)數(shù)據(jù)。請(qǐng)求與響應(yīng)過(guò)程如下圖所示。熟悉HTTP請(qǐng)求方法與過(guò)程2.請(qǐng)求與響應(yīng)客戶端與服務(wù)器間的請(qǐng)求與響應(yīng)的具體步驟如下。①連接服務(wù)器。由一個(gè)客戶端(通常為瀏覽器)發(fā)起連接。與服務(wù)器的HTTP端口(默認(rèn)為80)建立一個(gè)TCP套接字連接。②發(fā)送HTTP請(qǐng)求??蛻舳私?jīng)TCP套接字向Web服務(wù)器發(fā)送一個(gè)文本格式的請(qǐng)求報(bào)文,一個(gè)請(qǐng)求報(bào)文由請(qǐng)求行、請(qǐng)求頭部、空行和請(qǐng)求數(shù)據(jù)這4個(gè)部分組成。③服務(wù)器接收請(qǐng)求并返回HTTP響應(yīng)。Web服務(wù)器解析請(qǐng)求,定位本次的請(qǐng)求資源。之后將資源副本寫(xiě)至TCP套接字,由客戶端進(jìn)行讀取。一個(gè)響應(yīng)與一個(gè)請(qǐng)求對(duì)應(yīng),由狀態(tài)行、響應(yīng)頭部、空行和響應(yīng)數(shù)據(jù)4部分組成。熟悉HTTP請(qǐng)求方法與過(guò)程④釋放TCP連接。若本次連接的Connection模式為close,則由服務(wù)器主動(dòng)關(guān)閉TCP連接,客戶端將被動(dòng)關(guān)閉連接,釋放TCP連接;若Connection模式為keep-alive,則該連接會(huì)保持一段時(shí)間,在這段時(shí)間內(nèi)可以繼續(xù)接收請(qǐng)求與回傳響應(yīng)。⑤客戶端解析HTML內(nèi)容。客戶端首先會(huì)對(duì)狀態(tài)行進(jìn)行解析,查看狀態(tài)碼是否能表明本次請(qǐng)求是成功的。之后解析每一個(gè)響應(yīng)頭,響應(yīng)頭告知內(nèi)容為若干字節(jié)的HTML文檔和文檔的字符集。最后由客戶端讀取響應(yīng)HTML數(shù)據(jù),根據(jù)HTML的語(yǔ)法對(duì)其進(jìn)行格式化,并在窗口中顯示。熟悉HTTP請(qǐng)求方法與過(guò)程客戶端向服務(wù)器端發(fā)送請(qǐng)求后,服務(wù)器端會(huì)根據(jù)請(qǐng)求內(nèi)容給予響應(yīng)。不同的HTTP狀態(tài)碼代表了不同的服務(wù)器響應(yīng)狀態(tài)。熟悉常見(jiàn)的HTTP狀態(tài)碼HTTP狀態(tài)碼是用來(lái)表示網(wǎng)頁(yè)服務(wù)器響應(yīng)狀態(tài)的3位數(shù)字代碼。HTTP的狀態(tài)碼按首位數(shù)字分為5類,如下表所示。熟悉常見(jiàn)的HTTP狀態(tài)碼1.HTTP狀態(tài)碼種類狀態(tài)碼類型狀態(tài)碼意義1××表示請(qǐng)求已被服務(wù)器接收,需進(jìn)行后續(xù)處理。這類響應(yīng)是臨時(shí)響應(yīng),只包含狀態(tài)行和某些可選的響應(yīng)頭信息,并以空行結(jié)束2××表示請(qǐng)求已成功被服務(wù)器接收、理解并接受3××表示需要客戶端采取進(jìn)一步的操作才能完成請(qǐng)求。通常用來(lái)重定向,重定向目標(biāo)需在本次響應(yīng)中指明4××表示客戶端可能發(fā)生錯(cuò)誤,妨礙服務(wù)器的處理。該錯(cuò)誤可能是語(yǔ)法錯(cuò)誤或請(qǐng)求無(wú)效。除HEAD請(qǐng)求外,服務(wù)器都將返回一個(gè)解釋當(dāng)前錯(cuò)誤狀態(tài),以及該狀態(tài)只是臨時(shí)發(fā)生還是永久存在的實(shí)體。瀏覽器應(yīng)當(dāng)向用戶顯示任何包含在此類錯(cuò)誤響應(yīng)中的實(shí)體內(nèi)容,這類狀態(tài)碼適用于任何請(qǐng)求方法5××表示服務(wù)器在處理請(qǐng)求的過(guò)程中有錯(cuò)誤或異常狀態(tài),也有可能表示服務(wù)器以當(dāng)前的軟硬件資源無(wú)法完成對(duì)請(qǐng)求的處理。除HEAD請(qǐng)求外,服務(wù)器都將返回一個(gè)解釋當(dāng)前錯(cuò)誤狀態(tài),以及這個(gè)狀態(tài)只是臨時(shí)發(fā)生還是永久存在的解釋信息實(shí)體。瀏覽器應(yīng)當(dāng)向用戶展示任何包含在當(dāng)前響應(yīng)中的實(shí)體內(nèi)容,這類狀態(tài)碼適用于任何響應(yīng)方法HTTP狀態(tài)碼有很多種,常見(jiàn)的HTTP狀態(tài)碼如下表所示。熟悉常見(jiàn)的HTTP狀態(tài)碼2.常見(jiàn)的HTTP狀態(tài)碼常見(jiàn)狀態(tài)碼狀態(tài)碼含義200OK請(qǐng)求成功,請(qǐng)求所希望的響應(yīng)頭或數(shù)據(jù)體將隨此響應(yīng)返回400BadRequest由于客戶端的語(yǔ)法錯(cuò)誤、無(wú)效的請(qǐng)求或欺騙性路由請(qǐng)求,服務(wù)器將不會(huì)處理該請(qǐng)求403Forbidden服務(wù)器已經(jīng)理解該請(qǐng)求,但拒絕執(zhí)行,將在返回的實(shí)體內(nèi)描述拒絕的原因,也可以不描述僅返回404響應(yīng)404NotFound請(qǐng)求失敗,請(qǐng)求所希望得到的資源未在服務(wù)器上發(fā)現(xiàn),但允許用戶的后續(xù)請(qǐng)求,不返回該狀況是臨時(shí)性的還是永久性的。被廣泛應(yīng)用于當(dāng)服務(wù)器不想揭示為何請(qǐng)求被拒絕或沒(méi)有其他適合的響應(yīng)可用的情況下500InternalServerError通用錯(cuò)誤消息,服務(wù)器遇到一個(gè)未曾預(yù)料的狀況,導(dǎo)致它無(wú)法完成對(duì)請(qǐng)求的處理,不會(huì)給出具體錯(cuò)誤信息503ServiceUnavailable由于臨時(shí)的服務(wù)器維護(hù)或過(guò)載,服務(wù)器當(dāng)前無(wú)法處理請(qǐng)求。這種狀況是暫時(shí)的,并且將在一段時(shí)間以后恢復(fù)1熟悉常見(jiàn)的HTTP狀態(tài)碼目錄熟悉HTTP請(qǐng)求方法與過(guò)程2熟悉HTTP頭部信息3熟悉Cookie4HTTP頭部信息(HTTPHeaderFields)是指在HTTP的請(qǐng)求信息和響應(yīng)消息中的HTTP頭部信息部分。在頭部信息中,定義了一個(gè)HTTP事務(wù)中的操作參數(shù)。在爬蟲(chóng)中需要使用頭部信息向服務(wù)器發(fā)送模擬信息,并通過(guò)發(fā)送模擬的頭部信息將自己偽裝成一般的客戶端。某網(wǎng)頁(yè)的請(qǐng)求頭部信息和響應(yīng)頭部信息分別如下圖所示。熟悉HTTP頭部信息HTTP頭部信息按用途可分為通用頭、請(qǐng)求頭、響應(yīng)頭和實(shí)體頭。HTTP頭字段被對(duì)應(yīng)分為4種類型:通用頭字段(GeneralHeaderFields)、請(qǐng)求頭字段(RequestHeaderFields)、響應(yīng)頭字段(ResponseHeaderFields)和實(shí)體頭字段(EntityHeaderFields)。熟悉HTTP頭部信息通用頭既適用于客戶端的請(qǐng)求頭,也適用于服務(wù)器的響應(yīng)頭。其與HTTP消息體內(nèi)最終傳輸?shù)臄?shù)據(jù)是無(wú)關(guān)的,只適用于要發(fā)送的消息。常用的標(biāo)準(zhǔn)通用頭字段如下表所示。熟悉HTTP頭部信息1.通用頭字段名說(shuō)明示例Connection該字段只在HTTP/1.1中存在,其決定了客戶端和服務(wù)器在進(jìn)行一次會(huì)話后,服務(wù)器是否立即關(guān)閉網(wǎng)絡(luò)連接。Connection有兩個(gè)值:close和keep-aliveConnection:close/keep-aliveDate包含請(qǐng)求消息和響應(yīng)消息被創(chuàng)建的時(shí)間。該字段值為HTTP-date類型,格式必須為GMT(GreenwichMeanTime,格林尼治標(biāo)準(zhǔn)時(shí)間)Date:Tue,15Nov200708:12:31GMTCache-Control指定請(qǐng)求和響應(yīng)遵循的緩存機(jī)制。在請(qǐng)求消息或響應(yīng)消息中設(shè)置Cache-Control,不會(huì)修改另一個(gè)消息處理過(guò)程中的緩存處理過(guò)程。請(qǐng)求時(shí)的緩存指令包括no-cache、no-store、max-age、max-stale、min-fresh、only-if-cached,響應(yīng)時(shí)的緩存指令包括public、private、no-cache、no-store、no-transform、must-revalidate、proxy-revalidate、max-ageCache-Control:no-cachePragma包含實(shí)現(xiàn)特定功能的指令,最常用的指令為Pragma:no-cache,在HTTP/1.1中,其含義和Cache-Control:no-cache的含義相同Pragma:no-cache熟悉HTTP頭部信息續(xù)上表請(qǐng)求頭可提供更為精確的描述信息,其對(duì)象為所請(qǐng)求的資源或請(qǐng)求本身。其中有些緩存相關(guān)頭描述了緩存信息,這些頭會(huì)改變GET請(qǐng)求時(shí)獲取資源的方式,如If-Modified-Since。有些HTTP頭部信息描述了用戶偏好。例如,Accept-Language和Accept-Encoding表示客戶端所使用的語(yǔ)言和編碼方式,User-Agent表示客戶端的代理方式。熟悉HTTP頭部信息2.請(qǐng)求頭新版本增加的請(qǐng)求頭不能在更舊版本的HTTP中使用,但服務(wù)器和客戶端若都能對(duì)相關(guān)頭進(jìn)行處理,則可以在請(qǐng)求中使用。在這種情況下,客戶端不應(yīng)該假定服務(wù)器有對(duì)相關(guān)頭的處理能力,而未知的請(qǐng)求頭將被處理為實(shí)體頭。熟悉HTTP頭部信息字段名說(shuō)明示例Accept可接受的響應(yīng)內(nèi)容類型(Content-Types)Accept:text/plainAccept-Charset可接受的字符集Accept-Charset:utf-8熟悉HTTP頭部信息常用的標(biāo)準(zhǔn)請(qǐng)求頭字段如下表所示。Accept-Encoding可接受的響應(yīng)內(nèi)容的編碼方式Accept-Encoding:gzip,deflateAccept-Language可接受的響應(yīng)內(nèi)容語(yǔ)言列表Accept-Language:en-USAccept-Datetime可接受的按照時(shí)間來(lái)表示的響應(yīng)內(nèi)容版本Accept-Datetime:Sat,26Dec201517:30:00GMT熟悉HTTP頭部信息續(xù)上表Authorization用于表示HTTP中需要認(rèn)證資源的認(rèn)證信息Authorization:BasicOSdjJGRpbjpvcGVuIANlc2SdDE==Cache-Control用來(lái)指定在當(dāng)前的請(qǐng)求/響應(yīng)中,是否使用緩存機(jī)制Cache-Control:no-cacheConnection客戶端(瀏覽器)想要優(yōu)先使用的連接類型Connection:keep-aliveConnection:UpgradeCookie由之前服務(wù)器通過(guò)Set-Cookie設(shè)置的一個(gè)HTTPCookieCookie:$Version=1;Skin=newContent-Length指明發(fā)送給接收方的消息主體的大小Content-Length:348Content-MD5請(qǐng)求體的內(nèi)容的二進(jìn)制MD5散列值(數(shù)字簽名)以Base64編碼的結(jié)果Content-MD5:oD8dH2sgSW50ZWdyaIEd9D==Content-Type請(qǐng)求體的MIME(MultipurposeInternetmailExtensions,多用途互聯(lián)網(wǎng)郵件擴(kuò)展)類型(用于POST和PUT請(qǐng)求中)Content-Type:application/x-www-form-urlencoded熟悉HTTP頭部信息續(xù)上表Date發(fā)送請(qǐng)求的日期和時(shí)間(以RFC7231中定義的“HTTP日期”格式來(lái)發(fā)送)Date:Wed,26Dec201517:30:00GMTExpect表示客戶端要求服務(wù)器做出特定的行為Expect:100-continueFrom發(fā)起請(qǐng)求的用戶的郵件地址From:user@Host表示服務(wù)器的域名及服務(wù)器所監(jiān)聽(tīng)的端口號(hào)。如果所請(qǐng)求的端口是對(duì)應(yīng)的服務(wù)器的標(biāo)準(zhǔn)端口(80),那么端口號(hào)可以省略Host::80Host:If-Match一個(gè)條件式請(qǐng)求首部。在請(qǐng)求方法為GET和HEAD的情況下,服務(wù)器僅在請(qǐng)求的資源滿足此首部列出的ETag(實(shí)體標(biāo)簽)值時(shí)才會(huì)返回資源。而對(duì)于PUT或其他非安全方法來(lái)說(shuō),只有在滿足條件的情況下才可以將資源上傳If-Match:"9jd00cdj34pss9ejqiw39d82f20d0ikd"If-None-Match一個(gè)條件式請(qǐng)求首部。在請(qǐng)求方法為GET和HEAD的情況下,當(dāng)且僅當(dāng)服務(wù)器上沒(méi)有任何資源的ETag屬性值與這個(gè)首部中列出的相匹配的時(shí)候,服務(wù)器端才會(huì)返回所請(qǐng)求的資源If-None-Match:"737060cd8c284d8af7ad3082f209582d"熟悉HTTP頭部信息續(xù)上表If-Range用于與Range頭字段結(jié)合使用,以便客戶端檢查資源在指定范圍內(nèi)是否發(fā)生了變化。當(dāng)客戶端發(fā)送一個(gè)帶有Range頭字段的范圍請(qǐng)求時(shí),它可以在后續(xù)請(qǐng)求中包含If-Range字段來(lái)提供一個(gè)標(biāo)識(shí)符,以判斷資源是否在指定范圍內(nèi)發(fā)生了變化。服務(wù)器可以根據(jù)這個(gè)標(biāo)識(shí)符判斷是否需要返回完整的資源或者只返回變化的部分If-Range:"737060cd8c284d8af7ad3082f209582d"If-Modified-Since允許客戶端在請(qǐng)求中提供一個(gè)日期值,以指示服務(wù)器只有資源在指定日期后進(jìn)行了修改時(shí)才返回響應(yīng)If-Modified-Since:Sat,29Oct199419:43:31GMTIf-Unmodified-Since允許客戶端在請(qǐng)求中提供一個(gè)日期值,以指示服務(wù)器只有在資源自指定日期后未被修改時(shí)才執(zhí)行請(qǐng)求操作If-Unmodified-Since:Sat,29Oct199419:43:31GMT熟悉HTTP頭部信息續(xù)上表Max-Forwards限制代理或網(wǎng)關(guān)轉(zhuǎn)發(fā)消息的次數(shù)Max-Forwards:10Origin請(qǐng)求的來(lái)源(協(xié)議、主機(jī)、端口)Origin:http://www.example-social-Pragma設(shè)置特殊實(shí)現(xiàn)字段,可能會(huì)對(duì)請(qǐng)求響應(yīng)鏈有多種影響Pragma:no-cacheProxy-Authorization為連接代理授權(quán)認(rèn)證信息Proxy-Authorization:BasicQWxhZGRpbjpvcGVuIHNlc2FtZQ==Range請(qǐng)求部分實(shí)體,設(shè)置請(qǐng)求實(shí)體的字節(jié)數(shù)范圍Range:bytes=500-999Referer設(shè)置前一個(gè)頁(yè)面的地址,并且前一個(gè)頁(yè)面中的連接指向當(dāng)前請(qǐng)求,即如果當(dāng)前請(qǐng)求是在A頁(yè)面中發(fā)送的,那么Referer就是A頁(yè)面的URLReferer:/

en-US/docs/Web/JavaScriptTE設(shè)置用戶代理期望接收的傳輸編碼格式,和響應(yīng)頭中的Transfer-Encoding字段一致TE:trailers,deflate熟悉HTTP頭部信息續(xù)上表Upgrade請(qǐng)求服務(wù)器升級(jí)協(xié)議Upgrade:HTTP/2.0,HTTPS/1.3,IRC/6.9,RTA/x11,websocketUser-Agent用戶代理的字符串值User-Agent:Mozilla/5.0(X11;Linuxx86_64;rv:12.0)Gecko/20100101Firefox/21.0Via通知服務(wù)器代理請(qǐng)求Via:1.0fred,1.1(Apache/1.1)Warning實(shí)體可能會(huì)發(fā)生的問(wèn)題的通用警告Warning:199Miscellaneouswarning響應(yīng)頭為響應(yīng)消息提供了更多信息。例如,用Location字段描述資源位置,以及用Server字段描述服務(wù)器名稱等。與請(qǐng)求頭類似,新版本增加的響應(yīng)頭也不能在更舊版本的HTTP中使用。但是,如果服務(wù)器和客戶端都能對(duì)相關(guān)頭進(jìn)行處理,那么可以在響應(yīng)中使用。在這種情況下,服務(wù)器也不應(yīng)該假定客戶端有對(duì)相關(guān)頭的處理能力,未知的響應(yīng)頭也將被處理為實(shí)體頭。熟悉HTTP頭部信息3.響應(yīng)頭字段名說(shuō)明示例Access-Control-Allow-

Origin指定哪些站點(diǎn)可以參與跨站資源共享Access-Control-Allow-Origin:*Accept-Patch指定服務(wù)器支持的補(bǔ)丁文檔格式,適用于HTTP的PATCH方法Accept-Patch:text/ex

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論