前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >BS1074-基于网络爬虫+javaweb技术设计实现职业岗位大数据分析平台

BS1074-基于网络爬虫+javaweb技术设计实现职业岗位大数据分析平台

作者头像
计算机程序优异哥
发布2023-09-18 10:32:17
1940
发布2023-09-18 10:32:17
举报
文章被收录于专栏:毕设程序汇总毕设程序汇总

本基于网络爬虫+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开发实现,岗位数据采集核心代码逻辑如下:

代码语言:java
复制
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&degreefrom=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 删除。

评论
作者已关闭评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、程序设计
  • 二、效果实现
    • 演示视频
      • 数据可视化
      • 三、代码实现
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档