这里是做另一个任务----也就是将正则表达式的内容细化,使提取的内容更精细。
下面是核心代码:
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基本没啥区别了