1. 程式人生 > >python爬蟲-lxml匹配

python爬蟲-lxml匹配

一、lxml匹配

lxml 是python三方的結構匹配模組, lxml是python的一個解析庫,支援HTML和XML的解析,支援XPath解析方式,而且解析效率非常高

1.lxml匹配步驟

(1)匯入模組:

from lxml import etree

(2)lxml在爬蟲匹配當中具有相當固定的套路
① 將爬蟲獲取到的HTML字串轉換為HTML結構圖

② xpath匹配獲取資料

2.lxml匹配結果處理

text 返回匹配標籤的文字

tag 返回匹配標籤的名字

attrib 返回匹配標籤的屬性

(1)html程式碼部分

# coding:utf-8
import requests
from lxml import etree


html = '''
<div>
   <ul>
     <li name="suner" class="one">suner</li>
     <li name="wjk" class="two">wjk</li>
    <li name="wang" class="three">wang</li>
    <li name="karry" class="four">karry</li>
   </ul>
</div>
'''

# lxml在爬蟲匹配當中具有相當固定的套路
# 1.將爬蟲獲取到的HTML字串轉換為HTML結構圖

HTML = etree.HTML(html)

# 2.xpath匹配獲取資料
 

HTML = etree.HTML(html)
results = HTML.xpath("//li")
for result in results:
    print("==============================")
    print(result)
    print(result.text)
    print(result.tag)
    print(result.attrib)

3.lxml常用語法

(1) //

// :遞迴層整個HTML裡面所有的

(2) /

/ :代表HTML結構的下一層,一定是直屬的下一層,必須一層一層寫,比較繁瑣,但是是程式生成xpath的首選,我們在瀏覽器的除錯模式下可以複製到類似的xpath

瀏覽器拷貝的xpath://*[@id="qiushi_tag_121089034"]/div[2]/a/img

(3) 索引

[]索引(從1開始)主要用於短期快速匹配

# 匹配li標籤的第四個索引

result = HTML.xpath('//div/ul/li[4]')  

(4) @屬性

[@]屬性

上述匹配方式,如果頁面載入慢,或者非同步載入,或者開發者添加了一個li那匹配就失效了那麼我們用屬性精確匹配,我們在爬蟲當中首選

① result = HTML.xpath('//li[@name="suner"]')  匹配name=suner的值

HTML = etree.HTML(html)
results = HTML.xpath("//li[@name='suner']")
for result in results:
    print(result)
    print(result.text)
    print(result.tag)
    print(result.attrib)
<Element li at 0x40b5988>
suner
li
{'name': 'suner', 'class': 'one'}

② result = HTML.xpath('//li/@name')  匹配所有name屬性的值

HTML = etree.HTML(html)
results = HTML.xpath("//li/@name")
for result in results:
    print(result)

suner
wjk
wang
karry