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