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基本沒啥區別了