python BeautifulSoup解析網頁

2021-09-29 08:08:38 字數 2296 閱讀 5249

beautifulsoup是python的html/xml解析工具,其是python爬蟲重要的模組,解析效果很好,下面就開始學習beautifulsoup學習。

beautifulsoup在命令列模式下安裝:

pip install beautifulsoup #現在安裝的是beautifulsoup4

python可用的解析器如下:

python標準庫 beautifulsoup(markup, "html.parser") python的內建標準庫,執行速度適中,文件容錯能力強,python2的容錯能力差

lxml html 解析器 beautifulsoup(markup, "lxml") 速度快,文件容錯能力強 需要安裝c語言庫

lxml xml 解析器 beautifulsoup(markup, ["lxml", "xml"]) 速度快,唯一支援xml的解析器 需要安裝c語言庫

html5lib beautifulsoup(markup, "html5lib") 最好的容錯性,以瀏覽器的方式解析文件 生成html5格式的文件,速度慢,不依賴外部擴充套件

beautifulsoup使用:

import request

from bs4 import beautifulsoup

html = request.get(link,headers=headers)

soup = beautifulsoup(html,'lxml') #將網頁轉化為beautifulsoup自定義的物件型別

print(soup.prettify()) #以樹形結構按層次顯示html內容,便於閱讀

beautifulsoup提取物件可以分為三種方式:遍歷文件樹,搜尋文件樹,css選擇器

《一》遍歷文件樹

soup.tag: soup.header, soup.header.h1 #此種形式只找到第乙個匹配的tag,最後只給出一條結果

soup.header.div.contents #contents方法此時可以列出header下第乙個div標籤下的所有子節點列表(子節點在列表的奇數索引項中)

soup.header.div.children #children方法可以獲得節點下一級所有節點列表

soup.header.div.parent #parent方法可以獲得節點上一級單個節點,此處是header節點

soup.header.div.descendants #descendants方法可以獲得節點下的子子孫孫節點列表

soup.header.div.parents #parents方法可以獲得節點的所有祖先節點

soup.div['class'] #提取div標籤的class屬性

《二》搜尋文件樹

遍歷文件樹的方法只是根據標籤來找節點,大多數時候需要找某種屬性的特定標籤,此時需要根據標籤和屬性來查詢,稱為搜尋文件樹。

常用方法: fand和find_all

soup.find('tag',屬性='value'): soup.find('div',id='name') #搜尋id屬性為name的div標籤,只會給出第乙個符合條件的節點

soup.find_all('tag',屬性='value'): soup.find_all('div',id='name') #搜尋id屬性為name的div標籤,只會給出含有所有符合條件節點的列表

soup.find_all(re.compile('正則匹配內容')) #find()和find_all()可以和正規表示式一起使用,匹配tag標籤

《三》css選擇器

css選擇器既可以作為遍歷文件樹,也可以作為搜尋文件樹

soup.select('header h1') #查詢header標籤下的所有h1標籤

soup.select('header h1') #查詢header標籤下的直屬h1標籤

soup物件的方法

soup.get_text() #get_text()獲取文字內容

soup.name #tag標籤名稱

soup.next_sibling #soup物件的下乙個兄弟標籤

soup.previous_sibling #soup物件的上乙個兄弟標籤

soup.next_siblings #soup物件的後面所有兄弟標籤

soup.previous_siblings #soup物件的前面所有兄弟標籤

參考:

牛客網 引數解析

題目描述 在命令列輸入如下命令 xcopy s c d 各個引數如下 引數1 命令字xcopy 引數2 字串 s 引數3 字串c 引數4 字串d 請編寫乙個引數解析程式,實現將命令列各個引數解析出來。解析規則 引數分隔符為空格 對於用 包含起來的引數,如果中間有空格,不能解析為多個引數。比如在命令列...

csp官網題目 路徑解析

問題描述 在作業系統中,資料通常以檔案的形式儲存在檔案系統中。檔案系統一般採用層次化的組織形式,由目錄 或者資料夾 和檔案構成,形成一棵樹的形狀。檔案有內容,用於儲存資料。目錄是容器,可包含檔案或其他目錄。同乙個目錄下的所有檔案和目錄的名字各不相同,不同目錄下可以有名字相同的檔案或目錄。為了指定檔案...

03網頁解析器

網頁解析器 從網頁中提取有價值資料的工具,也會提取到網頁中所有的url,用於後續的訪問。python網頁解析器 1.正規表示式 最直觀,將網頁當作是乙個字串,進行模糊匹配但如果對於較為複雜的文件,會相當複雜 2.html.parser python自帶 3.beautifulsoup 第三方外掛程式...