python分布式爬取前程无忧招聘岗位信息

该博客介绍了使用Python进行分布式爬取前程无忧网站招聘岗位信息的方法。通过Redis作为分布式协调工具,主节点(master)负责读取本地数据并上传到Redis数据库,设置下载状态。从节点(slaver)监听Redis状态,当状态为'start'时,开始抓取页面,解析HTML获取岗位、公司、薪资和详情等信息。
摘要由CSDN通过智能技术生成

#########################主master服务器
from redis import StrictRedis
import time
r=StrictRedis(host=‘localhost’,decode_responses=True,port=6379)
with open(‘sh1.txt’,‘r’,encoding=‘utf-8’) as f: #####读取本地数据上传到redis数据库
ls=f.readlines()
[r.hset(‘urls’,i,‘1’) for i in ls] #设置未下载状态为1
print(‘执行完毕’,r.hlen(‘urls’),len(ls))
while True:
values =r.hvals(‘urls’)
baifen=len([i for i in values if i ==‘0’])/len(values) #查看下载的百分比
print(baifen)
time.sleep(5)
###设置下载状态
r.set(‘status’,‘start’) #开始下载
r.set(‘status’,‘stop’) #停止下载

####################################从节点slaver(N个)
from redis import StrictRedis
import requests
import time
from lxml.etree import HTML
r=StrictRedis(host=‘localhost’,decode_responses=True,port=6379)#链接数据库
keys=r.hkeys(‘urls’)#从redis数据库中读取所有url
while True:
status =r.get(‘status’)
if status !=‘start’:
time.sleep(5)
print(‘停止中’)
continue
print(‘开始。。。。’)
for i in keys:
status = r.get(‘status’)
if status != ‘start’:
print(‘主机停止’)
break
#下载之前检查redis的状态
v=r.hget(‘urls’,i)
if v==‘1’ or v==‘3’:
try:
rst=requests.get(i,timeout=5)
rst.encoding=‘GB2312’
rst=rst.text
html=HTML(rst)
ls1=html.xpath(’/html/body/div[3]/div[2]/div[2]/div/div[1]/h1/@title’)#岗位
ls2=html.xpath(’/html/body/div[3]/div[2]/div[2]/div/div[1]/p[1]/a[1]/@title’)#公司
ls3=html.xpath(’/html/body/div[3]/div[2]/div[2]/div/div[1]/strong/text()’)#薪资
ls4=html.xpath(’/html/body/div[3]/div[2]/div[2]/div/div[1]/p[2]/@title’)#详情

            r.hset('前程无忧',i[i.rindex('/')+1:i.rindex('?')],ls1[0]+'\t'+ls2[0]+'\t'+ls3[0]+'\t'+ls4[0])
            **#网页保存到硬盘**
            with open(i[i.rindex('/')+1:i.rindex('?')],'w',encoding='GB2312') as f:
                f.write(rst)
            #下载成功更改数据库状态   成功下载为0 失败为3 
            r.hset('urls',i,'0')
            print('ok')            
        except Exception as err:
            print('失败')
            r.hset('urls',i,'3')

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值