Python程序設(shè)計 課件 第六章 模塊_第1頁
Python程序設(shè)計 課件 第六章 模塊_第2頁
Python程序設(shè)計 課件 第六章 模塊_第3頁
Python程序設(shè)計 課件 第六章 模塊_第4頁
Python程序設(shè)計 課件 第六章 模塊_第5頁
已閱讀5頁,還剩84頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第六章

模塊Python程序設(shè)計01模塊、包和庫02常用標(biāo)準(zhǔn)庫模塊的使用03基于第三方庫的爬蟲應(yīng)用04本章回顧01模塊、包和庫模塊是將功能封裝起來,使用時直接導(dǎo)入,可提高代碼開發(fā)效率、避免重復(fù)開發(fā),類似函數(shù)和類有封裝思想,但模塊是更復(fù)雜功能的封裝容器。以洗衣機為例,將洗衣機類比為模塊,人們使用洗衣機無需關(guān)心其工作原理,如同使用模塊無需了解其具體實現(xiàn),只需使用其功能。

在開發(fā)過程中,總是會接觸到模塊、包、庫等概念,這些概念簡單理解就是函數(shù)、類、變量等可以封裝在模塊(module)中,多個模塊可以封裝到包(package)里面,多個包可以封裝到庫(library)里面。模塊及其導(dǎo)入方式我們在第一章的時候,就接觸過模塊這個概念,那么到底什么是模塊呢?簡單理解,模塊就是一個包含了許多功能/方法的文件,即每一個.py文件都可以被當(dāng)成是一個模塊,模塊可以包含直接運行的代碼塊、類、函數(shù)或這幾種的組合。導(dǎo)入模塊的常用方式有三種,分別是import語句、from…import語句和from…import*語句。模塊及其導(dǎo)入方式import語句import語句用于導(dǎo)入整個模塊,支持導(dǎo)入多個模塊,語法格式如下:

以我們之前使用過的隨機生成整數(shù)的函數(shù)randint為例,由于需要使用randint函數(shù),而randint函數(shù)位于random模塊下,所以在使用randint函數(shù)之前需要使用語句“import

random”進(jìn)行模塊導(dǎo)入,如下圖所示。模塊及其導(dǎo)入方式如果在使用randint函數(shù)之前沒有導(dǎo)入random模塊,將會報NameError錯誤,提示“name'random'isnotdefined”,如下圖所示。模塊及其導(dǎo)入方式使用import語句的方式導(dǎo)入,因為是導(dǎo)入的整個模塊,所以需要使用“模塊名.函數(shù)名”的方式調(diào)用函數(shù)。除此之外,我們還可以使用as關(guān)鍵字對引入的模塊重命名,如下圖所示。模塊及其導(dǎo)入方式from…import語句模塊導(dǎo)入除了可以整個模塊都導(dǎo)入之外,也可以使用“from…import語句”只導(dǎo)入某個或某幾個函數(shù),語法格式如下:

使用此種方式導(dǎo)入,可以直接使用函數(shù)名進(jìn)行調(diào)用,還是以random模塊為例,如下圖所示。模塊及其導(dǎo)入方式from…import*語句使用“from…import*語句”可以導(dǎo)入一個模塊的所有內(nèi)容,舉例如下圖所示。自定義模塊自定義模塊就是根據(jù)業(yè)務(wù)需求自行定義的模塊,JupyterNotebook對自定義模塊的支持不是很友好,所以為了演示自定義模塊的使用,我們使用安裝Anaconda時自帶的另一個工具Spyder,如下圖所示。自定義模塊打開Spyder,在本地電腦上找一個合適的位置新建一個文件夾“test_module”,然后在此文件夾下新建一個“animal_act.py”文件(File->NewFile),然后將“案例7:馬戲團動物表演”中的【代碼5-12】粘貼進(jìn)去,單擊“運行按鈕”,看控制臺是否輸出正常,如下圖所示。此時“animal_act.py”文件就是一個自定義的模塊,想要引用這個模塊,分為同級目錄下引用和非同級目錄下引用兩種情況。自定義模塊同級目錄下引用我們在和它同一個文件夾“test_module”中新建一個“test.py”文件,此時如果想在“test.py”文件中引入自定義模塊“animal_act.py”,可以使用“import語句”直接導(dǎo)入,如下圖所示。自定義模塊非同級目錄下引用自定義模塊,直接用import無法找到,要借助sys模塊導(dǎo)入自定義模塊的path。以新建文件夾“test_module2”及其下的文件“test2.py”為例,若要在“test2.py”中引入非同級目錄下的自定義模塊“animal_act.py”,直接引入會報錯。如下圖所示自定義模塊正確的引用方式如下所示。此時單擊“運行按鈕”,可以正常運行“animal_act.py”文件下的start()方法了,運行結(jié)果如下圖所示。什么是包在Python中,包是一個分層次的文件目錄結(jié)構(gòu),是由模塊及子包、子包下的子包等組成的Python應(yīng)用環(huán)境。簡單理解包就是文件夾,但是該文件夾下必須包含“__init__.py”文件(__init__.py文件內(nèi)容可以為空),也就是“__init__.py”文件用于標(biāo)識當(dāng)前文件夾是否為一個包?!癬_init__.py”文件的作用可總結(jié)為:

與普通目錄的區(qū)別標(biāo)識,即用于標(biāo)識當(dāng)前文件夾是否為一個包。

編寫代碼,定義類、函數(shù)、變量等。包的使用為了更好地演示包的使用,我們還是使用Spyder工具。打開Spyder,在本地電腦上找一個合適的位置新建一個文件夾“testpackage”,在此文件夾下新建一個空的“__init__.py”文件(Spyder中新建文件:File->NewFile),然后再分別建文件“testpackage1.py”和“testpackage2.py”,此時目錄結(jié)構(gòu)如下圖所示。包的使用文件“testpackage1.py”和“testpackage2.py”中的代碼分別如下所示。包的使用然后我們在包外面新建一個文件“usepackage.py”,在文件中引入包并使用其中的模塊,如下所示運行“usepackage.py”文件,結(jié)果如下圖所示。標(biāo)準(zhǔn)庫與常用標(biāo)準(zhǔn)庫模塊庫是為了方便管理與安裝,將能夠?qū)崿F(xiàn)某一功能的模塊和包封裝而成的集合。根據(jù)庫是否已經(jīng)包含在Python官方安裝包中,可以將其分為標(biāo)準(zhǔn)庫和第三方庫。標(biāo)準(zhǔn)庫就是在Python官方安裝包中包含的庫,即安裝好Python后就具有的庫。標(biāo)準(zhǔn)庫中的模塊就是標(biāo)準(zhǔn)庫模塊,常用的標(biāo)準(zhǔn)庫模塊總結(jié)如表所示。第三方庫第三方庫就是在Python官方安裝包中不包含的庫,第三方庫中的模塊即第三方模塊。想要使用第三方庫中的模塊,需要先安裝第三方庫。第三方庫可以在命令行窗口使用pip命令在線安裝,也可以先下載相應(yīng)的第三方庫安裝程序,然后再進(jìn)行安裝。Python的一大優(yōu)勢就是有豐富且易用的第三方庫及模塊,省去了大量重復(fù)造輪子的時間,常用的第三方模塊有用于圖像處理的pillow,用于處理URL資源的requests,用于數(shù)據(jù)可視化的matplotlib等。02常用標(biāo)準(zhǔn)庫模塊的使用在實際開發(fā)中我們要經(jīng)常使用系統(tǒng)的標(biāo)準(zhǔn)庫模塊,比如我們想實現(xiàn)字符串匹配功能,可以使用正則表達(dá)式re模塊;想要實現(xiàn)時間相關(guān)功能,可以使用time模塊、datetime模塊;想要實現(xiàn)數(shù)學(xué)運算,可以使用math模塊;想要實現(xiàn)加密功能,可以使用hashlib模塊;本節(jié)我們將對上述模塊的基本使用進(jìn)行介紹。正則表達(dá)式是用于匹配字符串中字符組合的模式,可以用來檢查一個串是否含有某種子串、將匹配的子串替換或者從某個串中取出符合某個條件的子串等。正則表達(dá)式是用來匹配字符串的非常強大的工具,正則表達(dá)式主要由普通字符、元字符、重復(fù)限定符等組成。普通字符就是大小寫字母、數(shù)字等,用于匹配自身。正則表達(dá)式可以是單個字符、也可以是由上訴字符任意組合形成的字符集合。正則表達(dá)式介紹元字符元字符是構(gòu)造正則表達(dá)式的一種基本元素,常用的元字符總結(jié)如右表所示。了解了元字符之后,我們就可以開始寫一些簡單的正則表達(dá)式了,如11位手機號碼的正則表達(dá)式可表示如下:正則表達(dá)式介紹重復(fù)限定符上述舉例的表示手機號的正則表達(dá)式有很多重復(fù)的元字符“\d”,為了解決這一問題,正則表達(dá)式中提供了重復(fù)限定符。常用的重復(fù)限定符總結(jié)如表所示。正則表達(dá)式介紹有了上一個表中的重復(fù)限定符后,我們之前舉例的11位手機號碼的正則表達(dá)式就可以寫成如下的形式:分組

正則表達(dá)式中用小括號“()”來做分組,也就是小括號中的內(nèi)容作為一個整體。因此181號段電話號碼的正則表達(dá)式可表示如下:正則表達(dá)式介紹選擇字符還是以手機號碼為例,大家都知道,國內(nèi)的手機號都來自電信、聯(lián)通、移動三大運營商,而每個運營商提供的號段是不一樣的,以電信手機號為例,其號段有199、191、189、181、180、177、173、153和133。此時我們想寫電信手機號的正則表達(dá)式,就需要用到選擇字符或“|”來實現(xiàn),其正則表達(dá)式如下:區(qū)間正則表達(dá)式中提供中括號“[]”來表示區(qū)間條件,如數(shù)字0~9可以寫成[0-9],字母a~z可以寫成[a-z]。需要注意的是字符“^”在區(qū)間中不再表示字符串的開始,而是代表排除的意思,即匹配不在區(qū)間范圍內(nèi)的字符,如[^6]代表除6以外的字符。正則表達(dá)式介紹轉(zhuǎn)義字符在正則表達(dá)式中點“.”代表任意字符,而我們需要單純的使用點“.”這個字符的時候,就需要用到轉(zhuǎn)義字符了。正則表達(dá)式中的轉(zhuǎn)義字符就是在特殊字符之前加上反斜杠“\”,將其變?yōu)槠胀ㄗ址?。比如IP地址(,等)的正則表達(dá)式可表示如下:使用re模塊實現(xiàn)正則表達(dá)式Python中的re模塊用于實現(xiàn)正則表達(dá)式相關(guān)操作,本節(jié)主要介紹一些常用屬性和方法的使用。re模塊常用標(biāo)志位修飾符re模塊具有一些屬性用于做為標(biāo)志位的修飾符,用來控制正則表達(dá)式的匹配方式,如不區(qū)分大小寫、多行匹配等,總結(jié)如表所示。使用re模塊實現(xiàn)正則表達(dá)式re模塊常用方法compile()方法:pile()方法是用于優(yōu)化正則表達(dá)式的,可以將正則表達(dá)式轉(zhuǎn)化為對象,然后多次調(diào)用正則表達(dá)式就重復(fù)利用這個正則對象,可以實現(xiàn)更有效率的匹配。compile()方法生成的對象需要和match()、search()和findall()等方法搭配使用,單獨使用沒有意義。compile()方法的使用舉例如下:使用re模塊實現(xiàn)正則表達(dá)式match()方法。match()方法用于從字符串開始位置進(jìn)行匹配,即匹配以XXX開頭的字符串,其基本語法如下:參數(shù)說明如表6-5所示。使用re模塊實現(xiàn)正則表達(dá)式使用match()方法匹配成功會返回一個Match對象,匹配失敗返回None,如圖所示。上圖中的例子,我們使用了標(biāo)志位修飾符re.I忽略大小寫,如將re.I刪除,運行結(jié)果將返回2個None,如下圖所示。使用re模塊實現(xiàn)正則表達(dá)式search()方法。search()方法用于掃描整個字符串并返回第一個成功的匹配,即匹配第一次出現(xiàn)的XXX,語法格式與match()方法類似。search()方法匹配成功也是返回一個Match對象,匹配失敗返回None,如下圖所示。使用re模塊實現(xiàn)正則表達(dá)式從上兩圖的運行結(jié)果可看出match()方法和search()方法的區(qū)別,match()方法只匹配以給定正則開始的字符串,而search()方法搜索整個字符串,直到找到一個匹配。match()方法相當(dāng)于在search()方法的正則表達(dá)式最前面加了一個符號“^”。使用match()方法和search()方法匹配成功后返回的Match對象也具有其屬性和方法,常用的總結(jié)如右表所示。使用re模塊實現(xiàn)正則表達(dá)式關(guān)于Match對象的使用舉例如左圖所示。使用re模塊實現(xiàn)正則表達(dá)式

findall()方法。

findall()方法用于在字符串中搜索與給定正則匹配的所有子串,并以列表形式返回,如果有多個匹配模式,則返回元組列表,如果沒有找到匹配的,則返回空列表。findall()方法的語法格式與match()、search()方法類似,不同的是match()、search()方法只匹配一次,findall()方法匹配所有符合條件的子串。

接下來使用一個輸入QQ郵箱獲取QQ號碼的案例來說明findall()方法的使用,如下所示。使用re模塊實現(xiàn)正則表達(dá)式上訴代碼的運行結(jié)果如下圖所示。使用re模塊實現(xiàn)正則表達(dá)式sub()方法。sub()方法用于實現(xiàn)字符串的替換,即按照正則規(guī)則去尋找被替換的內(nèi)容,其語法格式如下:參數(shù)說明如表所示。使用re模塊實現(xiàn)正則表達(dá)式sub()方法的使用舉例如下所示。上訴代碼的運行結(jié)果如下圖所示。

split()方法。

split()方法用于實現(xiàn)字符串的分割,即將字符串按照正則分割成子串,并以列表的形式返回,其語法格式如下:使用re模塊實現(xiàn)正則表達(dá)式參數(shù)說明如表所示。使用re模塊實現(xiàn)正則表達(dá)式split()方法的使用舉例如下所示。上訴代碼的運行結(jié)果如下圖所示。使用re模塊實現(xiàn)正則表達(dá)式以上介紹了6個re模塊中的常用方法,現(xiàn)將其總結(jié)如表所示。日期和時間模塊(1)time模塊中的時間格式在time模塊中時間表現(xiàn)的格式主要有時間戳、時間元組、格式化時間三種。時間戳,即timestamp,表示的是從1970年1月1日00:00:00開始按秒計算的偏移量,適用于做日期運算。時間元組,即struct_time,共有九個元素組,如表所示。time模塊格式化時間,即format_time,已格式化的結(jié)構(gòu)使時間更具可讀性,包括自定義格式和固定格式。關(guān)于格式化時間的相關(guān)符號總結(jié)如表所示。time模塊(2)time模塊常用方法time模塊的常用方法包括time()、sleep()、localtime()等,現(xiàn)將其總結(jié)如表所示。time模塊time模塊的常用方法使用舉例如右所示。datetime模塊datatime模塊在time模塊基礎(chǔ)上重新進(jìn)行了封裝,提供更多更多好用的類供我們使用,常用的包括date、time、datetime、timedelta等。datatime模塊包含MAXYEAR和MINYEAR兩個常量,分別是能表示的最大年份(9999)和最小年份(1)。(1)date類datatime模塊中的date類用于表示日期,其主要由year(年)、month(月)及day(日)三部分構(gòu)成,date對象的格式如下所示:datetime模塊date類常用的屬性和方法總結(jié)如表示。datetime模塊date類的使用舉例如下所示。datetime模塊上訴代碼的運行結(jié)果如下圖所示。(2)time類datatime模塊中的time類用于表示時間,其主要由hour(小時)、minute(分鐘)、second(秒)、microsecond(毫秒)和tzinfo(時區(qū)信息)五部分組成,time對象的格式如下所示:datetime模塊time類常用的屬性和方法于date類相似,使用舉例如右所示。代碼的運行結(jié)果如下圖所示。datetime模塊(3)datetime類datatime模塊中的datetime類用于表示日期和時間,可以看成是date類和time類的結(jié)合,datetime類大部分的方法和屬性都繼承于date類和time類。datetime對象的格式如下所示:datetime模塊datetime類的使用舉例如下所示。datetime類中除了繼承date類和time類的方法,還有其特有的方法,總結(jié)如表所示。datetime模塊上訴代碼的運行結(jié)果如下圖所示。datetime模塊(4)timedelta類datatime模塊中的timedelta類用于做時間運算,一般與date類、datetime類結(jié)合使用。timedelta對象的格式如下所示:

timedelta類的使用舉例如代碼所示。運行結(jié)果如下圖所示。加密模塊與其它常用模塊Python中的hashlib模塊提供加密的相關(guān)操作,包含MD5和SHA加密,支持md5,sha1,sha224,sha256,sha384,sha512等算法?!D5與SHAMD5全稱Message-DigestAlgorithm5,是廣泛使用的密碼散列函數(shù),能產(chǎn)生128位(16字節(jié))散列值,保障信息傳輸?shù)耐暾耘c一致性。SHA全稱SecureHashAlgorithm,是基于MD5產(chǎn)生的算法家族,包括sha1、sha224、sha256等多種算法。MD5和SHA都是不可逆的摘要算法,原理是通過函數(shù)將任意長度數(shù)據(jù)轉(zhuǎn)換為固定長度的數(shù)據(jù)串。hashlib模塊的使用hashlib模塊的使用可分為創(chuàng)建hash對象、更新hash對象和返回摘要三步,其常用屬性和方法總結(jié)如表所示。hashlib模塊的使用hashlib模塊的使用舉例如下圖所示。上訴代碼的運行結(jié)果如下圖所示。其它常用模塊總結(jié)除了上述介紹的常用標(biāo)準(zhǔn)庫模塊之外,sys模塊、random模塊、math模塊也經(jīng)常使用,現(xiàn)將其常用方法、屬性總結(jié)如表所示。其它常用模塊總結(jié)其它常用模塊總結(jié)其中sys模塊中的modules.keys()方法用于返回所有已經(jīng)導(dǎo)入的模塊列表,運行效果如下圖所示。03基于第三方庫的爬蟲應(yīng)用很多編程語言都可以編寫爬蟲程序,但是使用Python語言編寫爬蟲無疑是最簡單、最合適的,也有很多同學(xué)是因為了解爬蟲才知道了Python。這一切都要歸功于Python的豐富類庫,可以方便高效地下載網(wǎng)頁和解析網(wǎng)頁?!ぞW(wǎng)絡(luò)爬蟲概述

網(wǎng)絡(luò)爬蟲,又被稱為網(wǎng)頁蜘蛛,網(wǎng)絡(luò)機器人,是一種按照一定的規(guī)則,自動地抓取萬維網(wǎng)信息的程序或者腳本,已被廣泛應(yīng)用于互聯(lián)網(wǎng)領(lǐng)域。網(wǎng)絡(luò)爬蟲是一種數(shù)據(jù)采集工具,如我們想對某網(wǎng)站進(jìn)行分析,那么待分析的數(shù)據(jù)去哪里獲取呢?此時就可以考慮使用網(wǎng)絡(luò)爬蟲進(jìn)行爬取。網(wǎng)頁基礎(chǔ)由于網(wǎng)絡(luò)爬蟲主要是爬取網(wǎng)頁的數(shù)據(jù),那么在學(xué)習(xí)爬蟲之前,首先我們需要先了解網(wǎng)頁的基礎(chǔ)知識。當(dāng)我們打開瀏覽器,在地址欄中輸入URL(UniformResourceLocator,統(tǒng)一資源定位器),如輸入“”,即可出現(xiàn)百度的首頁。我們可以單擊鍵盤上的“F12”打開開發(fā)者工具查看,如下圖所示。網(wǎng)頁基礎(chǔ)(1)訪問網(wǎng)頁的流程從圖6-29中我們可看到Request和Response的一些信息,其實從輸入URL到我們看到頁面,其流程可總結(jié)如下:①輸入URL。②瀏覽器給Web服務(wù)器發(fā)送一個Request。③Web服務(wù)器接到Request后進(jìn)行處理,生成相應(yīng)的Response,然后發(fā)送給瀏覽器。④瀏覽器解析Response中的HTML,這樣我們就看到了網(wǎng)頁。(2)HTTP協(xié)議上述提到的Request和Response是HTTP協(xié)議中的請求和響應(yīng)。HTTP,即HyperTextTransferProtocol,超文本傳輸協(xié)議,是一種基于請求與響應(yīng)模式的、無狀態(tài)的應(yīng)用層協(xié)議。HTTP是網(wǎng)頁中數(shù)據(jù)通信的基礎(chǔ),當(dāng)我們在瀏覽器鍵入任何一個URL時,都是在發(fā)送一次HTTP請求。網(wǎng)頁基礎(chǔ)HTTP請求由請求行、請求頭和請求正文組成。其中請求正文就是一些發(fā)送的數(shù)據(jù),請求頭允許客戶端向服務(wù)器端傳遞請求的附加信息以及客戶端自身的信息(如用戶標(biāo)識,主機名等),請求行以一個方法符號開頭,以空格分開,后面跟著請求的URI和協(xié)議的版本,格式如下所示:參數(shù)說明如表所示。網(wǎng)頁基礎(chǔ)HTTP響應(yīng)與HTTP請求類似,也是由三部分組成,分別是狀態(tài)行、響應(yīng)頭和響應(yīng)正文。狀態(tài)行的格式如下:參數(shù)說明如表6-18所示。網(wǎng)頁基礎(chǔ)通過網(wǎng)頁開發(fā)者工具查看上述訪問百度頁面的請求頭和響應(yīng)頭信息分別如下圖所示。網(wǎng)絡(luò)爬蟲的一般流程熟悉了網(wǎng)頁基礎(chǔ)知識之后,接下來我們看一下網(wǎng)絡(luò)爬蟲的一般流程。①獲取待爬取的URL/URL隊列,發(fā)送Request。②通過Request獲取Response內(nèi)容(HTML、Json字符串、二進(jìn)制數(shù)據(jù)等)。③將得到的Response內(nèi)容進(jìn)行解析(使用正則表達(dá)式、網(wǎng)頁解析庫等)。④將解析后的數(shù)據(jù)進(jìn)行保存。上述流程簡單理解就是第1步和第2步是網(wǎng)頁下載,第3步是網(wǎng)頁解析,第4步為數(shù)據(jù)存儲。爬蟲相關(guān)庫介紹網(wǎng)絡(luò)爬蟲主要由網(wǎng)頁下載、網(wǎng)頁解析和數(shù)據(jù)存儲三部分組成。網(wǎng)頁下載:Python中可使用標(biāo)準(zhǔn)庫的Urllib模塊或第三方庫Requests,Requests比Urllib更方便高效,本節(jié)重點介紹Requests。網(wǎng)頁解析:可使用正則表達(dá)式或第三方庫BeautifulSoup等,正則表達(dá)式已在6.2.1介紹,本節(jié)主要介紹BeautifulSoup庫。數(shù)據(jù)存儲:可使用純文本、關(guān)系型數(shù)據(jù)庫(如MySQL、Oracle、SQLServer等)、非關(guān)系型數(shù)據(jù)庫(如MongoDB、Redis等),數(shù)據(jù)存儲部分在7.2介紹。網(wǎng)頁下載庫Requests介紹

Requests是基于Urllib開發(fā)的,使用Apache2Licensed開源協(xié)議的HTTP庫,Request是一個第三方庫,需要使用pip命令進(jìn)行安裝(pipinstallrequests)

(1)Requests庫的常用屬性/方法Requests庫的常用屬性/方法總結(jié)如表所示。網(wǎng)頁下載庫Requests介紹(2)Requests庫的基本使用Requests的使用很簡單,還是以訪問百度網(wǎng)頁為例,如右圖所示。網(wǎng)頁下載庫Requests介紹上訴代碼的運行結(jié)果如圖所示。網(wǎng)頁下載庫Requests介紹(3)攜帶頭部信息發(fā)送請求在上訴代碼中,我們訪問的是百度首頁,狀態(tài)碼是“200”,代表訪問成功,而大多數(shù)時候,我們直接訪問網(wǎng)頁時,會出現(xiàn)403Forbidden,代表訪問被拒絕,如右圖所示。出現(xiàn)右圖這種錯誤的原因是,該網(wǎng)頁進(jìn)行了反爬蟲設(shè)置,此時如果想要成功訪問此網(wǎng)頁,可以通過模擬瀏覽器的頭部信息“User-Agent”來實現(xiàn)。“User-Agent”信息可以在開發(fā)者工具中查看,如下圖所示。網(wǎng)頁下載庫Requests介紹網(wǎng)頁下載庫Requests介紹接下來我們攜帶頭部信息,再一次訪問知乎首頁,如下圖所示。網(wǎng)頁下載庫Requests介紹上訴代碼的運行結(jié)果如下圖所示。BeautifulSoup介紹網(wǎng)頁解析庫BeautifulSoup介紹BeautifulSoup是一個解析HTML/XML文件的第三方庫,主要用于從HTML/XML文件中提取數(shù)據(jù),其提供一些簡單的函數(shù)來處理導(dǎo)航、搜索、修改分析樹等功能。使用BeautifulSoup時不需要考慮編碼方式,它會自動將輸入文檔轉(zhuǎn)換為Unicode編碼,輸出文檔轉(zhuǎn)換為utf-8編碼。BeautifulSoup介紹(1)BeautifulSoup庫的導(dǎo)入BeautifulSoup3目前已經(jīng)停止開發(fā),現(xiàn)在項目中使用的是BeautifulSoup4(可以使用命令“pipinstallbeautifulsoup4”進(jìn)行安裝),不過它已經(jīng)被移植到bs4中,也就是說導(dǎo)入時直接使用“importBeautifulSoup”會報錯,需要使用語句“frombs4importBeautifulSoup”進(jìn)行導(dǎo)入,如下圖所示。BeautifulSoup介紹(2)BeautifulSoup解析器BeautifulSoup在解析時依賴解析器,它除了支持Python標(biāo)準(zhǔn)庫中的HTML解析器外,還支持一些第三方解析器,總結(jié)如表所示。BeautifulSoup介紹(3)BeautifulSoup的基本使用由于BeautifulSoup庫是用于解析HTML文件的,所以為了演示BeautifulSoup的使用,我們首先新建一個簡單的HTML文件test.html,如下圖所示。BeautifulSoup介紹BeautifulSoup4能將復(fù)雜HTML文檔轉(zhuǎn)換為復(fù)雜樹形結(jié)構(gòu),其中每個節(jié)點都是Python對象,這些對象可歸納為Tag、NavigableString、BeautifulSoup和Comment這四種。Tag:可簡單理解為HTML標(biāo)簽,能通過BeautifulSoup對象加標(biāo)簽名獲取,但這種方式查找的是所有內(nèi)容中第一個符合要求的標(biāo)簽。NavigableString:是標(biāo)簽的內(nèi)容,通過“.string”可獲取。BeautifulSoup對象:代表文檔的全部內(nèi)容,可看作特殊的Tag。Comment對象:代表注釋內(nèi)容,是特殊類型的NavigableString,輸出內(nèi)容時不包含注釋符號,解析含注釋內(nèi)容的文件時使用前最好先做判斷。BeautifulSoup介紹接下來對對上述test.html文件進(jìn)行解析,如右圖所示。代碼的運行結(jié)果如下圖所示。BeautifulSoup介紹我們可以使用type()方法查看Tag、NavigableString、BeautifulSoup和Comment的具體類型,如右圖所示。BeautifulSoup介紹(4)BeautifulSoup遍歷文檔樹常用屬性/方法在使用BeautifulSoup遍歷文檔樹時,可以獲取父節(jié)點、子節(jié)點、兄弟節(jié)點等,相關(guān)屬性/方法總結(jié)如表所示。案例【案例描述】近年來電影產(chǎn)業(yè)迅速發(fā)展,電影已成為藝術(shù)與娛樂的載體,與電影相關(guān)的數(shù)據(jù)越來越多,豆瓣作為中國最大的電影分享與評論社區(qū),收錄了百萬條影片和影人的資料,記錄千萬影迷的觀影感受,可為觀影提供決策?!景咐蟆勘景咐饕康氖谦@取豆瓣Top250電影,共有10頁,首先獲取每頁網(wǎng)頁鏈接要求爬取每部電影的中文名稱、評分、評分人數(shù)和導(dǎo)演、主演等相關(guān)信息,如下圖所示。案例本章回顧1.【多選】模塊的導(dǎo)入方式有()。A.import語句B.from…import語句C.from…import*語句 D.import…in語句2.【多選】關(guān)于模塊的描述正確的有()。A.模塊就是一個包含了許多功能/方法的文件B.每一個.py文件都可以被當(dāng)成是一個模塊C.模塊可以包含直接運行的代碼塊、類、函數(shù)或這幾種的組合D.可以使用“from…import*語句”導(dǎo)入一個模塊的所有內(nèi)容3.【多選】關(guān)于模塊、包和庫的描述,以下正確的有()。A.庫是為了方便管理與安裝,將能夠?qū)崿F(xiàn)某一功能的模塊和包封裝而成的集合B

溫馨提示

  • 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)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論