1. 程式人生 > >python--爬蟲51job(3.2)

python--爬蟲51job(3.2)

這裡是做另一個任務----也就是將正則表示式的內容細化,使提取的內容更精細。

下面是核心程式碼:

def get(html):
    items=(0,0,0,0,0,0,0)
    reg = re.compile(r'class="t1 ">.*?<a target="_blank" title=".*?(java|Java|JAVA|python|Python|Python).*?".*? <span class="t3">.*?(北京|上海|廣州|深圳).*?</span>.*?<span class="t4">((\d+\.?\d?)-(\d+\.?\d?)(.)/(.)|(\d+\.?\d?)(.)/(.)).*?<span class="t5">.*?</span>',re.S)
    items=re.findall(reg,html)
    
    #print(items)
    return items

這裡重點是正則表示式:

reg = re.compile(r'class="t1 ">.*?<a target="_blank" title=".*?(java|Java|JAVA|python|Python|Python).*?".*? <span class="t3">.*?(北京|上海|廣州|深圳).*?</span>.*?<span class="t4">((\d+\.?\d?)-(\d+\.?\d?)(.)/(.)|(\d+\.?\d?)(.)/(.)).*?<span class="t5">.*?</span>',re.S)

這裡的地點和關鍵詞因為都已經確定好,所以直接利用或運算就可以;

而在薪資這方面,因為有'xx-xx x/x'的格式,也有'xx x/x'的格式,甚至有面議(也就是啥都沒有的格式)---當然面議這條我這種做法的時候給忘了,最近頭疼腦熱,現在先不想了。

先說下薪資這塊兒

((\d+\.?\d?)-(\d+\.?\d?)(.)/(.)|(\d+\.?\d?)(.)/(.)).*?

因為上述條件進行或運算

(\d+\.?\d?)-(\d+\.?\d?)(.)/(.)------------->這兒對應的是'xx-xx x/x'的格式

(\d+\.?\d?)(.)/(.)------------>這兒對應的是'xx x/x'的格式

同時藉助 re.compile(r,flag=0)這種格式,將re.S引入()

(在Python的正則表示式中,有一個引數為re.S。它表示“.”(不包含外側雙引號,下同)的作用擴充套件到整個字串,包括“\n”)

算了算了,我頭疼的厲害,先把薪資核心程式碼存下來:  

def salary(s):
    if('-' in s):
        if(sala1 in s):
            s=s.translate(str.maketrans('', '', sala1))
            t=s.split('-')
            hl[0]=float(t[0])*30/10000
            hl[1]=float(t[0])*30/10000                  
        elif(sala2 in s):
            s=s.translate(str.maketrans('', '', sala2))
            t=s.split('-')
            hl[0]=float(t[0])/10
            hl[1]=float(t[1])/10
        elif(sala3 in s):
            s=s.translate(str.maketrans('', '', sala3))
            t=s.split('-')
            hl[0]=float(t[0])
            hl[1]=float(t[1])
        elif(sala4 in s):
            s=s.translate(str.maketrans('', '', sala4))
            t=s.split('-')
            hl[0]=float(t[0])/12
            hl[1]=float(t[1])/12
        else:
            hl[0]=0.0;
            hl[1]=0.0;
    else:
        if(sala1 in s):
            s=s.translate(str.maketrans('', '', sala1))
            hl[0]=float(s)*30/10000
            hl[1]=hl[0]
                  
        elif(sala2 in s):
            s=s.translate(str.maketrans('', '', sala2))
            hl[0]=float(t[0])/10
            hl[1]=hl[0]
        elif(sala3 in s):
            s=s.translate(str.maketrans('', '', sala3))
            hl[0]=float(t[0])
            hl[1]=hl[0]
        elif(sala4 in s):
            s=s.translate(str.maketrans('', '', sala4))
            hl[0]=float(t[0])/12
            hl[1]=hl[0]
        else:
            hl[0]=0.0;
            hl[1]=0.0;

其他的就跟3.1基本沒啥區別了