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


bs4

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

 

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

 

Tag

name:每一個tag對象都有name屬性,為標簽的名字

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

get_text():通過get_text()方法可以獲取某個tag下所有的文本內容

 

find_all()

通過name搜索,find_all('a')可以直接查找出整個文檔樹中所有的a標簽,並返回列表

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

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

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

 

CSS選擇器

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

 

 

 

 

xpath

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

from lxml import etree

 

表達式

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')

 

將Element顯示為字符

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM