Python網(wǎng)絡(luò)爬蟲項目式教程 課件全套 項目1-7 Python網(wǎng)絡(luò)爬蟲 - 使用分布式爬蟲爬取騰訊招聘頻道_第1頁
Python網(wǎng)絡(luò)爬蟲項目式教程 課件全套 項目1-7 Python網(wǎng)絡(luò)爬蟲 - 使用分布式爬蟲爬取騰訊招聘頻道_第2頁
Python網(wǎng)絡(luò)爬蟲項目式教程 課件全套 項目1-7 Python網(wǎng)絡(luò)爬蟲 - 使用分布式爬蟲爬取騰訊招聘頻道_第3頁
Python網(wǎng)絡(luò)爬蟲項目式教程 課件全套 項目1-7 Python網(wǎng)絡(luò)爬蟲 - 使用分布式爬蟲爬取騰訊招聘頻道_第4頁
Python網(wǎng)絡(luò)爬蟲項目式教程 課件全套 項目1-7 Python網(wǎng)絡(luò)爬蟲 - 使用分布式爬蟲爬取騰訊招聘頻道_第5頁
已閱讀5頁,還剩637頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

項目一保存服務(wù)器網(wǎng)頁到本地

項目要

求本項目是了解爬蟲的概念、分類等,同時掌握Python網(wǎng)絡(luò)爬蟲的開發(fā)環(huán)境的搭建,使用Urilib3庫請求服務(wù)器上的網(wǎng)頁,將網(wǎng)頁保存到本地。

項目分

析要完成項目任務(wù),至少需要具備兩個基本條件:一是需要在計算機上安裝和配置Python開發(fā)環(huán)境,然后要了解Urilib3庫最簡單使用,該項目分2個任務(wù),分別是認識爬蟲和將請求到的網(wǎng)頁保存到本地。

項目目

標【知識目標】熟悉網(wǎng)絡(luò)爬蟲的基本概念,掌握Python和Mongondb以及MySQL數(shù)據(jù)庫的安裝與配置。【能力目標】會安裝Python網(wǎng)絡(luò)開發(fā)環(huán)境和將服務(wù)器網(wǎng)頁保存到本地?!舅刭|(zhì)目標】提高學(xué)生的發(fā)現(xiàn)問題、分析問題、解決問題的能力。

知識導(dǎo)

圖任務(wù)一認識爬蟲及Python的安裝--任務(wù)演示本任務(wù)是初步認識爬蟲,認識爬蟲的概念、爬蟲的分類、爬蟲的作用、爬蟲開發(fā)中的法律和道德問題,然后開始安裝Python的開發(fā)環(huán)境,輸出“我親愛的祖國我永遠緊依著你的心窩!”,同時播放“我和我的祖國”歌曲。任務(wù)一

認識爬蟲及Python的安裝–知識準備Python的安裝pygame的簡單使用使用pygame播放歌曲網(wǎng)絡(luò)爬蟲的基本概念1.網(wǎng)絡(luò)爬蟲的基本概念爬蟲產(chǎn)生的背景目前的互聯(lián)網(wǎng)已經(jīng)邁入大數(shù)據(jù)時代,通過對海量的數(shù)據(jù)進行分析,能夠產(chǎn)生極大的商業(yè)價值。1.網(wǎng)絡(luò)爬蟲的基本概念爬蟲產(chǎn)生的背景數(shù)據(jù)分析應(yīng)用反饋數(shù)據(jù)采集1.網(wǎng)絡(luò)爬蟲的基本概念爬取的網(wǎng)絡(luò)數(shù)據(jù)1.網(wǎng)絡(luò)爬蟲的基本概念結(jié)論

無論是搜索引擎,還是個人或單位獲取目標數(shù)據(jù),都需要從公開網(wǎng)站上爬取大量數(shù)據(jù),在此需求下,爬蟲技術(shù)應(yīng)運而生,并迅速發(fā)展成為一門成熟的技術(shù)。1.網(wǎng)絡(luò)爬蟲的基本概念什么是爬蟲?1.網(wǎng)絡(luò)爬蟲的基本概念什么是爬蟲如果說網(wǎng)絡(luò)像一張網(wǎng),那么爬蟲就是網(wǎng)上的一只小蟲子,在網(wǎng)上爬行的過程中遇到了數(shù)據(jù),就把它抓取下來。1.網(wǎng)絡(luò)爬蟲的基本概念爬蟲的定義網(wǎng)絡(luò)爬蟲,很多地方也稱為網(wǎng)頁蜘蛛,是一種按照一定的規(guī)則,按照某種規(guī)則自動爬取互聯(lián)網(wǎng)信息的程序或腳本。像谷歌搜索引擎、百度搜索引擎等就是典型的爬蟲,這些搜索引擎將互聯(lián)網(wǎng)上海量的網(wǎng)頁信息進行爬取,將爬到的每個網(wǎng)頁上信息進行復(fù)制,然后將該信息保存到自己所在的服務(wù)器上,然后對爬取到的數(shù)據(jù)按照某種規(guī)則,進行必要的處理。1.網(wǎng)絡(luò)爬蟲的基本概念爬蟲的定義

這里的數(shù)據(jù)是指互聯(lián)網(wǎng)上公開的并且可以訪問到的網(wǎng)頁信息,而不是網(wǎng)站的后臺信息(沒有權(quán)限訪問),更不是用戶注冊的信息(非公開的)。1.網(wǎng)絡(luò)爬蟲的基本概念爬蟲的作用思考爬蟲具體能做些什么呢?爬蟲的作用1.網(wǎng)絡(luò)爬蟲的基本概念爬蟲的作用1.網(wǎng)絡(luò)爬蟲的基本概念爬蟲的作用1.網(wǎng)絡(luò)爬蟲的基本概念爬蟲的分類-按照使用場景進行分類通用爬蟲聚焦爬蟲又稱主題網(wǎng)絡(luò)爬蟲,是指選擇性地爬行那些與預(yù)先定義好的主題相關(guān)的頁面的網(wǎng)絡(luò)爬蟲。又稱全網(wǎng)爬蟲,將互聯(lián)網(wǎng)上的網(wǎng)頁下載到本地,形成一個互聯(lián)網(wǎng)內(nèi)容的鏡像備份。1.網(wǎng)絡(luò)爬蟲的基本概念爬蟲的分類-按照爬取形式分類累積式爬蟲聚焦爬蟲在具有一定量規(guī)模的網(wǎng)絡(luò)頁面集合的基礎(chǔ)上,采用更新數(shù)據(jù)的方式選取已有集合中的過時網(wǎng)頁進行抓取,以保證所抓取到的數(shù)據(jù)與真實網(wǎng)絡(luò)數(shù)據(jù)足夠接近。累積式爬蟲是指從某一個時間點開始,通過遍歷的方式抓取系統(tǒng)所能允許存儲和處理的所有網(wǎng)頁。1.網(wǎng)絡(luò)爬蟲的基本概念爬蟲的分類-按照爬取數(shù)據(jù)的存在方式分類表層爬蟲深層爬蟲爬取深層網(wǎng)頁的爬蟲就叫做深層爬蟲。深層網(wǎng)頁是那些大部分內(nèi)容不能通過靜態(tài)鏈接獲取的、隱藏在搜索表單后的,只有用戶提交一些關(guān)鍵詞才能獲得的Web頁面。爬取表層網(wǎng)頁的爬蟲叫做表層爬蟲。表層網(wǎng)頁是指傳統(tǒng)搜索引擎可以索引的頁面,以超鏈接可以到達的靜態(tài)網(wǎng)頁為主構(gòu)成的Web頁面。2.Python的安裝Python的安裝包,可以直接從官網(wǎng)下載,Python下載地址:/,單擊單擊點擊Downloads下選擇Widows,再選擇Python的版本下載。這里版本主要分成3個版本:embeddablezipfile-解壓版:解壓后配置環(huán)境變量就可以直接使用;executableinstaller-安裝版:需要安裝并配置環(huán)境變量才能使用;web-basedinstaller-在線安裝版:需要連接網(wǎng)絡(luò)安裝,3個版本如圖1-7所示。x86代表32位,x86-64代表64位,根據(jù)您的計算機系統(tǒng)是32位系統(tǒng)還是64位系統(tǒng)選擇下載。2.Python的安裝安裝步驟:(1)雙擊包裝包文件準備安裝,如圖所示。

2.Python的安裝安裝步驟:(2)選擇InstallNow(默認安裝方式),一路點下去,完成安裝,如圖所示。

2.Python的安裝配置環(huán)境變量:(1)在計算機上右擊,選擇屬性,如圖。

2.Python的安裝配置環(huán)境變量:(2)在彈出對話框上左鍵單擊“高級系統(tǒng)設(shè)置”,如圖所示。

2.Python的安裝配置環(huán)境變量:(3)在高級面板中,選擇系統(tǒng)變量中的Path,點編輯,如圖所示。

2.Python的安裝配置環(huán)境變量:(4)請注意配置環(huán)境變量,將“;C:\Python37;C:\Python37\Scripts;”(注意,復(fù)制雙引號中間的內(nèi)容,不要復(fù)制雙引號)復(fù)制到環(huán)境變量中的系統(tǒng)變量的Path變量的最后邊位置上去,如圖所示。

2.Python的安裝測試:按下鍵盤上的win+R鍵,調(diào)出運行窗口,在運行窗口中輸入cmd回車,在cmd下輸入python-V,可以看到Python的版本號。

3.pygame的簡單使用pygame本身是用來開發(fā)游戲的,這里使用該框架來播放mp3格式的音頻文件。要使用該框架,可以使用如下命令進行安裝:pipinstallpygame該框架主要使用到了如下方法和模塊。(1)pygame.init()方法該函數(shù)在使用pygame時進行初始化,只有引用了該函數(shù)才能使用pygame提供的所用功能。

(2)pygame.Rect()方法該函數(shù)可以設(shè)置一張圖片的位置以及大小,該函數(shù)主要包含如下構(gòu)造函數(shù)。1)rect=pygame.Rect(left,top,width,height)2)rect=pygame.Rect((left,top),(width,height))3)rect=pygame.Rect(object)3.pygame的簡單使用(3)pygame.mixer模塊該模塊主要是用來播放聲音的,主要用到了以下的方法。1)pygame.mixer.init()該方法主要是初始化混音器模塊。2)pygame.mixer.quit()該方法主要是卸載混音器模塊3)pygame.mixer.music.stop()該方法主要是停止播放音頻文件。4)pygame.mixer.music.pause()該方法主要是暫停播放所有音頻文件。5)pygame.mixer.music.play()該方法主要是播放載入的音頻文件。6)pygame.mixer.music.load(file)使用文件名作為參數(shù)載入音頻文件,音頻文件可以是mp3等格式。4.使用pygame播放歌曲代碼實現(xiàn):01importpygame02importtime03if__name__=='__main__':04print("我親愛的祖國我永遠緊依著你的心窩!")05file_name="whwdzg.mp3"06pygame.mixer.init()#只初始化音頻部分07#載入的音樂不會全部放到內(nèi)容中,而是以流的形式播放的,即在播放的時候才會一點點從文件中讀取。08track=pygame.mixer.music.load(file_name)09#播放載入的音樂。該函數(shù)立即返回,音樂播放在后臺進行。10pygame.mixer.music.play()11time.sleep(300)12pygame.mixer.music.stop()任務(wù)一認識爬蟲及Python的安裝–任務(wù)拓展1.爬蟲與反爬蟲很多網(wǎng)絡(luò)爬蟲對網(wǎng)頁的爬取能力很差,現(xiàn)在的網(wǎng)站會采取一些防爬蟲措施來阻止爬蟲的不當爬取行為。任務(wù)一認識爬蟲及Python的安裝–任務(wù)拓展1.爬蟲與反爬蟲對于采取了防爬蟲措施的網(wǎng)站,爬蟲程序需要采取相應(yīng)的應(yīng)對策略,才能成功地爬取到網(wǎng)站上的數(shù)據(jù)。任務(wù)一認識爬蟲及Python的安裝–任務(wù)拓展1.爬蟲與反爬蟲使用代理IP

使用代理IP的一個好處是可以匿名保護,使用數(shù)據(jù)中心代理后,使用的IP地址將是您選擇的服務(wù)器的IP地址,隱藏您的真實IP地址,從而保護您的互聯(lián)網(wǎng)隱私,使得服務(wù)器認為是真實的用戶在訪問,使得服務(wù)器認定不是爬蟲行為。任務(wù)一認識爬蟲及Python的安裝–任務(wù)拓展1.爬蟲與反爬蟲偽裝User-agentUser-agent表示用戶代理,是HTTP協(xié)議中的一個字段,其作用是描述發(fā)出HTTP請求的終端信息。每個正規(guī)的爬蟲都有固定的User-agent,只要將這個字段設(shè)為知名的用戶代理,就能夠成功偽裝。任務(wù)一認識爬蟲及Python的安裝–任務(wù)拓展1.爬蟲與反爬蟲降低訪問頻率User-agent表示用戶代理,是HTTP協(xié)議中的一個字段,其作用是描述發(fā)出HTTP請求的終端信息。每個正規(guī)的爬蟲都有固定的User-agent,只要將這個字段設(shè)為知名的用戶代理,就能夠成功偽裝。任務(wù)二將請求到的網(wǎng)頁保存到本地--任務(wù)演示本任務(wù)在Python環(huán)境搭建的基礎(chǔ)上,使用urllib庫,將請求到的網(wǎng)頁保存到本地。任務(wù)二將請求到的網(wǎng)頁保存到本地–知識準備安裝和配置MySQL數(shù)據(jù)庫簡單使用urllib庫1簡單使用urllib庫urllib是一個http請求的Python自帶的標準庫,無需安裝,直接可以用。并且提供了如下功能:網(wǎng)頁請求、響應(yīng)獲取、代理和cookie設(shè)置、異常處理、URL解析,可以說是一個比較強大的模塊。urllib.request的GET請求是如下方式:urllib.request.urlopen(url,data,timeout)url:請求地址data:請求數(shù)據(jù)timeout:請求超時時間data和timeout為可選參數(shù),可以為空,也就是說可以不寫。1簡單使用urllib庫【例】使用urllib庫請求網(wǎng)頁。importurllib.requestresponse=urllib.request.urlopen('/u_13389043/3153863')print("此時的數(shù)據(jù)類型為:"+str(type(response)))response=response.read().decode('utf-8')print("編碼以后的數(shù)據(jù)類型為:"+str(type(response)))1簡單使用urllib庫【例】使用urllib庫請求網(wǎng)頁。importurllib.requestresponse=urllib.request.urlopen('/u_13389043/3153863')print("此時的數(shù)據(jù)類型為:"+str(type(response)))response=response.read().decode('utf-8')print("編碼以后的數(shù)據(jù)類型為:"+str(type(response)))2安裝和配置MySQL數(shù)據(jù)庫網(wǎng)絡(luò)爬蟲采集到數(shù)據(jù)以后,一般是放到數(shù)據(jù)庫進行保存。數(shù)據(jù)庫的選擇一般有SQLite、MySQL、以及MongoDB等數(shù)據(jù)庫。這里首先介紹MySQL數(shù)據(jù)庫的安裝。這里以Mysql社區(qū)版mysql-installer-community-,在64位系統(tǒng)Windows系統(tǒng)安裝為例,給出其具體的安裝步驟。2安裝和配置MySQL數(shù)據(jù)庫1)雙擊打開msi安裝包,勾選接收許可安裝條款,單擊“Next”按鈕后進入安裝選擇,如圖所示。2安裝和配置MySQL數(shù)據(jù)庫2)在彈出框中選擇64位版本,如圖所示。2安裝和配置MySQL數(shù)據(jù)庫3)在下方左側(cè)欄內(nèi)選擇需要安裝的程序,單擊右箭頭移至安裝欄內(nèi),如圖所示。2安裝和配置MySQL數(shù)據(jù)庫4)單擊“Next”按鈕后,會檢測系統(tǒng)上是否安裝有相關(guān)依賴的軟件,若沒有安裝,則會出現(xiàn)類似下圖所示的界面,如圖所示。2安裝和配置MySQL數(shù)據(jù)庫5)單擊“Next”按鈕后,進入安裝確認步驟,將被安裝的程序會顯示在框內(nèi),單擊“Execute”按鈕將開始安裝過程,如圖所示。2安裝和配置MySQL數(shù)據(jù)庫6)安裝完成后,還需配置服務(wù),一般用戶類型選擇“DevelopmentMachine”,MySQL的默認端口為3306,如圖所示。2安裝和配置MySQL數(shù)據(jù)庫7)設(shè)置root賬戶的密碼,可添加一個具有普通用戶權(quán)限的MySQL用戶賬戶,也可不添加,如圖所示。2安裝和配置MySQL數(shù)據(jù)庫8)勾選“ConfigureMySQLServerasaWindowsService”后將以系統(tǒng)用戶運行Windows服務(wù),在Windows下MySQL默認服務(wù)名為mysql56,如圖所示。2安裝和配置MySQL數(shù)據(jù)庫9)最后進入服務(wù)配置應(yīng)用步驟,單擊“Execute”按鈕將開始執(zhí)行,如圖所示。2安裝和配置MySQL數(shù)據(jù)庫10)執(zhí)行成功的服務(wù)配置將變?yōu)榫G色的勾選狀態(tài),單擊“Finish”按鈕完成配置過程,如圖所示。2安裝和配置MySQL數(shù)據(jù)庫11)打開“環(huán)境變量”對話框。右鍵單擊“我的電腦”圖標,單擊“高級系統(tǒng)設(shè)置”按鈕,在彈出的“系統(tǒng)屬性”對話框中單擊“環(huán)境變量”按鈕,即可彈出的“環(huán)境變量”對話框,如圖所示。2安裝和配置MySQL數(shù)據(jù)庫12)新建環(huán)境變量“MYSQL_HOME”,變量值填寫“C:\ProgramFiles\MySQL\MySQLServer5.6”,其中MySQL默認安裝在C:\ProgramFiles路徑下,如圖所示。2安裝和配置MySQL數(shù)據(jù)庫13)在“Path”變量后面添加“%MYSQL_HOME%\bin”,如圖所示。2安裝和配置MySQL數(shù)據(jù)庫14)檢驗環(huán)境配飾是否生效,使用管理員權(quán)限運行命令提示符,使用“netstartmysql56”命令啟動MySQL服務(wù),使用“netstopmysql56”可關(guān)閉MySQL服務(wù),如圖所示。任務(wù)二將請求到的網(wǎng)頁保存到本地–任務(wù)實施對目標網(wǎng)頁url=“/2019/09/04/ARTI9r6wRsrNhbZv4DwlWC5T190904.shtml”使用urllib庫發(fā)起請求,將網(wǎng)頁的響應(yīng)數(shù)據(jù)保存到本地,然后實現(xiàn)本地可以瀏覽訪問。這里可以將該網(wǎng)頁的css文件也發(fā)起一次請求,可以將本地文件也保存到本地。這樣,這里一共需要兩次發(fā)起網(wǎng)頁請求,兩次保存網(wǎng)頁的操作,這里給出實例代碼。importurllib.requestlist1=['/2019/09/04/ARTI9r6wRsrNhbZv4DwlWC5T190904.shtml','/photoAlbum/templet/common/DEPA1452765360136771/style_arti.css']defsave_data():foriinrange(0,2):response=urllib.request.urlopen(list1[i])response=response.read().decode('utf-8')ifi==0:f=open("./gzzq.html","w",encoding="utf-8")#保存網(wǎng)頁f.write(response)else:f=open("./index.css","w",encoding="utf-8")#保存CSSf.write(response)save_data()任務(wù)二將請求到的網(wǎng)頁保存到本地–任務(wù)實施對目標網(wǎng)頁url=“/2019/09/04/ARTI9r6wRsrNhbZv4DwlWC5T190904.shtml”使用urllib庫發(fā)起請求,將網(wǎng)頁的響應(yīng)數(shù)據(jù)保存到本地,然后實現(xiàn)本地可以瀏覽訪問。這里可以將該網(wǎng)頁的css文件也發(fā)起一次請求,可以將本地文件也保存到本地。這樣,這里一共需要兩次發(fā)起網(wǎng)頁請求,兩次保存網(wǎng)頁的操作,這里給出實例代碼。

雖然將網(wǎng)頁css保存到了本地,打開網(wǎng)頁是可以正常瀏覽的,應(yīng)為原始網(wǎng)頁只有一個css文件,且該文件使用的是絕對路徑的網(wǎng)址,如圖所示。任務(wù)二將請求到的網(wǎng)頁保存到本地–任務(wù)實施

雖然將網(wǎng)頁css保存到了本地,打開網(wǎng)頁是可以正常瀏覽的,應(yīng)為原始網(wǎng)頁只有一個css文件,且該文件使用的是絕對路徑的網(wǎng)址,如圖所示。程序的運行結(jié)果如圖。任務(wù)二將請求到的網(wǎng)頁保存到本地–任務(wù)拓展

雖然將網(wǎng)頁css保存到了本地,打開網(wǎng)頁是可以正常瀏覽的,應(yīng)為原始網(wǎng)頁只有一個css文件,且該文件使用的是絕對路徑的網(wǎng)址,如圖所示。使用urllib庫向指定網(wǎng)址“/get”發(fā)起請求,將返回的響應(yīng)頭保存到數(shù)據(jù)庫,使用下面代碼創(chuàng)建數(shù)據(jù)庫表。--數(shù)據(jù)庫:`httpbin`--------表的結(jié)構(gòu)`httpbindata`--CREATETABLEIFNOTEXISTS`httpbindata`(`id`int(20)NOTNULLAUTO_INCREMENT,`data`textNOTNULL,PRIMARYKEY(`id`))ENGINE=MyISAMDEFAULTCHARSET=utf8AUTO_INCREMENT=2;----轉(zhuǎn)存表中的數(shù)據(jù)`httpbindata`--任務(wù)二將請求到的網(wǎng)頁保存到本地–任務(wù)拓展這里給出Python的代碼。importpymysqlimporturllib.requesturl='/get'response=urllib.request.urlopen(url)response=response.read().decode('utf-8')conn=pymysql.Connect(host='',port=3306,user='root',password='root',db='httpbin')cursor=conn.cursor()#獲取游標sql="insertintohttpbindata(data)values(%s);"print(response)try:cursor.execute(sql,(response))mit()print("數(shù)據(jù)插入成功")exceptExceptionasresult:print("數(shù)據(jù)插入失敗:"+str(result))謝謝項目二使用正則表達式提取網(wǎng)頁中內(nèi)容

項目要

求本項目學(xué)習(xí)正則相關(guān)的知識,將保存到本地的網(wǎng)頁使用正則表達式提取有用的信息。

項目分

析要實現(xiàn)此任務(wù),需要有HTML、CSS、JSON、JavaScript等知識,同時還需要了解HTTP請求的相關(guān)知識,網(wǎng)頁信息獲取過程需要一些解析工具以及正則表達式的知識,同時還需要網(wǎng)頁開發(fā)相關(guān)的知識。本項目介紹Web初步知識、HTTP請求、正則表達式等。

項目目

標【知識目標】熟悉HTML,掌握CSS和Javascipt的基礎(chǔ)知識以及Re正則表達式?!灸芰δ繕恕繒褂谜齽t表達式提取網(wǎng)頁中的內(nèi)容?!舅刭|(zhì)目標】提高學(xué)生的發(fā)現(xiàn)問題、分析問題、解決問題的能力。

知識導(dǎo)

圖任務(wù)一網(wǎng)頁展示偉大抗疫精神--任務(wù)演示本任務(wù)是使用CSS基礎(chǔ)知識,展示偉大抗疫精神,下圖圖片實現(xiàn)的效果。任務(wù)一

認識爬蟲及Python的安裝–知識準備CSS基礎(chǔ)知識CSS樣式選擇器HTML基礎(chǔ)知識1.HTML基礎(chǔ)知識HTML(HyperTextMarkupLanguage)稱為超文本標記語言,是一種描述文檔結(jié)構(gòu)的標記語言,它是一種應(yīng)用非常廣泛的網(wǎng)頁格式,也是最早被用來顯示網(wǎng)頁的語言之一。注意:HTML不是編程語言,它只是一門網(wǎng)頁標記語言。Web瀏覽器能讀懂HTML文件,并以網(wǎng)頁顯示顯示出來。1.HTML基礎(chǔ)知識(1)標記的格式HTML中的標記的主要作用是用來控制網(wǎng)頁的顯示方式,標記一般有<…>和</…>組成,<…>一般是標記的開頭,中間的省略號表示其他字符串,</…>表示標記的結(jié)束。標記分為雙標記和單標記。雙標記要求<…>和</…>成對出現(xiàn),典型的標記如下:<html>…</html><html>表示一個網(wǎng)頁的開始,</html>表示網(wǎng)頁的結(jié)束,中間的省略號表示網(wǎng)頁的具體內(nèi)容,包含若干除<html>…</html>之外的標記和若干文字、圖片、視頻等內(nèi)容。<head>…</head><head>表示一個網(wǎng)頁的頭部,</head>表示網(wǎng)頁頭部結(jié)束,中間的省略號表示一個網(wǎng)頁的頭部的內(nèi)容。1.HTML基礎(chǔ)知識<title>…</title><title>表示一個網(wǎng)頁的標題的開始,</title>表示一個網(wǎng)頁的標題的結(jié)束。中間的省略號表示這個網(wǎng)頁標題的實際內(nèi)容,該內(nèi)容要求是文字內(nèi)容。<body>…</body><body>表示一個網(wǎng)頁主體的開始,</body>表示一個網(wǎng)頁主體的結(jié)束,中間的省略號表示這個網(wǎng)頁主體的實際內(nèi)容,這個內(nèi)容可以包含若干標記和文字、圖片、視頻等內(nèi)容。1.HTML基礎(chǔ)知識(2)標記的使用可以按照以下三種方式使用標記。1)<標記名>文本或超文本</標記名>舉例如下:<title>百度首頁</title>注意:超文本是用超鏈接的方法,將各種不同的位置的文字信息組織在一起,形成一個網(wǎng)狀文本。這里超練級是指鏈接的載體和鏈接的目標地址兩個部分的內(nèi)容。鏈接的載體指的是顯示鏈接的部分,即包含超鏈接的文字或圖像。鏈接的目標是指單擊超鏈接后所顯示的內(nèi)容。例如<ahref=“/”>百度</a>就構(gòu)成了一個超鏈接。2)<標記名屬性名1=“屬性值1”屬性名2=“屬性值2”>文本或超文1.HTML基礎(chǔ)知識3)<標記名>舉例如下:<hr>該標簽表示在HTML頁面中創(chuàng)建一條水平線。注意:HTML標記及屬性中字母是不區(qū)分大小寫的,標記名與左尖括號之間是不能留空白的,標記中用到雙引號的地方都是英文中的引號。2.CSS基礎(chǔ)知識CSS指層疊樣式表(CascadingStyleSheets),同樣CCS也不是編程語言,CSS用來告訴瀏覽器如何指定樣式、布局等。(1)CSS樣式表的分類在HTML中使用CSS樣式,主要有三種做法:1)行內(nèi)式設(shè)置HTML標簽的時候,設(shè)置該標簽的style屬性,style屬性就是包含了樣式。其一般格式為:<標簽名style=”屬性1:值1;…屬性n:值n;”>內(nèi)容</標簽名>舉例如下:<pstyle=”font-size:16px;color:red”>這是一段文字</p>2.CSS基礎(chǔ)知識如果我們把它放到一個網(wǎng)頁中,會是什么樣的一個效果呢?<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>我的首頁</title></head><body><pstyle="font-size:16px;color:red">這是一段文字</p></body></html>2.CSS基礎(chǔ)知識運行程序,效果如下。2.CSS基礎(chǔ)知識2)內(nèi)部樣式表什么是內(nèi)部樣式表呢?內(nèi)標樣式表是在HTML中的head標簽中定義style標簽,在其中書寫樣式。內(nèi)部樣式表意味著CSS樣式存在HTML的內(nèi)部,作用范圍是只對所在的網(wǎng)頁有效。2.CSS基礎(chǔ)知識

<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>我的首頁</title><styletype="text/css">p{font-size:20px;color:blue;}</style></head><body><p>這是一段文字</p></body></html>注意:內(nèi)部樣式表只是實現(xiàn)了CSS和HTML的部分分離,沒有實現(xiàn)完全分離。2.CSS基礎(chǔ)知識3)外部樣式表外部樣式表顧名思義,是將樣式表和HTML文件完全分離。在HTML文件內(nèi)部,一般借助于link標簽將CSS引入。index.html文件的內(nèi)容如下:<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>我的首頁</title><linkrel="stylesheet"type="text/css"href="style.css"></head><body><p>這是一段文字</p></body></html>2.CSS基礎(chǔ)知識3)外部樣式表style.css文件的內(nèi)容如下:p{font-size:24px;color:green;text-align:center;}注意:index.html文件和style.css文件應(yīng)該確保在同一個目錄下。外部樣式表可以同時作用到多個HTML文件。運行程序,結(jié)果如下:3.CSS選擇器3)外部樣式表什么是選擇器呢?每一條css樣式定義由兩部分組成,形式如下:選擇器{樣式}在{}之前的部分就是“選擇器”。“選擇器”指明了{}中的“樣式”的作用對象,也就是“樣式”作用于網(wǎng)頁中的哪些元素。CSS主要四種基本選擇器,他們分別是標簽選擇器、類選擇器、ID選擇器以及通用選擇器。3.CSS選擇器(1)CSS標簽選擇器一個完整的HTML頁面是有很多不同的標簽組成,而標簽選擇器,則是決定哪些標簽采用相應(yīng)的CSS樣式。CSS標簽選擇器主要有div、h1、p、body、ul、li等等,下面通過一個例子來加以說明。3.CSS選擇器<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><styletype="text/css">h1{text-align:center;}p{text-indent:2em;line-height:26px;font-size:16px;}</style><title>韓國使用高科技公交車候車亭對抗新冠疫情</title></head><body><h1>韓國使用高科技公交車候車亭對抗新冠疫情</h1><p>韓國正在使用高科技的公共汽車候車亭來防止Covid-19的傳播。這10個"智能候車亭"配備了用于檢查溫度的外部熱像儀和內(nèi)部的紫外線消毒燈。首都首爾市城東區(qū)主要公交線路沿線都安裝了太陽能供電的候車亭。乘客必須站在一個自動熱成像攝像頭前,只有當檢測到溫度低于99.5F時,滑動門才會打開。下方還安裝有另一個攝像頭,用于檢測兒童。</p><p>玻璃板結(jié)構(gòu)內(nèi)有紫外線燈,還有空調(diào)、洗手液分配器和免費無線網(wǎng)絡(luò)。此外,還設(shè)有大型顯示屏,顯示公交車的預(yù)計到站時間和附近的交通情況。即使有這些預(yù)防措施,也建議乘客隨時戴上口罩,并保持至少一米的距離。每個公共汽車候車亭每天約有300至400人使用。</p></body></html>3.CSS選擇器運行程序,結(jié)果如下:3.CSS選擇器(2)類選擇器類選擇用使用"."(英文點號)進行標識,后面緊跟類名。.news_title{text-align:center;}3.CSS選擇器運行程序,結(jié)果如下:3.CSS選擇器(3)CSS的ID選擇器類選擇用使用"#"(英文點號)進行標識,后面緊跟ID名。#news_title{text-align:center;}3.CSS選擇器運行程序,結(jié)果如下:3.CSS選擇器(4)通用選擇器通用選擇器可以選擇頁面上的所有元素,并對它們應(yīng)用樣式,用*來表示,下面通過一個例子加以說明。3.CSS選擇器運行程序,結(jié)果如下:任務(wù)一認識爬蟲及Python的安裝–任務(wù)實施

根據(jù)前面所學(xué)習(xí)的知識,我們這里設(shè)計一個網(wǎng)頁,來對中國偉大抗疫精神作一個展示,這里給出參考代碼。參考代碼請參考教材。任務(wù)一認識爬蟲及Python的安裝–任務(wù)拓展

有了CSS的基本知識以后,這里再簡單介紹一下JavaScript的基礎(chǔ)知識。JavaScript語言的引入主要有網(wǎng)頁中直接插入和外部引入兩種方式。(1)網(wǎng)頁中直接插入任務(wù)一認識爬蟲及Python的安裝–任務(wù)拓展

有了CSS的基本知識以后,這里再簡單介紹一下JavaScript的基礎(chǔ)知識。JavaScript語言的引入主要有網(wǎng)頁中直接插入和外部引入兩種方式。(1)網(wǎng)頁中直接插入任務(wù)一認識爬蟲及Python的安裝–任務(wù)拓展運行程序,結(jié)果如圖所示。任務(wù)一認識爬蟲及Python的安裝–任務(wù)拓展

(2)網(wǎng)頁中從外部引入JavaScript代碼

引用外部JavaScript代碼,可以是JavaScript代碼和HTML文件相分離、一個JavaScript文件可被多個HTML文件使用,同時使得JavaScript代碼的維護也更加方便。外部引用JavaScript文件,是使用script的src屬性,設(shè)置JavaScript文件的URL就可以了。<scriptsrc=“xxx.js”></script>任務(wù)一認識爬蟲及Python的安裝–任務(wù)拓展把上個例子中的JavaScript代碼抽成一個JavaScript文件,名字為demo.js,具體代碼如下:

varnum=0;functionfun(id){vars=document.getElementById(id).value;num=num+1;alert(s+"我被點擊了"+num+"次");}任務(wù)一認識爬蟲及Python的安裝–任務(wù)拓展<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><scriptsrc="demo.js"></script>為button綁定點擊事件:<divclass="box1"><inputtype="button"onclick="fun(this.id)"id="a"class="btn1"value="統(tǒng)計點擊次數(shù),請點我"></div></body>任務(wù)一認識爬蟲及Python的安裝–任務(wù)拓展<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><scriptsrc="demo.js"></script>為button綁定點擊事件:<divclass="box1"><inputtype="button"onclick="fun(this.id)"id="a"class="btn1"value="統(tǒng)計點擊次數(shù),請點我"></div></body>任務(wù)一認識爬蟲及Python的安裝–任務(wù)拓展運行程序,結(jié)果如下:任務(wù)二使用正則表達式提取指定的內(nèi)容--任務(wù)演示本任務(wù)是給定了一個字符文本,該文本由若干英文單詞組成,每個英文單詞由空格進行了分割,請使用正則表達式將所有的單詞給提取出來,如圖所示。任務(wù)二將請求到的網(wǎng)頁保存到本地–知識準備正則表達式的使用正則表達式的基本語法1正則表達式的基本語法Python語言通過標準庫中的re模塊支持正則表達式Re模塊提供了一些根據(jù)正則表達式進行查找、替換、分割字符串的函數(shù),這些函數(shù)使用一個正則表達式作為第一個參數(shù)。Re模塊常用的函數(shù)如表所示。函數(shù)描述match(pattern,string,flags=0)根據(jù)pattern從string的頭部開始匹配字符串,只返回第1次匹配成功的對象;否則,返回Nonefindall(pattern,string,flags=0)根據(jù)pattern在string中匹配字符串。如果匹配成功,返回包含結(jié)果的列表;否則,返回空列表。當pattern中有分組時,返回包含多個元組的列表,每個元組對應(yīng)1個分組。Falgs表示規(guī)則選項,規(guī)則選項用于輔助匹配。sub(pattern,repl,string,count=0)根據(jù)指定的正則表達式,替換源字符中的子串。Pattern是一個正則表達式,repl是用于替換的字符串,string是源字符串。如果count等于0,則返回sring中匹配的的所有結(jié)果;如果count大于0,則返回前count個匹配結(jié)果。subn(pattern,repl,string,count=0)作用和sub()相同,返回一個二元的元組。第1個元素是替換結(jié)果,第2個元素是替換的次數(shù)。search(pattern.flags=0)根據(jù)pattern在string中匹配字符串,只返回第一次匹配成功的對象。如果匹配失敗,返回None。complie(pattern,flags=0)編譯正則式pattern,返回1個pattern的對象。split(pattern,string,maxplit=0)根據(jù)pattern分隔string,maxplit表示最大的分隔數(shù)。escape(pattern)匹配字符串中的特殊字符,如*、+、?等1正則表達式的基本語法(1)match()方法re.match()嘗試從字符串的起始位置開始匹配一個模式,如果不是起始位置匹配成功的話,就返回None,否則返回一個對象,函數(shù)原型為:re.match(pattern,string,flag=0)函數(shù)的參數(shù)說明如下表所示:參數(shù)描述pattern匹配的正則表達式string要匹配的字符串flags標志位,用于控制正則表達式的匹配方式,如:是否區(qū)分大小寫,多行匹配等。也可以理解成修飾符,具體修飾符參閱表2.6所示。1正則表達式的基本語法(1)match()方法

正則表達式在使用中還用到修飾符,修飾符也叫標記,標記用于指定額外的匹配策略。標記不寫在正則表達式里,標記位于表達式之外,常用的正則表達式修飾符如表所示。修飾符描述re.I使匹配對大小寫不敏感re.L做本地化識別匹配re.M多行匹配,影響^和$re.S使.匹配包括換行在內(nèi)的所有字符re.U根據(jù)Unicode字符集解析字符。這個標志影響\w,\W,\b,\B.re.X該標志通過給予你更靈活的格式以便你將正則表達式寫得更易于理解。1正則表達式的基本語法對match()函數(shù)的使用,舉例如下。01importre02str1=""03str2="www"04str3="com"05print(re.match(str2,str1,re.I))06print(re.match(str3,str1))運行程序,結(jié)果如圖:1正則表達式的基本語法(2)search()方法search掃描整個字符串并返回第一個成功的匹配,如果匹配失敗,則返回None,該方法的原型為:re.search(pattern,string,flags=0)pattern參數(shù)表示正則中的模式字符串;string參數(shù)表示要被查找替換的原始字符串;flags參數(shù)表示標志位,用于控制正則表達式的匹配方式。1正則表達式的基本語法(2)search()方法看一個例子:01importre02str1=""03str2="www"04str3="com"05str4="baidu"06print(re.search(str2,str1,re.I))07print(re.search(str3,str1))08print(re.search(str4,str1))運行程序,結(jié)果如圖。1正則表達式的基本語法(3)findall()方法findall方法與search方法比較類似,findall方法可以遍歷匹配,可以獲取字符串中所有匹配的字符串,將找到的結(jié)果返回到一個列表中,如果找不到,返回的是一個空列表,該函數(shù)的原型為:findall(pattern,string,flags=0)pattern參數(shù)表示正則中的模式字符串,就是正則表達式;string參數(shù)表示要被查找替換的原始字符串;flags參數(shù)表示標志位,用于控制正則表達式的匹配方式。注意:findall()函數(shù)是逐行匹配的。返回string中所有與pattern相匹配的全部字串,返回形式為列表。1正則表達式的基本語法看一個例子:01importre02str1=",WWW.G.CN"03str2="www"04str3="com"05str4="baidu"06print(re.findall(str2,str1,re.I))07print(re.findall(str3,str1))08print(re.findall(str4,str1))09print(re.findall("GG",str1))運行程序,結(jié)果如下:1正則表達式的基本語法(4)sub()函數(shù)Python的re模塊提供了re.sub用于替換字符串中的匹配項,該函數(shù)將匹配上的字符串替換成指定的字符串,返回新的字符串,該函數(shù)的原型為:sub(pattern,repl,string,count=0,flags=0)參數(shù)說明:pattern:正則表達式。repl:替換的字符串,也可以是一個函數(shù)。string:要被查找替換的原始字符串。count:模式匹配后替換的最大次數(shù),默認0表示替換所有的匹配。flags:編譯時用的匹配模式,數(shù)字形式。注意:sub()函數(shù)的前三個參數(shù)為必填參數(shù),后兩個參數(shù)為可選參數(shù)。1正則表達式的基本語法舉例如下:01importre02phone="400-889-9315#這是美的售后客服電話"03#刪除注釋04num=re.sub(r'#.*$',"",phone)05print("美的客服電話為:",num)06#將非數(shù)字的‘-’去掉07num=re.sub(r'\D',"",phone)08print("美的客服電話為:",num)1正則表達式的基本語法舉例如下:01importre02phone="400-889-9315#這是美的售后客服電話"03#刪除注釋04num=re.sub(r'#.*$',"",phone)05print("美的客服電話為:",num)06#將非數(shù)字的‘-’去掉07num=re.sub(r'\D',"",phone)08print("美的客服電話為:",num)注意:python中,字符串前面加r或者R前綴,目的是禁用轉(zhuǎn)義符“\”的功能。運行程序,結(jié)果如圖所示。1正則表達式的基本語法(5)compile()函數(shù)

在Pytohn使用正則表達式時,re模塊內(nèi)部會做兩件事情:第一,是對正則表達式進行編譯,如果此時正則表達式不合法,就會報錯;第二,用編譯好的正則表達式去匹配字符串。如果一個正則表達式使用的頻率很高,那么,我們就有必要對該正則表達式先確保編譯好,然后使用的使用的時候,告訴編譯器不需要再編譯了,可以執(zhí)行匹配操作了。這樣一來,執(zhí)行效率就得到了提高。Python的re模塊,針對這個應(yīng)用場景,為我們提供了compile()函數(shù)。1正則表達式的基本語法01importre02re_telephone=pile(r'^(\d{3})-(\d{3,8})$')#編譯03A=re_telephone.match('010-12345').groups()#使用04print(A)#結(jié)果('010','12345')05B=re_telephone.match('010-8086').groups()#使用06print(B)#結(jié)果('010','8086')運行程序,結(jié)果如圖。任務(wù)二將請求到的網(wǎng)頁保存到本地–任務(wù)實施

給定了一個字符串str,該字符串由若干英文單詞組成,每個英文單詞由空格進行了分割,請使用正則表達式將所有的單詞給提取出來。importres='Weshouldneverrememberthebenefitswehaveofferednorforgetthefavorreceived'pat=r'\s?([a-zA-Z]+)'r=re.findall(pat,s)print(r)運行程序,結(jié)果如下:Weshouldneverrememberthebenefitswehaveofferednorforgetthefavorreceived.上面的英語翻譯為如下:自己的好事別去提,別人的恩惠要銘記。這句話告訴我們,自己做了好事,別到處宣揚,不用你說,別人會看在眼里的,也許當下沒有得到回報,但你所做的好事,在關(guān)鍵時刻會助你一臂之力。任務(wù)二將請求到的網(wǎng)頁保存到本地–任務(wù)拓展

將前面?zhèn)ゴ罂挂呔窬W(wǎng)頁的的“生命至上、舉國同心、舍生忘死、尊重科學(xué)、命運與共”二十字精神使用Re正則表達式給提取出來。任務(wù)二將請求到的網(wǎng)頁保存到本地–任務(wù)實施

雖然將網(wǎng)頁css保存到了本地,打開網(wǎng)頁是可以正常瀏覽的,應(yīng)為原始網(wǎng)頁只有一個css文件,且該文件使用的是絕對路徑的網(wǎng)址,如圖所示。程序的運行結(jié)果如圖。任務(wù)二將請求到的網(wǎng)頁保存到本地–任務(wù)拓展

雖然將網(wǎng)頁css保存到了本地,打開網(wǎng)頁是可以正常瀏覽的,應(yīng)為原始網(wǎng)頁只有一個css文件,且該文件使用的是絕對路徑的網(wǎng)址,如圖所示。

使用urllib庫向指定網(wǎng)址“/get”發(fā)起請求,將返回的響應(yīng)頭保存到數(shù)據(jù)庫,使用下面代碼創(chuàng)建數(shù)據(jù)庫表。--數(shù)據(jù)庫:`httpbin`--------表的結(jié)構(gòu)`httpbindata`--CREATETABLEIFNOTEXISTS`httpbindata`(`id`int(20)NOTNULLAUTO_INCREMENT,`data`textNOTNULL,PRIMARYKEY(`id`))ENGINE=MyISAMDEFAULTCHARSET=utf8AUTO_INCREMENT=2;----轉(zhuǎn)存表中的數(shù)據(jù)`httpbindata`--任務(wù)二將請求到的網(wǎng)頁保存到本地–任務(wù)拓展這里給出Python的代碼。importpymysqlimporturllib.requesturl='/get'response=urllib.request.urlopen(url)response=response.read().decode('utf-8')conn=pymysql.Connect(host='',port=3306,user='root',password='root',db='httpbin')cursor=conn.cursor()#獲取游標sql="insertintohttpbindata(data)values(%s);"print(response)try:cursor.execute(sql,(response))mit()print("數(shù)據(jù)插入成功")exceptExceptionasresult:print("數(shù)據(jù)插入失?。?+str(result))任務(wù)二將請求到的網(wǎng)頁保存到本地–任務(wù)拓展運行程序,結(jié)果如圖。謝謝項目三網(wǎng)絡(luò)爬蟲初步之爬取豆瓣電影TOP250欄目

項目要

求本項目將使用Urllib2框架將網(wǎng)頁內(nèi)容進行爬取,使用BeautiflSoup4將數(shù)據(jù)從HTML中提取出來,讓后將提取出來的數(shù)據(jù)放到EXCEL表格和SQLite數(shù)據(jù)庫中保存,從而實現(xiàn)數(shù)據(jù)的可持續(xù)化存儲。

項目分

析要完成項目任務(wù),用到了Urllib請求網(wǎng)頁,對接收到的響應(yīng)內(nèi)容使用BeautiflSoup4模塊進行提取,數(shù)據(jù)持久化存儲這里使用到了SQLite輕量級數(shù)據(jù)庫。

項目目

標【知識目標】熟悉Urllib,掌握BeautiflSoup4的基礎(chǔ)知識、SQLite和Excel的使用?!灸芰δ繕恕繒褂肬rllib請求網(wǎng)頁、會使用BeautiflSoup4框架提取網(wǎng)頁內(nèi)容,會使用Sqlite和Excel進行數(shù)據(jù)的持久化存儲?!舅刭|(zhì)目標】提高學(xué)生的發(fā)現(xiàn)問題、分析問題、解決問題的能力。

知識導(dǎo)

圖任務(wù)一Urllib框架請求網(wǎng)頁--任務(wù)演示本任務(wù)是使用Python內(nèi)置的HTTP請求庫Urllib向服務(wù)器發(fā)出HTTP請求,然后將請求的網(wǎng)頁進行打印輸出。任務(wù)一Urllib框架請求網(wǎng)頁–知識準備爬蟲開發(fā)的基本流程字符的編碼和解碼爬蟲開發(fā)的基本流程1.爬蟲開發(fā)的基本流程

根據(jù)網(wǎng)絡(luò)爬蟲開發(fā)的基本步驟是先向服務(wù)器發(fā)起HTTP請求,然后將請求到的網(wǎng)頁進行解析,最后將得到的數(shù)據(jù)進行保存,因此開發(fā)一個網(wǎng)路爬蟲的基本流程,可以總結(jié)如下:(1)準備工作通過瀏覽器查看分析目標網(wǎng)頁,學(xué)習(xí)編程基礎(chǔ)規(guī)范。(2)獲取數(shù)據(jù)通過HTTP庫向目標站點發(fā)起請求,請求可以包含額外的header等信息,如果服務(wù)器能正常響應(yīng),會得到一個Response,便是所要獲取的頁面內(nèi)容。1.爬蟲開發(fā)的基本流程(3)解析內(nèi)容

得到的內(nèi)容可能是HTML\JSON等格式,可以使用頁面解析庫、正則表達式等進行解析。(4)保存數(shù)據(jù)

保存形式多樣,可以存為文本,也可以保存到數(shù)據(jù)庫,或者保存特定格式的文件。2.Urllib框架的基本使用Urllib是Python內(nèi)置的HTTP請求庫,該庫主要用來請求網(wǎng)絡(luò)資源。Urllib庫主要有4個模塊,具體模塊功能如下:模塊功能備注urllib.request請求模塊,用于發(fā)起網(wǎng)絡(luò)請求

urllib.parse解析模塊,用于解析URL

urllib.error異常處理模塊,用于處理request引起的異常

urllib.robotparserrobots.txt用于解析robots.txt文件

【大家注意】在Python2.X中,有Urllib庫,也有Urllib2庫,但是在最新的Python3.X中,將Urllib2合并到了Urllib中,這個庫在我們爬取網(wǎng)頁的時候會經(jīng)常用到。Urllib庫不需要安裝,只要導(dǎo)入就可以使用了。2.Urllib框架的基本使用

(1)urllib.request模塊request模塊主要負責(zé)構(gòu)造和發(fā)起網(wǎng)絡(luò)請求,并在其中添加Headers(請求頭)、Proxy(IP代理)等。利用它可以模擬瀏覽器的請求發(fā)起過程。該模塊主要有發(fā)起網(wǎng)絡(luò)請求、操作Cookie、添加Headers、使用代理等功能。2.Urllib框架的基本使用1)發(fā)起網(wǎng)絡(luò)請求urllib.request中主要有urlopen()函數(shù),該函數(shù)的原型為:urllib.request.urlopen(url,data=None,[timeout,]*,cafile=None,capath=None,cadefault=False,context=None)url:需要訪問的網(wǎng)址data:Post提交的數(shù)據(jù),默認為None,發(fā)送一個GET請求到指定的頁面,當data不為None時,發(fā)送的是POST請求。Timeout請求的超時參數(shù),單位為秒??蛇x的cafile和capath參數(shù)為HTTPS請求指定一組可信的CA證書。cafile應(yīng)指向包含一系列CA證書的單個文件,而capath應(yīng)指向散列證書文件的目錄。cadefault參數(shù)被忽略。urlopen返回對象提供以下八個方法,如表所示。2.Urllib框架的基本使用方法功能read()對HTTPResponse類型數(shù)據(jù)進行操作,獲取返回的數(shù)據(jù)readline()對HTTPResponse類型數(shù)據(jù)進行操作,讀取一行readlines()對HTTPResponse類型數(shù)據(jù)進行操作,獲取多行fileno()對HTTPResponse類型數(shù)據(jù)進行操作close()對HTTPResponse類型數(shù)據(jù)進行操作info()返回HTTPMessage對象,表示遠程服務(wù)器返回的頭信息getcode()返回Http狀態(tài)碼。如果是http請求,200請求成功完成;404網(wǎng)址未找到geturl()返回請求的url

這里首先給出一個請求網(wǎng)頁的例子,使用了GET方法。01importurllib.request02url=''03response=urllib.request.urlopen(url)04print(response.read())2.Urllib框架的基本使用再來看一個GET請求的例子:01importurllib.request02importurllib.parse03response=urllib.request.urlopen("/get")04print(response.read().decode("utf-8"))運行程序,結(jié)果如下:{"args":{},"headers":{"Accept-Encoding":"identity","Host":"","User-Agent":"Python-urllib/3.7","X-Amzn-Trace-Id":"Root=1-5f2f5457-0d128690cb4472f0da71b820"},"origin":"2","url":"/get"}2.Urllib框架的基本使用給出使用urllib.request請求網(wǎng)頁超時的例子,如下所示。01importurllib.request02url=''03try:04response=urllib.request.urlopen(url,0.01)05print(response.read())06exceptExceptionasresult:07print(result)urlopen方法會默認會發(fā)送get請求,當傳入data參數(shù)時,則會發(fā)起POST請求。這里給出使用urllib.requst的POST請求的例子。01importurllib.request02url=''03data=b"Python"04try:05response=urllib.request.urlopen(url,data=data)06print(response.read())07exceptExceptionasresult:08print(result)2.Urllib框架的基本使用2)操作CookieCookie是瀏覽器支持的一種本地存儲機制。一般由服務(wù)端設(shè)置生成,在響應(yīng)請求時被自動存儲在瀏覽器中。urllib.request可以對Cookie進行操作,下面給出一個例子。01fromurllibimportrequest02fromhttpimportcookiejar03#創(chuàng)建一個cookie對象04cookie=cookiejar.CookieJar()05#創(chuàng)一個cookie處理器06cookies=request.HTTPCookieProcessor(cookie)07#以它為參數(shù),創(chuàng)建opener對象08opener=request.build_opener(cookies)09#使用這個opener來發(fā)請求10res=opener.open('/')11print(cookies.cookiejar)2.Urllib框架的基本使用3)設(shè)置代理運行爬蟲的時候,經(jīng)常會出現(xiàn)被封IP的情況,這時我們就需要使用ip代理來處理,urllib的IP代理的設(shè)置的范例代碼如下。01fromurllibimportrequest02proxy='46:9999'03proxy_support=request.ProxyHandler({'http':proxy})04opener=request.build_opener(proxy_support)05request.install_opener(opener)06result=request.urlopen('')07print(result)2.Urllib框架的基本使用4)添加Headers為了讓被爬取的網(wǎng)頁所在的服務(wù)器不被識別到是爬蟲,還可以偽裝請求頭。就是使用已有瀏覽器的請求頭,來請求網(wǎng)頁,具體的范例代碼如下。01importurllib.request02url=""03#注意:在urllib中這種的headers是需要是字典的04headers={"User-Agent":"Mozilla/5.0(WindowsNT6.1;WOW64;rv:6.0)Gecko/20100101Firefox/6.0"}05req=urllib.request.Request(url=url,headers=headers)06file=urllib.request.urlopen(req)07print(file.read())2.Urllib框架的基本使用(2)urllib.parse模塊url.parse模塊定義了url的標準接口,實現(xiàn)url的各種抽取。parse模塊的使用:url的解析,合并,編碼,解碼。url.parse模塊包含了urlparse函數(shù),該函數(shù)主要是用于解析url中的參數(shù),對url按照一定格式進行拆分或拼接。urlparse()把url拆分為6個部分,scheme(協(xié)議),netloc(域名),path(路徑),params(可選參數(shù)),query(連接鍵值對),fragment(特殊錨),并且以元組形式返回。下面通過一個例子來加以說明。2.Urllib框架的基本使用01fromurllibimportparse02url='/weixin_43831576/article/details/84582424?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-10.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-10.channel_param'03"""04url:待解析的url05scheme='':假如解析的url沒有協(xié)議,可以設(shè)置默認的協(xié)議,如果url有協(xié)議,設(shè)置此參數(shù)無效06allow_fragments=True:是否忽略錨點,默認為True表示不忽略,為False表示忽略07"""08result=parse.urlparse(url=url,scheme='http',allow_fragments=True)09print(result)10print(result.scheme)該段程序運行結(jié)果為:ParseResult(scheme='https',netloc='',path='/weixin_43831576/article/details/84582424',params='',query='utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-10.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-10.channel_param',fragment='')https2.Urllib框架的基本使用url.parse模塊還包含了對url的構(gòu)造函數(shù),該函數(shù)為urlunparse(),請看下面的實例。運行結(jié)果如圖所示:2.Urllib框架的基本使用(3)urllib.error模塊我們在爬蟲的時候發(fā)請求的時候難免出現(xiàn)各種錯誤,如訪問不到服務(wù)器或者訪問被禁止等等,出錯了之后urllib將錯誤信息封裝成了一個模塊對象中,這個模塊就叫error模塊。urllib.error模塊定義由urllib.request引發(fā)的異常類。異常處理主要用到兩個類,urllib.error.URLError和urllib.error.HTTPError。URLError是urrlib.error異常類的基類,具有reason屬性,返回錯誤原因??梢圆东@由urllib.request產(chǎn)生的異常。引起該異常的主要原因是服務(wù)器連接失敗、服務(wù)器故障、遠程URL地址不存在以及觸發(fā)了HTTPError等。下面通過一個例子加以說明。01fromurllibimportrequest,error02url="https://www.baidu.cpm/"03try:04response=request.urlopen(url)05print(response.read())06excepterror.URLErrorasresult:07print(result)2.Urllib框架的基本使用上面例子中,請求一個不存在的網(wǎng)址,就觸發(fā)了一個異常。運行結(jié)果如圖所示:下面我們通過請求一個存在的網(wǎng)址,但是請求的具體頁面不存在,我們使用這個HTTPError異常來進行捕獲一下,請看下面的例子。01fromurllibimportrequest,error02url="/s/1232323xxxx"03try:04response=request.urlopen(url)05print(response.read())06excepterror.HTTPErrorasresult:07print(result)2.Urllib框架的基本使用運行該程序,結(jié)果如圖。(4)urllib.robotparserrobots.txt模塊robots.txt一般指robots協(xié)議。robots協(xié)議也叫robots.txt(統(tǒng)一小寫)是一種存放于網(wǎng)站根目錄下的ASCII編碼的文本文件,它通常告訴網(wǎng)絡(luò)搜索引擎的漫游器(又稱網(wǎng)絡(luò)蜘蛛),此網(wǎng)站中的哪些

溫馨提示

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

評論

0/150

提交評論