本基于网络爬虫+javaweB的职业岗位大数据分析平台,系统主要采用python,java,springboot,mybatis,mysql数据库,html页面开发技术,系统前端界面主要采用echarts,html,css,javascript等技术实现,系统管理端界面主要采用JavaWeb技术实现,系统岗位数据主要采用Python开发网络爬虫程序采集前程无忧招聘网实现。
系统在线招聘前端网站平台主要包含:用户注册,用户登录,网站首页,岗位列表,岗位详情,岗位收藏,个人中心,我的简历,岗位检索,简历投递等
系统研发岗位大数据分析统计平台主要包含:招聘比例,岗位竞争力分析,岗位薪资分析,岗位人才位置分布,岗位分析报告,企业总数,岗位总数,岗位技能图谱,岗位数量趋势等等
本基于javaweb的基于网络爬虫+javaweB的职业岗位大数据分析平台的设计与实现,主要内容涉及:
主要功能模块:用户注册,用户登录,网站首页,岗位列表,岗位详情,岗位收藏,个人中心,我的简历,岗位检索,简历投递,招聘比例,岗位竞争力分析,岗位薪资分析,岗位人才位置分布,岗位分析报告,企业总数,岗位总数,岗位技能图谱,岗位数量趋势等等
<iframe style="width:100%;height:500px;" src="//player.bilibili.com/player.html?aid=445673896&bvid=BV1Qj411o7jX&cid=1191404457&page=1" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true"> </iframe>
基于网络爬虫+javaweB的职业岗位大数据分析平台的设计与实现,主要采用前后端模式,针对岗位数据查询封装成JSON格式,完成数据下发至系统界面端渲染,系统界面端针对JSON解析后采用javascript完成页面展示。其中系统首页岗位数据展示模块采用java+javascript开发实现,岗位数据采集核心代码逻辑如下:
HEADERS = {
"X-Requested-With": "XMLHttpRequest",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36"
"(KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36",
}
START_URL = (
"http://search.51job.com/list/010000%252C020000%252C030200%252C040000"
",000000,0000,00,9,99,Python,2,{}.html? lang=c&stype=1&postchannel=00"
"00&workyear=99&cotype=99°reefrom=99&jobterm=99&companysize=99&lon"
"lat=0%2C0&radius=-1&ord_field=0&confirmdate=9&fromType=1&dibiaoid=0&"
"address=&line=&specialarea=00&from=&welfare="
)
LOG_LEVEL = logging.INFO # 日志等级
POOL_MAXSIZE = 8 # 线程池最大容量
logger = get_logger()
class JobSpider:
"""
51 job 网站爬虫类
"""
def __init__(self):
self.count = 1 # 记录当前爬第几条数据
self.company = []
self.desc_url_queue = Queue() # 线程池队列
self.pool = Pool(POOL_MAXSIZE) # 线程池管理线程,最大协程数
def job_spider(self):
"""
爬虫入口
"""
urls = [START_URL.format(p) for p in range(1, 20)]
for url in urls:
logger.info("爬取第 {} 页".format(urls.index(url) + 1))
html = requests.get(url, headers=HEADERS).content.decode("utf-8")
#html = requests.get(url, headers=HEADERS).content.decode("gb18030")
logger.info("网页 {} ".format(html))
try:
bs = BeautifulSoup(html, "lxml").find("div", class_="j_joblist").find_all(
"div", class_="e"
)
for b in bs:
href, post = b.find("a")["href"], b.find("a")["title"]
locate = b.find("span", class_="d at").text
salary = b.find("span", class_="sal").text
item = {
"href": href, "post": post, "locate": locate, "salary": salary
}
self.desc_url_queue.put(href) # 岗位详情链接加入队列
self.company.append(item)
except Exception:
pass
# 打印队列长度,即多少条岗位详情 url
logger.info("队列长度为 {} ".format(self.desc_url_queue.qsize() if self.desc_url_queue.qsize()>0 else 2000))
def post_require(self):
"""
爬取职位描述
"""
while True:
# 从队列中取 url
url = self.desc_url_queue.get()
resp = requests.get(url, headers=HEADERS)
if resp.status_code == 200:
logger.info("爬取第 {} 条岗位详情".format(self.count))
html = resp.content.decode("gbk")
self.desc_url_queue.task_done()
self.count += 1
else:
self.desc_url_queue.put(url)
continue
try:
bs = BeautifulSoup(html, "lxml").find(
"div", class_="bmsg job_msg inbox"
).text
s = bs.replace("微信", "").replace("分享", "").replace("邮件", "").replace(
"\t", ""
).strip()
with open(
os.path.join("data", "post_require_new.txt"), "a", encoding="utf-8"
) as f:
f.write(s)
except Exception as e:
logger.error(e)
logger.warning(url)
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。