人工智能采集和分析基礎(chǔ)(Python版)課件 學(xué)習(xí)單元四 XPath和re內(nèi)容解析_第1頁(yè)
人工智能采集和分析基礎(chǔ)(Python版)課件 學(xué)習(xí)單元四 XPath和re內(nèi)容解析_第2頁(yè)
人工智能采集和分析基礎(chǔ)(Python版)課件 學(xué)習(xí)單元四 XPath和re內(nèi)容解析_第3頁(yè)
人工智能采集和分析基礎(chǔ)(Python版)課件 學(xué)習(xí)單元四 XPath和re內(nèi)容解析_第4頁(yè)
人工智能采集和分析基礎(chǔ)(Python版)課件 學(xué)習(xí)單元四 XPath和re內(nèi)容解析_第5頁(yè)
已閱讀5頁(yè),還剩22頁(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)介

任務(wù)1re解析

任務(wù)2XPath解析任務(wù)1re解析正則表達(dá)式主要用于文本數(shù)據(jù),用來(lái)檢索、替換符合某個(gè)規(guī)則的文本。本任務(wù)將使用re模塊應(yīng)用的正則表達(dá)式實(shí)現(xiàn)內(nèi)容的解析,主要內(nèi)容如下:(1)抓取頁(yè)面;(2)內(nèi)容截??;(3)數(shù)據(jù)提取。一、正則表達(dá)式概述正則表達(dá)式主要用于對(duì)字符串進(jìn)行過(guò)濾,受到大多數(shù)程序設(shè)計(jì)語(yǔ)言的支持。在Python中,正則表達(dá)式對(duì)字符串的邏輯操作包含在re模塊中,能夠通過(guò)一個(gè)由“元字符”與“普通字符”組成的字符串規(guī)則,從已知的字符串或文本中選取符合規(guī)則的內(nèi)容。正則表達(dá)式元字符如表4-1所示?!救蝿?wù)描述】【知識(shí)準(zhǔn)備】其中,在組成正則表達(dá)式的字符中,默認(rèn)情況下元字符按由左至右的順序執(zhí)行,但不同的字符在正則表達(dá)式中發(fā)生的作用有先后之分,元字符優(yōu)先級(jí)為由上至下(見(jiàn)表4-1)。表4-2所示為一些常用的正則表達(dá)式。二、正則表達(dá)式的定義在re模塊中,正則表達(dá)式在發(fā)揮作用之前,需要被定義。默認(rèn)定義正則表達(dá)式有兩種方式:一種是直接定義,只需在re模塊提供的相關(guān)方法中,直接使用由“元字符”與“普通字符”組成的字符串規(guī)則利用re模塊進(jìn)行解釋性地匹配。語(yǔ)法格式如下所示。r=r'正則表達(dá)式'另一種方式是通過(guò)re模塊提供的compile()函數(shù),將正則表達(dá)式字符串預(yù)編譯成Pattern對(duì)象。與直接定義的方式相比,每次轉(zhuǎn)換正則表達(dá)式,compile()函數(shù)只進(jìn)行一次正則表達(dá)式對(duì)象的轉(zhuǎn)換,之后不需轉(zhuǎn)換即可直接使用該對(duì)象進(jìn)行匹配。語(yǔ)法格式如下所示。importrer=pile(pattern,flags)其中,Pattern表示正則表達(dá)式字符串;flags用于設(shè)置匹配模式,如忽略大小寫(xiě)匹配、多行模式匹配等。需要注意的是,flags可以接受多個(gè)參數(shù)值,即可以設(shè)置多個(gè)匹配模式,參數(shù)值之間通過(guò)符號(hào)“|”連接。flags的常用參數(shù)值如表4-3所示。在使用compile()函數(shù)生成正則表達(dá)式后,結(jié)果會(huì)以Pattern對(duì)象的形式返回,這個(gè)對(duì)象是一個(gè)編譯后的正則表達(dá)式,編譯后不僅能夠復(fù)用和提升效率,也能夠通過(guò)相關(guān)屬性獲得正則表達(dá)式的多個(gè)信息。Pattern對(duì)象的常用屬性如表4-4所示。三、正則表達(dá)式的使用在Python中,re模塊提供了多個(gè)應(yīng)用正則表達(dá)式操作字符串的方法,如字符串的查詢(xún)、替換、分割等。常用的正則表達(dá)式應(yīng)用方法如表4-5所示。1.?match()在re模塊中,match()方法可以從字符串的指定位置查找符合正則表達(dá)式的內(nèi)容,也就是說(shuō),從起始位置就必須符合正則表達(dá)式的內(nèi)容。如果匹配成功,則返回一個(gè)Match對(duì)象;如果匹配失敗,則返回None。由于正則表達(dá)式的定義有兩種方式,因此,match()方法在使用時(shí)同樣有兩種方法,語(yǔ)法格式如下所示。importre#方法一:直接使用正則表達(dá)式re.match(pattern,string,flags)#方法二:使用正則表達(dá)式對(duì)象r=pile(pattern,flags)r.match(string,pos,endpos)參數(shù)說(shuō)明如表4-6所示。match()方法在直接使用正則表達(dá)式時(shí),會(huì)從字符串的首字母進(jìn)行匹配;而使用正則表達(dá)式對(duì)象時(shí),則可以指定起始位置、結(jié)束位置進(jìn)行匹配。在匹配完成后,返回Match對(duì)象,這個(gè)對(duì)象只包含一次正則匹配的結(jié)果,可以通過(guò)相關(guān)屬性或方法獲取match()包含的信息。Match對(duì)象的常用屬性和方法如表4-7所示。2.?search()search()方法從指定位置開(kāi)始查找符合正則表達(dá)式的第一個(gè)內(nèi)容,直到末尾,如果找到,則返回一個(gè)包含內(nèi)容的Match對(duì)象,否則返回None。search()方法與match()方法的使用方法基本相同。語(yǔ)法格式如下所示。importrere.search(pattern,string,flags)#從指定位置開(kāi)始匹配r=pile(pattern,flags)r.search(string,pos,endpos)另外,search()方法在直接使用正則表達(dá)式時(shí),同樣會(huì)從首字母開(kāi)始;在使用正則表達(dá)式對(duì)象時(shí),會(huì)從指定位置開(kāi)始。3.?findall()和finditer()與match()方法和search()方法相比,findall()方法和finditer()方法是從字符串中查找符合正則表達(dá)式的所有內(nèi)容。其中,findall()方法將匹配結(jié)果以列表形式返回,而finditer()方法將匹配結(jié)果以迭代器形式返回,并且迭代器中包含了多個(gè)Match對(duì)象。另外,在使用方式上,findall()方法和finditer()方法也與match()和search()方法類(lèi)似。代碼如下所示。importrere.findall/finditer(pattern,string,flags)#從指定位置開(kāi)始匹配r=pile(pattern,flags)r.findall/finditer(string,pos,endpos)4.?split()在re模塊中,split()方法用于實(shí)現(xiàn)分割操作,將符合正則表達(dá)式匹配的內(nèi)容作為分隔符進(jìn)行字符串的分割,并將分割后的內(nèi)容以列表的形式返回。split()方法代碼如下所示。importre#方法一:直接使用正則表達(dá)式re.split(pattern,string,maxsplit)#方法二:使用正則表達(dá)式對(duì)象r=pile(pattern,flags)r.split(string,maxsplit)參數(shù)說(shuō)明如表4-8所示。5.?sub()sub()方法用于實(shí)現(xiàn)替換操作,將符合正則表達(dá)式匹配的內(nèi)容作為被替換內(nèi)容進(jìn)行字符串的替換操作,并將替換后的字符串返回。sub()方法代碼如下所示。importre#方法一:直接使用正則表達(dá)式re.sub(pattern,repl,string,count)#方法二:使用正則表達(dá)式對(duì)象r=pile(pattern,flags)r.sub(repl,string,count)參數(shù)說(shuō)明如表4-9所示。任務(wù)2XPath解析XPath是一種在XML、HTML文檔中查找信息的語(yǔ)言,能夠爬取網(wǎng)頁(yè)數(shù)據(jù)并抽取信息。本任務(wù)介紹XPath的使用,主要內(nèi)容如下:(1)抓取頁(yè)面并解析;(2)內(nèi)容查看;(3)信息定位;(4)信息提取。一、XPath簡(jiǎn)介XPath,即XML路徑語(yǔ)言,是一種在XML文檔中定位信息的語(yǔ)言,可以對(duì)XML文檔中的元素和屬性進(jìn)行遍歷。XPath不僅用于XML文檔的搜尋,也適用于HTML等結(jié)構(gòu)化文檔的搜索。XPath提供簡(jiǎn)明的路徑選擇表達(dá)式,能夠?qū)崿F(xiàn)字符串、數(shù)值、時(shí)間的匹配以及節(jié)點(diǎn)、序列的處理等,所有需要定位節(jié)點(diǎn)的場(chǎng)景。【任務(wù)描述】【知識(shí)準(zhǔn)備】在Python中,XPath包含在lxml庫(kù)的etree模塊下,lxml是一個(gè)解析庫(kù),對(duì)HTML和XML的XPath解析提供支持,解析效率非常高。在使用lxml前,需要在命令窗口輸入“pipinstalllxml”命令進(jìn)行下載安裝lxml,如圖4-10所示。目前,etree模塊提供了多種用于解析XML、HTML等結(jié)構(gòu)化文檔的方法,如XPath的使用、文檔結(jié)構(gòu)化等。常用方法如表4-10所示。其中,HTML()、XML()和parse()方法是將接收包含結(jié)構(gòu)化文檔的內(nèi)容解析成能夠被xpath()方法進(jìn)行標(biāo)簽的定位和內(nèi)容捕獲的Element對(duì)象。其中,HTML()方法用于解析HTML格式的文檔,并對(duì)HTML文本進(jìn)行修正,在使用時(shí),只需提供需要被解析的字符串類(lèi)型的HTML文檔即可,代碼如下所示。fromlxmlimportetreeetree.HTML(text,parser=None,base_url=None)參數(shù)說(shuō)明如表4-11所示。XML()方法主要用于解析XML格式的文檔,使用方式與HTML()方法相同,代碼如下所示。fromlxmlimportetreeetree.XML(text,parser=None,base_url=None)parse()方法是接收本地文件,讀取文件包含內(nèi)容并對(duì)文檔進(jìn)行解析,代碼如下所示。fromlxmlimportetreeetree.parse(source,parser=None,base_url=None)其中,source表示文件路徑,這個(gè)文件可以是xml、html、txt等格式。在生成Element對(duì)象后,可以通過(guò)tostring()方法將其轉(zhuǎn)換成byres類(lèi)型,為Element對(duì)象的查看提供支持,并且,在該方法后加入“decode(')”方法即可將其轉(zhuǎn)為字符串類(lèi)型,代碼如下所示。fromlxmlimportetreeetree.tostring(Element,pretty_print=True,encoding="utf-8")參數(shù)說(shuō)明如表4-12所示。除Element對(duì)象的查看,還可以通過(guò)xpath()對(duì)Element對(duì)象進(jìn)行解析,并通過(guò)由符號(hào)和方法組成的路徑表達(dá)式查找指定節(jié)點(diǎn)元素并提取所需內(nèi)容,將結(jié)果以列表的形式返回,且列表中每個(gè)元素均為Element對(duì)象,代碼如下所示。fromlxmlimportetreeetree.xpath(path,namespaces=None,extensions=None,smart_strings=True)參數(shù)說(shuō)明如表4-13所示。二、定位根據(jù)使用對(duì)象的不同,XPath有三種定位方式,分別是元素定位、屬性定位和文本定位。1.元素定位在XPath中,元素定位是指根據(jù)路徑表達(dá)式尋找符合表達(dá)式節(jié)點(diǎn)的指定子節(jié)點(diǎn)(元素),如獲取所有元素、獲取第一個(gè)元素等。元素定位常用符號(hào)如表4-14所示。在HTML中,根據(jù)節(jié)點(diǎn)之間的關(guān)系,可以將其分為父節(jié)點(diǎn)、子節(jié)點(diǎn)、同胞節(jié)點(diǎn)、先輩節(jié)點(diǎn)、后代節(jié)點(diǎn)等。XPath提供了可以根據(jù)節(jié)點(diǎn)關(guān)系進(jìn)行元素定位的相關(guān)屬性。常用屬性如表4-15所示。代碼如下所示。屬性::路徑表達(dá)式2.屬性定位屬性定位是指根據(jù)屬性或?qū)傩灾颠M(jìn)行定位,如獲取帶有href屬性的元素、獲取帶有符合條件屬性的元素等。屬性定位常用符號(hào)如表4-16所示。其中,條件表達(dá)式由屬性、屬性值和運(yùn)算符組成。目前,XPath中常用的運(yùn)算符包含算術(shù)運(yùn)算符、關(guān)系運(yùn)算符、邏輯運(yùn)算符等。常用運(yùn)算符如表4-17所示。3.文本定位在XPath中,文本定位是指根據(jù)節(jié)點(diǎn)中包含文本的值進(jìn)行的定位,可以通過(guò)“nodeName[條件表達(dá)式]”方式指定條件,該條件由元素、運(yùn)算符和元素包含文本組成。在進(jìn)行定位時(shí),根據(jù)條件表達(dá)式,判斷nodeName節(jié)點(diǎn)下是否包含表達(dá)式中的元素,如果包含,則繼續(xù)判斷該元素中包含的文本是否符合;如果都符合,則返回包含nodeName節(jié)點(diǎn)信息的Element對(duì)象。三、數(shù)據(jù)提取根據(jù)HTML中文本的不同屬性,可以將XPath定位后的數(shù)據(jù)提取分為屬性值提取和文本內(nèi)容提取

溫馨提示

  • 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)論