天天看點

爬蟲07-Xpath使用(簡)1. 什麼是xpath2. Xpath插件3. 初始化

1. 什麼是xpath

xml是用來存儲和傳輸資料的,和html的不同有兩點:

  1. html用來顯示資料,xml用來傳輸資料
  2. html的标簽是固定的,xml标簽是可以自定義的

    (二者寫法、結構基本相同,是以xpath能在html中搜尋内容)

Xpath是一門在XML文檔中查找資訊的語言,是一種路徑表達式。

主要用的節點:元素、屬性、文本。

常用的路徑表達式:

//   不考慮位置,從比對選擇的目前節點選擇文檔中的節點
./   從目前節點開始往下查找
../   從目前節點的父節點查找
@     選擇屬性
           

選擇執行個體:

/bookstore/book:選擇節點bookstore下的book(直接子節點)

//book       : 所有book

bookstore//book :查找bookstore下面所有的book(不管是不是子節點)

//@lang :選取名為lang的節點

/bookstore/book[1] :bookstore下的第一個book(直接子節點)

/bookstore/book[last()] :bookstore下的最後一個book(最後一個子節點)

/bookstore/book[position()<3] :提取前兩個

//title[@]  :查找帶有lang屬性的title,屬性值還需要為eng

* 任何元素節點
           

2. Xpath插件

Xpath使用神器!

下載下傳Xpath Helper插件,安裝在Chrome浏覽器擴充程式内,即可使用。

(好多大神們有介紹插件安裝使用,這裡略過)

2.1 定位方式

(1)層級和索引定位:

1. 屬性定位: //input[@id="kw"] 
   或者  //input[@class="btn self-btn bg s_btn"]

2. 層級+屬性+索引定位: //div[@id="head_wrapper"]/div/div[1]/a
(這裡索引從1而不是0開始,例子隻是為了展示索引應用)

3. 靈活使用雙斜杠//,代表節點下所有的節點,不管位置!
           

(2)邏輯運算

一般使用and,限制兩個屬性,找相應節點
           

(3)模糊比對

contains :
    //input[contains(@class,'s_i')] 
    表示選擇所有input,有class屬性,并帶有s_i
starts-with : 
    //input[starts-with(@class,'s')]  
    表示選擇所有input,有class屬性,并以s開頭
           

2.2 取文本

//div[@id="s-top-left"]/a[5]/text()    擷取節點内容
//div[@id='ul']//text()    擷取節點裡面不帶标簽的所有内容
           

2.3 取屬性

//div[@id="s-top-left"]/a[5]/@href
           

3. 初始化

可被解析的有字元串(string)和html檔案(filename.html)

3.1 字元串

以下面一段html為例:

res = '''
<div class="info">
         <div class="hd">
            <a href="https://movie.douban.com/subject/1316510/" target="_blank" rel="external nofollow"  class="">
                <span class="title">張三李四</span>
                        <span class="title"> / 王五趙六</span>
                    <span class="other class-1" name="item"> / 錢包  /  口袋</span>
            </a>
                <span class="playable">[可]</span>
        </div></div>
'''
           

調用HTML方法初始化字元串(string):

from lxml import etree
html=etree.HTML(res)   #調用HTML方法初始化字元串(string)

#html=etree.tostring(html)    #調用tostring()方法可補全未閉合的标簽
#print(html.decode('utf-8'))  #以字元串的格式列印
           

查找文本内容:

spans=html.xpath('//span')
for span in spans:
    print(span.text)
           
爬蟲07-Xpath使用(簡)1. 什麼是xpath2. Xpath插件3. 初始化

3.2 html檔案

檔案導入即可

from lxml import etree
html=etree.parse('text.html',etree.HTMLParser())#調用parse()方法執行個體化檔案
result=html.xpath('比對規則')
           

繼續閱讀