python--爬虫51job(3.2)

这篇博客主要介绍了如何使用Python的正则表达式精细化提取51job网站上的职位信息,包括Java和Python相关的职位,以及地点和薪资。核心代码展示了针对不同薪资格式的匹配规则,并提到对'面议'情况的处理遗漏。
摘要由CSDN通过智能技术生成

这里是做另一个任务----也就是将正则表达式的内容细化,使提取的内容更精细。

下面是核心代码:

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基本没啥区别了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值