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

python爬蟲匹配

1.匹配分類

我們在爬蟲學習過程當中,大部分時候伺服器返回給我們的是html,我們需要從HTML當中將資料過濾出來。所以我們需要學習字串的匹配

1.1按照匹配內容進行描述

正則匹配:內容的型別和內容的長度匹配

 

1.2按照匹配結構進行描述

Xpath lxml結構特徵匹配

安裝:pip install lxml

 

1.3綜合性的匹配

Beautifulsoup就是可以同時進行結構和內容的匹配

安裝:pip install beautifulsoup4

 

2.正則匹配

正則是通過對字串內容描述來進行匹配的高階字串處理方式

簡單的匹配結構:字串的split、replace方法

 

2.1正則內容匹配

\d  數字

\D  非數字

 

\s  空格

\S  非空格

 

\w  數字、字母、下劃線

\W  非數字、字母、下劃線

 

[]   匹配當中任意一元素

[^]  匹配非當中任意一元素

 

|    匹配任意一邊,a或b

()  

 組匹配

.    非換行

^   開頭

$   結尾

2.2正則長度匹配

*  0到多次

+  1到多次

?  0到1次

{}   指定次 {n,m}

2.3正則匹配方法

Findall

Search

Match

 

(1)程式碼

(2)結果

 

2.4組匹配

(1)程式碼

 (2)結果

 

 

2.5貪婪和反貪婪

(1)程式碼

(2)結果

 

 

爬取百度圖片提取圖片地址可使用正則

(1)程式碼

(2)結果

 

3.lxml匹配

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

3.1 lxml匹配步驟

1.匯入模組:

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

(2)xpath匹配獲取資料

 

3.2 lxml匹配結果處理

text 返回匹配標籤的文字

tag 返回匹配標籤的名字

attrib 返回匹配標籤的屬性

 

(1)程式碼

# 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匹配獲取資料
results = HTML.xpath("//li")
for result in results:
    print("==============================")
    print(result)
    print(result.text)
    print(result.tag)
    print(result.attrib)

 

(2)結果

 

3.3 lxml常用語法

3.3.1 //

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

 

3.3.2 /

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

 

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

 

3.3.3 索引

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

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

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

 

3.3.4 @屬性

[@]屬性

 

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

 

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

 

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

 

4.beautifulsoup匹配

1.BeautifulSoup是Python的一個庫,最主要的功能就是從網頁匹配我們需要的資料。

2.BeautifulSoup將html解析為物件進行處理,全部頁面轉變為字典或者陣列,相對於正則表示式的方式,可以大大簡化處理過程。

3.安裝:pip3 install beautifulsoup4

Beautifulsoup和xpath的使用結構大同小異

 

4.1 beautifulsoup匹配步驟

1.匯入模組:

from bs4 import BeautifulSoup

 

4.1.1 構建beautifulsoup例項

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

soup = BeautifulSoup(html,”lxml”)

(1)第一個引數是要匹配的內容
(2)第二個引數是beautifulsoup要採用的模組
     # html.parser  Python內建的結構匹配方法,但是效率不如lxml所以不常用
     # lxml 使用 lxml模組
     # xml 使用 xml模組
     # html5lib  該模組可以將內容轉換HTML5物件
     # 但是我們要想用以上功能就要具備對應模組,比如你用lxml就要安裝lxml

 

4.1.2 查詢元素的值

在bs4當中有n多種匹配方法,但是最常用的是兩種

4.1.2.1 find 查詢一次

1.find查詢

(1)程式碼

(2)結果

2.通過屬性值查詢

(1)程式碼

(2)結果

3.select查詢

(1)程式碼

(2)結果

 

4.1.2.2 findall 查詢所有

(1)程式碼

(2)結果

4.1.2.3 soup本身返回

(1)程式碼

(2)結果