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顯示為字符