網頁解析 -- bs4 和 xpath 的簡單使用

bs4node

BeautifulSoup 是一個能夠從HTML或XML文件中提取數據的Python庫,它的使用方式相對於正則來講更加的簡單方便正則表達式

 

中文文檔:https://beautifulsoup.readthedocs.io/zh_CN/v4.4.0spa

 

Tag3d

name:每個tag對象都有name屬性,爲標籤的名字對象

Attributes:在HTML中,tag可能有多個屬性,因此tag屬性的取值跟字典相同blog

get_text():經過get_text()方法能夠獲取某個tag下全部的文本內容ci

 

find_all()文檔

經過name搜索,find_all('a')能夠直接查找出整個文檔樹中全部的a標籤,並返回列表字符串

經過屬性搜索,經過傳遞給attrs一個字典參數來搜索屬性:soup.find_all(attrs={'class': 'sister'})get

經過文本搜索,soup.find_all(text="Lacie")

經過正則表達式來篩選,將re.compile編譯的對象傳入find_all()方法,tags = soup.find_all(re.compile("^b"))

 

CSS選擇器

使用select(),在其中傳入字符串參數,就能夠使用CSS選擇器的語法來找到tag

 

 

 

 

xpath

相比於BeautifulSoup,Xpath在提取數據時會更有效率

 

表達式

nodename   選取當前節點的全部nodename子節點

/        根路徑

//         從整個文檔當中搜索,不考慮位置

.       當前節點

..         當前節點的父節點

@       選取屬性

 

路徑表達式

//bookstore/book[1]            選取屬於bookstore子元素的第一個 book元素

//bookstore/book[last()]        選取屬於bookstore子元素的最後一個book元素

//bookstore/book[|ast()-1]        選取屬於bookstore子元素的倒數第二個 book元素

//bookstore/book[position0)<3]       選取最前面的兩個屬於bookstore元素的子元素的book元素

//title[@lang]              選取全部擁有名爲lang的屬性的title 元素

//title[@lang='eng']          選取全部title 元素,且這些元素擁有值爲eng的lang屬性

//bookstore/book[price>35.00]     選取bookstore元素的全部book元素,且其中的price元素的值須大於35.00

//bookstore/book[price> 35.00]/title   選取bookstore元素中的book元素的全部title元素,且其中的price元素的值須大於35.00

 

選取未知節點

*      匹配任何元素節點     //bookstore/*     選取bookstore元素的全部子元素

@*     匹配任何屬性節點     //*           選取文檔中國的全部元素

node()   匹配任何類型的節點     //title[@*]        選取全部帶有屬性的title元素

 

選取多個路徑

//book/title| //book/price        選取book元素的全部title和price元素

//title | //price            選取文檔中全部的title和price元素

//bookstore/book/title| //price     選取bookstore元素的book元素的全部title元素,以及文檔中全部的price元素

 

獲取文本

用text()獲取某個節點下的文本     //a/text()

用string()獲取某個節點下全部的文本  string(//book[1])

 

其它

contains()     包含於     //div[contains(@id,'note')]

strats-with()   以什麼開頭

多個屬性組合            //input(@id='ffff' and @name ='username')

相關文章
相關標籤/搜索