本篇內(nèi)容介紹了“python爬蟲怎么使用BeautifulSoup庫”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠?qū)W有所成!
海口網(wǎng)站建設公司創(chuàng)新互聯(lián),海口網(wǎng)站設計制作,有大型網(wǎng)站制作公司豐富經(jīng)驗。已為海口成百上千提供企業(yè)網(wǎng)站建設服務。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站制作要多少錢,請找那個售后服務好的海口做網(wǎng)站的公司定做!
BeautiSoup類的基本元素及用bs4遍歷HTML基本方法
1,BeautifulSoup類的基本元素
有5種基本元素:
Tag: 標簽,最基本的信息組織單元, .
Name: 標簽名字, ..name :返回一個字符串
Attributes: 標簽的屬性, ..attrs :返回一個字典類型
NavigableString:標簽中的字符串, ..string :返回一個字符串
Comment: 標簽中的注釋信息,會在 ..string中獲得。
比如現(xiàn)在有一個HTML文檔:
The demo python introduces several python courses.
Python is a wonderful general-purpose programming language. You can learn Python from novice to professional by tracking the following courses:
Basic Python
and
Advanced Python.
This is not a Comment.
我們對此文檔用BS類的基本元素進行應用:
先煲一鍋湯:>>> soup = BeautifulSoup(html, "html.parser")
用 .獲得一個標簽的全部信息:
如:>>> soup.p
用.name獲得這個標簽的名字:
如:>>> p.name
Tag屬性還有另外一個重要的用法, 就是當我們對一個標簽內(nèi)的子節(jié)點進行遍歷時,可能會有不是標簽的節(jié)點,比如’\n’等,此時可利用bs4庫提供的bs4.element.Tag屬性來進行甄別。
用到 isinstance()方法。比如:isinstance(soup.a, bs4.element.Tag)
用.attrs獲得這個標簽的屬性:
如>>> soup.a.attrs
可以對a標簽的具體屬性進行獲得:>>> soup.a['href']
用.string獲得這個標簽中的字符串信息:
如:>>> soup.p.string:
我們看到.string可以跨越標簽,直接獲得標簽內(nèi)的字符串。
但是: 當外層標簽內(nèi)含有多個平行的內(nèi)層標簽時,就不行了:
比如:鄭州人流醫(yī)院哪家好 http://m.zzzy120.com/
此p標簽內(nèi)有多個平行的a標簽,直接用p.string返回為None
最后,說說Comment屬性
可用>>> soup.b.string來獲得注釋的信息:
二者類型是不同的,因此可用bs4庫的 isinstance(, bs4.element.Comment)來過濾注釋信息,或者獲得注釋信息。
2,用BeautifulSoup遍歷HTML的方式
1,下行遍歷:
3個屬性:
1,.contents : 子節(jié)點的列表,將所有兒子節(jié)點存入列表(還包括所有的\n)
2,.children : 子節(jié)點的迭代類型,與.contents類似,用于循環(huán)遍歷兒子節(jié)點。
3, .descendants : 包含所有的子孫節(jié)點。與children一樣,只能用于迭代。
2,上行遍歷:
2個屬性:
1,.parent : 節(jié)點的父親標簽
2,.parents: 節(jié)點先輩的迭代類型,用于循環(huán)遍歷先輩節(jié)點(所有的先輩)。
3,平行遍歷:
4個平行遍歷屬性:(需要發(fā)生在同一個父親節(jié)點下的各節(jié)點間。)
1,.next_sibling : 返回按照HTML文本順序的下一個平行節(jié)點標簽。
2,.previous_sibling: 返回。。的上一個平行節(jié)點標簽。
3,.next_siblings: 迭代類型, 返回按照順序的所有平行節(jié)點標簽。
4,.previous_sibings:迭代類型 。。。。。。。。。
3,BeautifulSoup的格式化輸出與編碼:
prettify()函數(shù):能夠為HTML標簽,文本增加換行符,
1,世界上的所有信息都可以用3中標記形式進行標記。
XML 格式: 類似于HTML,標簽形式。
JSON: 有類型的鍵值對 key:value 如:
"name" : "北京" -----;一個鍵值對
"name" : ["hello", "hello"] -----: 一個鍵對應多個值1
"name" : {"subkey" : "subvalue"} -----:一個鍵值對作為一個值對應于一個鍵
YAML: 無類型的鍵值對 : key : value
name : 北京
name :
-newName : 北京
-newName : 上海 (并列)
name :
newname : hello (嵌套)
比較::
XML用<>標記 : 擴展性好,但是繁瑣。 Internet上的信息交互與傳遞,多用XML。
JSON用“” : 信息有類型,適合程序處理(js),較XML整潔。(無法注釋) 用于移動應用云端和節(jié)點的信息通信。用在對程序接口處處理。
YAML用縮進 : 信息無類型, 文本信息比例最高,可讀性好。各類系統(tǒng)的配置文件,有注釋易讀。
2,信息的提取方式
1,完整解析信息的標記形式,再提取關鍵信息。
2,無視標記形式,直接搜索關鍵信息。
3,融合方法。
如:提取HTML中所有的URL標簽。
思路):
1,搜索所有的標簽
2,解析標簽格式,提取href后的鏈接內(nèi)容。
3,find_all()方法
最常用的查找方法
<>.find_all(name, attrs, recursive, string, **kwargs)
返回一個列表類型,存儲查找的結(jié)果.
使用方法:
可單獨指定name,attrs, recursive, string等
標簽名, 屬性(或字典形式的鍵值對), 默認為對子孫節(jié)點搜索, 字符串。
(..) 等價于 .find_all(..)
soup(..) 等價于 soup.find_all(..)
<>.find()搜索只返回一個結(jié)果,字符串結(jié)果。
“python爬蟲怎么使用BeautifulSoup庫”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關的知識可以關注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!
文章標題:python爬蟲怎么使用BeautifulSoup庫
當前URL:http://chinadenli.net/article20/geogjo.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站策劃、App開發(fā)、用戶體驗、全網(wǎng)營銷推廣、網(wǎng)站維護、微信公眾號
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)