BeautifulSoup4.2使用心得筆記匯總_第1頁
已閱讀5頁,還剩12頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、參考文檔: HYPERLINK /software/BeautifulSoup/bs4/doc.zh/ Beautiful Soup 4.2.0中文文檔BeautifulSoup是一個可以從html或者xml文件中提取數(shù)據(jù)的一個Python第三方庫。我們可以在編寫爬 蟲項目的時候,使用BeautifulSoup來幫助我們解析html文件。 o 1、安裝 BeautifulSoup-2、安裝解析器 3、使用 BeautifulSoup3.1、編碼問題3.2、BeautifulSoup的對象3.2.1、Tag對象.parents & .parent.contents & .children.str

2、ing.strings & .stripped_stringsget_text()3.2.2、NavigableString對象3.3、搜尋目標Tag3.3.1、過濾器字符串-正則表達式-列表-函數(shù)方法3.3.2、find_all()name參數(shù)attr s參數(shù)keyword 參數(shù)按css搜索string 參數(shù)limit參數(shù)recursive 參數(shù)find_all()方法的簡寫3.3.3、find()find()方法的使用find()方法的簡寫-3.3.4、其他搜索APIfind_parents() & find_parent()find_next_siblings() & find_next

3、_sibling()find_previous_siblings() & find_previous_sibling()find_all_next() & find_next()find_all_previous() & find_previous() 3.3.5、css選擇器 4、如何提高效率解析部分文檔(SoupStrainer)文檔解析錯誤代碼診斷(diagnose)-5、使用更高版本應(yīng)注意的內(nèi)容1、安裝 BeautifulSoupPython的第三方庫一般都可以使用pip來進行安裝,使用pip進行安裝的方法是:pip install beautifulsoup4也可以使用easy_in

4、stall來進行安裝:easy_install beautifulsoup4BeautifulSoup的發(fā)布協(xié)議允許將bs4的代碼打包在項目中,可以無須安裝便可以使用。2、安裝解析器BeautifulSoup支持Python標準庫中的HTML解析器(html.parser無需安裝),也支持一些第三方的解 析器,其中一個是lxml,也支持html5lib, html5lib是純Python實現(xiàn),解析方式與瀏覽器相同解析器的安裝和BeautifulSoup的安裝類似:easy_install lxmlpip install lxmleasy_install html5libpip install

5、html5lib各個解析器的對比如下:解析器使用方法優(yōu)勢劣勢Python標準庫BeautifulSoup (markup, Python的內(nèi)置標 Python 2.7.3 orhtml.parser )3.2.2)前的版本執(zhí)彳亍速度適中中文檔容錯能力文檔容錯能力強差I(lǐng)xml HTML解析器BeautifulSoup(markup,速度快需要安裝C語言庫Ixml )文檔容錯能力強IxmlXML解析器BeautifulSoup (markup,灘快需要安裝C語言庫唯一支持XML的解析器Beau tiful Sou p (tna rkup,*xmr)htrnl5libBeau tiful Sou p

6、 (ma rkup,*html51ib*)-最好的容錯性-速度慢以瀏覽器的方式不依賴外部擴展解析文檔生成HTML5格式的文檔推薦使用Ixml作為解析器,因為效率更高。在Python2.7.3之前的版本和Python3中322之前的版本, 必須安裝I xml或htm I5I ib,因為那些Python版本的標準庫中內(nèi)置的HTML解析方法不夠穩(wěn)定。3、使用 BeautifulSoup使用BeautifulSoup的方法和其他Python庫的方法類似from bs4 import BeautifulSoup 我們可以將我們采集到的網(wǎng)頁內(nèi)容傳入BeautifulSoup的構(gòu)造方法,就能得到一個文檔的對

7、象,也可 以傳入一段字符串或一個文件句柄。soup = BeautifulSoup(html,html.parser)soup = BeautifulSoup(open(html.html,),html.parser)soup = BeautifulSoup(,data,,html.parser,)我們需要注意到,文檔在傳入構(gòu)造方法之后均被轉(zhuǎn)換成Unicode,并且HTML的實例都被轉(zhuǎn)換成 Unicode 編碼。3.1、編碼問題任何HTML或XML文檔都有自己的編碼方式,比如ASCII或UTF-8,但是使用BeautifulSoup解析后, 文檔都被轉(zhuǎn)換成了 Unicode。Beautiful

8、Soup用了編碼自動檢測子庫來識別當前文檔編碼并轉(zhuǎn)換成Unicode編碼。BeautifulSoup對 象的.original_encoding屬性記錄了自動識別編碼的結(jié)果。也可以通過from_encoding屬性來指定編碼 格式。soup = BeautifulSoup(html,from_encoding=,utf-8,)我們在編寫爬蟲的時候,一般都會遇到中文編碼的顯示問題,一般我們是將request s的返回,傳入 BeautifulSoup的構(gòu)造方法中,有時候會出現(xiàn)中文亂碼的情況,我們這里以百度官網(wǎng) 為例,看一下怎么解決編碼問題。import requestsfrom bs4 impo

9、rt BeautifulSoupres = requests.get(,)print(res.encoding)soup = BeautifulSoup(res.text,,lxml,)print(soup)print(soup.original_encoding)當我們運行上面這些代碼的時候,我們會發(fā)現(xiàn)我們輸出的soup是亂碼。我們查看requestes以及 BeautifulSoup的相關(guān)文檔,發(fā)現(xiàn)request s會自動將從服務(wù)器端獲取到的內(nèi)容自動轉(zhuǎn)換成unicode,而 BeauifulSoup也會將獲取到內(nèi)容自動轉(zhuǎn)換成unicode。requests和BeautifulSoup會自行

10、猜測原文的編 碼格式,大多數(shù)時候猜測出來的編碼都是正確的,但也有猜錯的情況,如果猜錯了可以指定原文的編 碼。所以我們認為是上面是由于編碼格式猜測錯誤導(dǎo)致的中文亂碼,我們查看res.encoding的輸出結(jié)果 為ISO-8859-T,然后在網(wǎng)頁中的charset屬性指出網(wǎng)頁是utf-8編碼格式的,所以我們需要指定原文 的編碼:res.encoding = ,utf-8,然后再傳入BeautifulSoup中,我們輸出的soup時中文顯示就正常了。我們在通過BeautifulSoup輸出文檔時,不管輸入文檔是什么編碼方式,輸出編碼均為utf-8編碼。如 果我們不想使用utf-8格式輸出文檔,或者因

11、為有些字符亂碼而需要使用其他編碼格式的時候,那我 們只需要:soup.encode(,你想要的編碼,)#orsoup.prettify(,你想要的編碼,)#prettify()除了可以指定編碼外,最主要功能是對beautifulsoup的k語法分析樹重新排版ps:針對中文編碼問題,我們也可以以bytes傳遞給BeautifulSoup,-般bs都能猜測到正確的編碼。import reuqestsfrom bs4 import BeautifulSoupres = requests.get()soup = BeautifulSoup(res.content,lxml)print(soup.pre

12、ttify()輸出中文正常顯示。3.2、BeautifulSoup的對象BeautifulSoup將復(fù)雜HTML文檔轉(zhuǎn)換成一個樹形結(jié)構(gòu),每個節(jié)點都是Python對象,所有對象可以歸為 4種:Tag, NavigableString, BeautifulSoup, Comment。我們在編寫爬蟲代碼的時候主要使用的是 Tag和NavigableString對象,所以著重介紹一下。我們使用bs的最重要的目的是解析html文檔,從里 面提取出我們所需要的內(nèi)容,當然bs還有很多其他非常好的功能。3.2.1、Tag對象Tag對象與XML或HTML原生文檔中的tag相同,我們也可以認為是樹形結(jié)構(gòu)中的節(jié)點。

13、一個Tag可能 包含多個字符串或其它的Tag,這些都是這個Tag的子節(jié)點。Beautiful Soup提供了許多操作和遍歷子 節(jié)點的屬性.我們可以通過.tag_name的方法來獲得子節(jié)點,但是這種方法只能獲得第一個匹配到的節(jié)點。soup = BeautifulSoup(vb id=bold class=boldestExtremely bold) tag_b = soup.b type(tag_b)#每個tag都有自己的名字,可以通過.name來獲?。簍ag_#b個tag可能有很多個屬性,例如tag_b有一個“id”的屬性,值為“blod”,有一個“class”的屬性,值 為“boldest”

14、 , tag的屬性的操作方法與字典相同。也可以通過使用.attrs的方式,獲得所有的屬 性。HTML4定義了一系列可以包含多個值的屬性,在HTML5中移除了一些,卻增加更多,最常見的多值 的屬性是class (tag可以有多個CSS的class),還有一些屬性rel, rev, accept-charset, headers, accesskey等等。在BeautifulSoup中多值屬性的返回類型是list。tag_bclass#boldesttag_b.attrs#id: bold, class: boldest)css_soup = BeautifulSoup() css_soup.pc

15、lass#bodyt strikeout.parents & .parenttag對象的.parent屬性,可以獲取某個節(jié)點的父節(jié)點。例如,head標簽是title標簽的父節(jié)點, 我們可以這么獲得。title_tag = soup.titletitle_tag#This is a storyv/titletitle_tag.parent#This is a storytag對象的.parents屬性是遞歸返回當前tag對象的所有父輩節(jié)點。.contents & .childrentag的.contents屬性可以將tag的子節(jié)點以列表的方式輸出:soup = BeautifulSoup(Ext

16、remely bold123) soup.a.contents#Extremely bold, 123也可以通過tag的.children生成器,對tag的子節(jié)點進行循環(huán):for child in soup.a.children:print(child)#Extremely bold#123.string如果tag只有一個NavigableString類型子節(jié)點,也就是只有一個字符串節(jié)點,沒有其他tag,那么這 個tag可以使用.string得到子節(jié)點:soup.a.b.stringExtremely bold.strings & .stripped_strings如果tag中包含多個字符串,

17、可以使用.strings來循環(huán)獲?。簊oup = BeautifulSoup( Extremely boldv/bxb class=boldestExtremely bold1n123)for string in soup.a.strings:print(string)#Extremely bold#Extremely boldl#123輸出的字符串中可能包含了很多空格或空行,使用.stripped_strings可以去除多余空白內(nèi)容:soup = BeautifulSoup(Extremely boldExtremely bold1n123)for string in soup.a.stri

18、pped_strings:print(string)#Extremely bold#Extremely boldl#123get_text()如果只想得到tag中包含的文本內(nèi)容,那么可以調(diào)用get_text()方法,這個方法獲取到tag中包含的所有 文字內(nèi)容包括子孫tag中的內(nèi)容,并將結(jié)果作為Unicode字符串返回:soup = BeautifulSoup(Extremely bold123) soupaget_text()soupa.b.get_text()#Extremely bold123#Extremely bold注意:Beautiful Soup中字符串節(jié)點不支持以上這些屬性,因

19、為字符串沒有子節(jié)點3.2.2、NavigableString對象字符串常被包含在tag內(nèi),Beautiful Soup用NavigableString類來包裝tag中的字符串。一個 NavigableString字符串與Python中的U nicode字符串相同。tag中包含的字符串不能編輯,但是可以被替換成其它的字符串,用replace_with()方法:soup = BeautifulSoup(123,)soup.b.string.replace_with(replace,)soup.b#replace注:一個字符串不能包含其它內(nèi)容(tag能夠包含字符串或是其它tag),字符串不支持.co

20、ntents或 .string屬性或find()方法。3.3、搜尋目標Tag在我們獲得正確的網(wǎng)頁返回內(nèi)容之后,我們需要搜尋到正確的目標Tag來獲得我們想要的內(nèi)容。 Beautiful Soup定義了很多搜索方法,這里著重介紹2個:find()和find_all(),其它方法的參數(shù)和用法 類似。3.3.1、過濾器介紹find_all()方法前,先介紹一下過濾器的類型,這些過濾器貫穿整個搜索的API。過濾器可以被用 在tag的name中,節(jié)點的屬性中,字符串中或他們的混合中。我們使用下面的html,作為我們解析的內(nèi)容html =,123456321654 I Isoup = BeautifulSo

21、up(html)字符串最簡單的過濾器是字符串,在搜索方法中傳入一個字符串參數(shù),Beautiful Soup會查找與字符串完整 匹配的內(nèi)容,下面的例子用于查找文檔中所有的標簽:soup.find_all(b)#123f 456v/b, 321f 654字符串過濾器的主要功能是篩選出=字符串的節(jié)點正則表達式如果傳入正則表達式作為參數(shù),Beautiful Soup會通過正則表達式的match()來匹配內(nèi)容。下面例子 中找出所有以b開頭的標簽,這表示和標簽都應(yīng)該被找到:import refor tag in soup.find_all(pile(b):print()#body#b#b#b#b列表如果傳

22、入列表參數(shù),Beautiful Soup會將與列表中任一元素匹配的內(nèi)容返回。下面代碼找到文檔中所 有標簽和標簽:soup.find_all(a,b)#123456 , 123, 456, 321654, 321, 654函數(shù)方法如果沒有合適過濾器,那么還可以定義一個方法,方法只接受一個元素參數(shù),如果這個方法返回 True表示當前元素匹配并且被找到,如果不是則反回False。下面方法校驗了當前tag,如果包含class屬性卻不包含id屬性,那么將返回True:def has_class_but_no_id(tag):return tag.has_attr(class) and not tag.h

23、as_attr(id)將這個方法作為參數(shù)傳入find_all()方法,將得到所有滿足條件的標簽:soup.find_all(has_class_but_no_id)#456f 654v/b可以看到返回結(jié)果中,只有滿足含有class屬性,不含有id屬性”的標簽被返回。3.3.2、 find_all()find_all( name , attrs , recursive , text , *kwargs )find_all()方法搜索當前tag的所有tag子節(jié)點,并判斷是否符合過濾器的條件。下面有幾個例子,根據(jù) find_all()方法的參數(shù),進行理解。name參數(shù)name參數(shù)在之前的介紹中有所提

24、及,類似字符串過濾器。name參數(shù)查找所有名字為name的tag, 字符串對象會被自動忽略掉。soup.find_all(title)茸獲得為“title ”的標簽attrs參數(shù)attrs參數(shù)是根據(jù)tag屬性,對標簽進行查找。soup.find_all(attrs=class:bl)#獲得滿足class=bU的所有標簽soup.find_all(b,attrs=class:b1,id=bold1)#獲得滿足class=b1” id=%old1 的所有標簽keyword 參數(shù)如果一個指定名字的參數(shù)不是搜索內(nèi)置的參數(shù)名,搜索時會把該參數(shù)當作指定名字tag的屬性來搜 索,如果包含一個名字為id的參數(shù)

25、,Beautiful Soup會搜索每個tag的” id”屬性。soup.find_all(id=link2)#搜尋所有滿足id=link2 的標簽如果傳入href參數(shù),Beautiful Soup會搜索每個tag的”href”屬性:soup.find_all(href=pile(https:/)#搜尋所有href為https開頭的標簽搜索指定名字的屬性時可以使用的參數(shù)值包括字符串,正則表達式,列表,True,參照過濾器的使用 方法。soup.find_all(id=True)茸搜索查找所有包含id屬性的標簽,無論id的值是什么可以使用多個指定名字的參數(shù)可以同時過濾tag的多個屬性:soup.

26、find_all(href=pile(https:/),id=link,)#搜索查找所有id為link href為https開頭的標簽注意:有些tag屬性不能在搜索中使用,例如html5中的data-*屬性soup = BeautifulSoup(,foo!,)soup.find_all(data-foo = value)#SyntaxError: keyword cant be an expression但是可以通過使用find_all()方法中的attrs參數(shù)來獲得data-*的屬性內(nèi)容soup.find_all(attrs=,data-foo,:value,)#foo!按css搜索按照c

27、ss類名搜索tag的功能非常實用,但標識css類名的關(guān)鍵字class在Python中是保留字,使用 class做參數(shù)會導(dǎo)致語法錯誤。從BeautifulSoup的4丄1版本開始,可以通過class_參數(shù)搜索有指定 css類名的tag。soup.find_all(,a,,class_=,test,)茸搜索出所有class屬性為test的標簽class_參數(shù)同樣接受不同類型的過濾器,例如:字符串,正則表達式,函數(shù)方法以及True。使用方 法和上面在講過濾器的時候的使用方法類似,我們可以自行驗證。tag的class是多值屬性,按照css類名搜索tag的時候,可以分別搜索tag中的每個類名。soup

28、= BeautifulSoup(,)soup.find_all(,p,,class_=,body,)#v/psoup.find_all(,p,,class_=,table,) #v/p 同時使用class_也可以進行對css類名的完全匹配: soup.find_all(p,class_=bGdy tabel) #p class=body注意:如果在使用完全匹配clas s值的時候,如果css類名的順序與實際不符,則不會搜索到正確的結(jié) 果。string參數(shù)通過string參數(shù)可以搜索文檔中的字符串內(nèi)容,它同樣接受不同類型的過濾器,string參數(shù)接受字符 串,正則表達式,列表和True,同樣也接

29、受函數(shù)方法過濾。注意:如果只使用了string參數(shù),返回結(jié)果列表中的元素只包含滿足搜索條件的字符串,也可以說是 NavigableString對象,而不是tag對象,可以觀察下面的這兩個語句進行對比。soup.find_all(string = test)#testsoup.find_all(a,string=test)#testlimit參數(shù)find_all()方法返回的是全部的搜索結(jié)構(gòu),那么如果文檔樹很大的時候搜索所需要的時間也會非常 大,如果我們不需要全部的搜索結(jié)果,那么我們可以使用limit參數(shù)來限制返回結(jié)果的數(shù)量。例如如果文檔中有5個滿足搜索條件的tag,當我們使用limit參數(shù)的時

30、候就可以限制它的返回數(shù)量。soup.find_all(a,limilt=2)#只返回滿足搜索條件的前兩個recursive 參數(shù)在調(diào)用find_all()方法時,默認的是搜索當前tag下的所有子孫節(jié)點,查找符合我們要求的tag。如果 我們只想搜索當前tag的直接子節(jié)點,可以使用參數(shù)recursive = Falsehtml = Test Title!soup = BeautifulSoup(html,lxml)souphtmlfind_all(title)#The Dormouses storysouphtmlfind_all(title,recursive二False)#標簽在標簽下,但并不

31、是直接子節(jié)點,標簽才是直接子節(jié)點。在允許查詢 所有后代節(jié)點時BeautifulSoup能夠查找到標簽。但是使用了 recursive=False參數(shù)之后, 只能查找直接子節(jié)點,這樣就查不到標簽了。find_all()方法的簡寫find_all()方法是BeautifulSoup中最常用的搜索方法,所以BeautifulSoup的作者定義了他的簡寫方 法,BeautifulSoup對象和tag對象可以被當作一個方法來使用,這個方法的執(zhí)行結(jié)果和調(diào)用這個對象 的find_all()方法的結(jié)果相同。soup.find_all(a)soup(a)上面的這兩行代碼的執(zhí)行結(jié)果是一樣的,同樣下面的這兩行代碼的

32、執(zhí)行結(jié)果也是一樣的。soup.title.find_all(string=True)soup.title(string=True)3.3.3、 find()find( name , attrs , recursive , string , *kwargs)find()方法的使用find()方法的參數(shù)使用與find_all()的類似,這里不再重新闡述。find_all()方法將返回文檔中所有符合條件的tag,當我們只想得到一個結(jié)果時,可以使用limit參數(shù), 或者可以直接使用find()方法,例如下面的兩行代碼是等價的。soup.find_all(title,limit=1)soup.find(

33、title)上面兩行代碼唯一的區(qū)別就是,find_all()方法返回的是包含一個元素的列表,而find()方法是直接 返回的結(jié)果。如果沒有找到滿足搜索條件的tag對象,findl()返回的是一個空列表,find()找不到 目標返回的是None。find()方法的簡寫soup.head.title是調(diào)用find()方法的簡寫,這個簡寫的原理就是多次調(diào)用當前tag的find()方法,下 面這兩句代碼是具有相同效果的。soup.head.titlesoup.find(head).find(title)3.3.4、其他搜索APIfind()和find_all()方法是最常使用的搜索文檔的方法,但是Be

34、autifulSoup還給我們提供了 10個可以 使用搜索功能的API,其中五個與find_all()方法的參數(shù)相同,另外五個與find()方法的參數(shù)類似,這 里不再做舉例驗證。find_parents() & find_parent()find_parents(name, attrs, recursive, string, *kwargs)find_parent(name, attrs, recursive, string, *kwargs)find()和find_all()方法是搜索當前節(jié)點的子孫節(jié)點,find_parent()和find_parents()則是用來搜索 當前節(jié)點的父輩節(jié)點

35、。同樣兩個方法的區(qū)別是,在參數(shù)缺省的時候,find_parent()只返回直接父親 節(jié)點(1個),find_parents()迭代返回所有的父輩節(jié)點。find_next_siblings() & find_next_sibling()find_next_siblings(name, attrs, recursive, string, *kwargs)find_next_sibling(name, attrs, recursive, string, *kwargs)這兩個方法通過.next_siblings屬性對當前tag節(jié)點后面所有滿足搜索條件的兄弟tag節(jié)點進行迭代, 兩個方法的區(qū)別是fin

36、d_next_siblings()返回所有滿足搜索條件的兄弟節(jié)點,find_next_sibling()只 返回滿足搜索條件的第一個兄弟節(jié)點。find_previous_siblings() & find_previous_sibling()find_previous_siblings(name, attrs, recursive, string, *kwargs)find_previous_sibling(name, attrs, recursive, string, *kwargs)這兩個方法是通過.previous_siblings屬性對當前tag節(jié)點前面所有滿足搜索條件的兄弟tag節(jié)點

37、進行迭 代,兩個方法的區(qū)別是find_previous_siblings()返回所有滿足搜索條件的兄弟節(jié)點, find_previous_sibling()只返回滿足走索條件的第一個兄弟節(jié)點。find_all_next() & find_next()find_all_next(name, attrs, recursive, string, *kwargs)find_next(name, attrs, recursive, string, *kwargs)這2個方法通過.next_elements屬性對當前節(jié)點之后的tag和字符串進行迭代,find_all_next()方法 返回所有符合條件的節(jié)

38、點,find_next()方法返回第一個符合條件的節(jié)點。find_all_previous() & find_previous()find_all_previous(name, attrs, recursive, string, *kwargs)find_previous(name, attrs, recursive, string, *kwargs)這2個方法通過.previous_elements屬性對當前節(jié)點前面的tag和字符串進行迭代, find_all_previous()方法返回所有符合條件的節(jié)點,find_previous()方法返回第一個符合條件的節(jié) 點。3.3.5、css選擇

39、器BeautifulSoup支持大部分的CSS選擇器,在tag或者BeautifulSoup對象的.select。方法中傳入字符 串,就可以使用css選擇器的語法找到目標tag。熟練使用css的人,可以選擇使用css選擇器來進行搜索。css選擇器的使用方法,可以自行查找官方文檔的相關(guān)使用,本人由于掌握的不好,便不在這里班門 弄斧了。4、如何提高效率BeautifulSoup解析文檔的速度不會比它所依賴的解析器的速度更快,如果對時間要求比較高,那我 們應(yīng)該直接使用lxml作為BeautifulSoup所依賴的解析器,用lxml作解析器比用html5lib或者 python的內(nèi)置解析器速度要快很多

40、。在安裝c chardet后對文檔解碼的編碼檢測也會更快。此外一個更好提高速率的方法是,解析部分文檔雖然不會節(jié)省多少解析時間,但是會節(jié)省很多內(nèi)存, 并且搜索時也會變得更快。解析部分文檔(SoupStrainer)如果僅僅是想查找文章中的a標簽而對整個文檔進行解析,實在是浪費內(nèi)存和時間,最快的方法是 從一開始就將出了a標簽之外的內(nèi)容都忽略掉。SoupStrainer類可以定義文檔的某段內(nèi)容,這樣 搜索文檔時就不必解析整個文檔,只會解析在SoupStrainer中定義過的文檔。這樣我們只需要構(gòu)建 個SoupStrainer對象,并作為parse_only的參數(shù)傳遞個BeautifulSoup構(gòu)造方

41、法即可。SoupStrainer 具有與典型搜索方法相同的參數(shù),name, attrs, recursive, string, *kwargs,下面 舉例說明三種SoupStrainer對象。from bs4 import SoupStraineronly_a_tags = SoupStrainer(a)only_tags_with_id_link2 = SoupStrainer(id=link2)def is_short_string(string):return len(string) vtitleThe Dormouses storyv/titlev/headThe Dormouses

42、storyv/bx/pOnce upon a time there were three little sisters; and their names wereElsie,Lacie andTillie;and they lived at the bottom of a well.v/pprint(BeautifulSoup(html_doc,lxml,parse_only=only_a_tags).prttify()#a class=sister href= HYPERLINK /elsie /elsie id=link1uElsie#Lacie#Tillie#print(Beautifu

43、lSoup(html_doc,lxml,parse_only=only_tags_with_id_link2).prettify()#Lacie#print(BeautifulSoup(html_doc,lxml,parse_only=only_short_strings).prettify()#Elsie#,#Lacie#and#Tillie此外還可以將S oupstrainer傳入搜索方法中,可以實現(xiàn)同樣的效果soup = BeautifulSoup(html_doc,) print(soup.find_all(only_short_strings)nf Elsie, fnf Lacie, andnf Tillie, nfn文檔解析錯誤文檔解析錯誤有兩種,一種是崩潰,BeautifulSoup嘗試解析一段文檔結(jié)果卻拋除了異常,通常是 HTMLParser.HTMLParseError。還有一種異常情況是Beaut

溫馨提示

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

最新文檔

評論

0/150

提交評論