您好,登錄后才能下訂單哦!
本篇內容介紹了“python爬蟲怎么使用BeautifulSoup庫”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
BeautiSoup類的基本元素及用bs4遍歷HTML基本方法
1,BeautifulSoup類的基本元素
有5種基本元素:
Tag: 標簽,最基本的信息組織單元, .
Name: 標簽名字, ..name :返回一個字符串
Attributes: 標簽的屬性, ..attrs :返回一個字典類型
NavigableString:標簽中的字符串, ..string :返回一個字符串
Comment: 標簽中的注釋信息,會在 ..string中獲得。
比如現在有一個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’等,此時可利用bs4庫提供的bs4.element.Tag屬性來進行甄別。
用到 isinstance()方法。比如:isinstance(soup.a, bs4.element.Tag)
用.attrs獲得這個標簽的屬性:
如>>> soup.a.attrs
可以對a標簽的具體屬性進行獲得:>>> soup.a['href']
用.string獲得這個標簽中的字符串信息:
如:>>> soup.p.string:
我們看到.string可以跨越標簽,直接獲得標簽內的字符串。
但是: 當外層標簽內含有多個平行的內層標簽時,就不行了:
比如:鄭州人流醫院哪家好 http://m.zzzy120.com/
此p標簽內有多個平行的a標簽,直接用p.string返回為None
最后,說說Comment屬性
可用>>> soup.b.string來獲得注釋的信息:
二者類型是不同的,因此可用bs4庫的 isinstance(, bs4.element.Comment)來過濾注釋信息,或者獲得注釋信息。
2,用BeautifulSoup遍歷HTML的方式
1,下行遍歷:
3個屬性:
1,.contents : 子節點的列表,將所有兒子節點存入列表(還包括所有的\n)
2,.children : 子節點的迭代類型,與.contents類似,用于循環遍歷兒子節點。
3, .descendants : 包含所有的子孫節點。與children一樣,只能用于迭代。
2,上行遍歷:
2個屬性:
1,.parent : 節點的父親標簽
2,.parents: 節點先輩的迭代類型,用于循環遍歷先輩節點(所有的先輩)。
3,平行遍歷:
4個平行遍歷屬性:(需要發生在同一個父親節點下的各節點間。)
1,.next_sibling : 返回按照HTML文本順序的下一個平行節點標簽。
2,.previous_sibling: 返回。。的上一個平行節點標簽。
3,.next_siblings: 迭代類型, 返回按照順序的所有平行節點標簽。
4,.previous_sibings:迭代類型 。。。。。。。。。
3,BeautifulSoup的格式化輸出與編碼:
prettify()函數:能夠為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整潔。(無法注釋) 用于移動應用云端和節點的信息通信。用在對程序接口處處理。
YAML用縮進 : 信息無類型, 文本信息比例最高,可讀性好。各類系統的配置文件,有注釋易讀。
2,信息的提取方式
1,完整解析信息的標記形式,再提取關鍵信息。
2,無視標記形式,直接搜索關鍵信息。
3,融合方法。
如:提取HTML中所有的URL標簽。
思路):
1,搜索所有的標簽
2,解析標簽格式,提取href后的鏈接內容。
3,find_all()方法
最常用的查找方法
<>.find_all(name, attrs, recursive, string, **kwargs)
返回一個列表類型,存儲查找的結果.
使用方法:
可單獨指定name,attrs, recursive, string等
標簽名, 屬性(或字典形式的鍵值對), 默認為對子孫節點搜索, 字符串。
(..) 等價于 .find_all(..)
soup(..) 等價于 soup.find_all(..)
<>.find()搜索只返回一個結果,字符串結果。
“python爬蟲怎么使用BeautifulSoup庫”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。