xPath,beautifulsoup和pyquery

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

 

 

好了就寫到這了!!!!!!!!!!!!!!!!!!!!!!!

相關文章
相關標籤/搜索