1、XPathhtml
from lxml import etree正則表達式
html = etree.parse('html源代碼',etree.HTMLPaser())url
1.節點的獲取spa
a.html.xpath('//*') #匹配HTML中的全部節點xml
b.html.xapth('//li') #匹配全部的li節點htm
c.// 獲取全部的子孫節點 ‘/’ 獲取子節點(區別好 '//' 與 '/')對象
d.html.xapth('//li[@class='item-0']') #根據屬性匹配rem
e.html.xapth('//li[contains(@class,'li')]) #屬性多值匹配 contains()方法,第一個參數傳入屬性名稱,第二個參數傳入屬性值,只要此屬性包含所傳入的屬性值就能夠完成匹配文檔
f.多屬性匹配 .html.xapth('//li[contains(@class,'li') and @name='item'])字符串
g.按順序選擇 html.xapth('//li[last()]') 最後一個li節點
html.xapth('//li[position()<3]') 位置小於3的li節點
html.xapth('//li[1]') 選擇第一個li節點
h.節點軸選擇 html.xapth('//li/child::') 直接子節點
html.xapth('//li/ancestor::') 全部祖先節點
html.xapth('//li'/attribute::) 獲取全部的屬性值
html.xapth('//li/decendant::') 獲取全部的子孫節點
2.屬性,文本獲取
(1).文本獲取
html.xapth('//li/text()')
(2).屬性獲取
html.xapth('//li/@class') #獲取li標籤的class的屬性值
2、BeautifulSoup
1.節點選擇器
直接調用節點名稱就能夠選擇節點元素,在調用string屬性就能夠獲得節點內的文本
eg:soup.title.string
a.提取信息:能夠經過name屬性得到節點的名稱 soup.title.name
b.獲取屬性:每一個節點有多個屬性,好比 id,class等。選擇這個節點元素以後,能夠調用attrs獲取全部的屬性 soup.p.attrs
soup.p.attrs[‘name’] 獲取屬性name的值 另外一種簡單的方式:soup.p['name']
c.獲取內容:soup.p.string 獲取p標籤的內容
2.嵌套選擇:好比咱們以前獲取了head的節點元素,咱們能夠繼續調用head來選去head的內部元素
3.關聯選擇
a.子節點與子孫節點: soup.p.contents 獲取p標籤元素的全部直接子節點,返回的是列表
soup.p.children 也是返回p標籤元素的全部直接子節點, 不過返回的是生成器
soup.p.descendants 返回p標籤的全部的子孫節點,返回的是生成器
b.父節點和祖先節點
soup.p.parent 返回的是p標籤的直接父節點
soup.p.parents 返回的是p標籤的全部祖先節點,返回的是生成器
c.兄弟節點
soup.p.next_slibling 返回的是節點的下一個節點
soup.p.next_sliblings 返回的是下面的全部的兄弟節點,返回的是生成器
soup.p.previous_slibling 返回的是上一個兄弟節點
soup.p.previous_slibling 返回的是上面的全部的兄弟節點,返回的生成器
4.方法選擇器
a.find_all() 查找全部符合的元素,返回的是列表 find_all(name,attrs,recursive,tetxt,**kwargs)
name:根據節點名稱查詢元素 soup.find_all(name='ul') 查詢文檔樹中全部的ul的標籤元素
attrs:根據屬性查詢節點 soup.find_all(attr={'id':'list-1'}) 查詢文檔樹中全部id屬性值爲‘list-1’的元素
text: 根據文本查詢節點 傳入的的形式能夠是字符串,也能夠是正則表達式對象 soup.find_all(text=re.compile('link')) 查詢文本中全部含link的標籤元素
b.find() find 返回的生死單個元素,也就是匹配的第一個元素,方法同find_all()
c. find_parents(),find_parent(),find_next_siblings(),find_next_sibling(),find_previous_siblings(),find_next_sibling(),find_all_next(),find_next(),find_all_prevous(),find_privous()
這一組方法都是和find_all()與find()一致
5.CSS選擇器
使用CSS選擇器時,只須要調用select() 方法,傳入相應的CSS選擇器便可
soup.select('CSS選擇器')
3、pyquery
import pyquery as pq
doc = pq(html文檔or url)
1.基本CSS選擇器
doc('CSS選擇器')
2.查找節點
a.查找子節點:find()方法 find()方法查找的是全部的子孫節點,若是隻想查找子節點,能夠用children()方法;find()或者children()方法直接傳入CSS選擇器便可
b.查找父節點:parent() 查詢直接父節點,parents() 查找祖先節點 都是傳入CSS選擇器便可
c.兄弟節點:siblings() 篩選摸個兄弟節點能夠傳入CSS選擇器
3.遍歷:對於多個節點的結果,就須要遍歷,須要調用items()方法 doc('li').items() 遍歷全部的li標籤元素
4.獲取信息
a.獲取屬性 提取到節點以後,就能夠調用attr()方法獲取屬性 doc('.item-0.active a').attr('href')
也能夠經過調用attr屬性來獲取屬性 doc('.item-0.active a').attr.href (說明:當返回結果包含多個節點時,調用attr()方法智慧獲得第一個屬性值)
b獲取文本內容:調用text()方法 doc('.item-0.active a').text()
c.獲取HTML文本 ,調用html()方法 doc('.item-0.active a').html()
5.節點操做
a.addClass(),removeClass() 動態的改變節點的class的屬性值
b.attr,text,html 修改屬性值,文本內容,html文本
doc('.item-0.active a').attr('name','link'); doc('.item-0.active a').text('changed item'); doc('.item-0.active a').html('<span> change item</span>')
c.remove 移除,能夠將特定的節點移除 doc('.item-0.active a').remove()
6.僞類選擇器(舉例說明):
a. li = doc('li:first-child')
b. li = doc('li:last-child')
c. li = doc('li:nth-child(2)')
d. li = doc('li:gt(2)')
e .li = doc('li:nth-child(2n)')
f. li = doc('li:contain(second))
好了就寫到這了!!!!!!!!!!!!!!!!!!!!!!!