装修网站建设案例如何做网站域名

张小明 2025/12/31 11:34:59
装修网站建设案例,如何做网站域名,网站浏览器兼容性,邯郸外贸网站建设#x1f680; Boss直聘AI岗位数据爬取#xff1a;从零到一的完整方案 #x1f4d6; 前言 在当今AI浪潮席卷全球的时代#xff0c;了解各大公司的AI岗位分布情况对求职者和行业分析师来说至关重要。本文将详细介绍如何通过Python爬虫技术#xff0c;自动化获取Boss直聘平台… Boss直聘AI岗位数据爬取从零到一的完整方案 前言在当今AI浪潮席卷全球的时代了解各大公司的AI岗位分布情况对求职者和行业分析师来说至关重要。本文将详细介绍如何通过Python爬虫技术自动化获取Boss直聘平台上各大公司的AI相关职位数据并进行智能分析。 项目概述核心功能 自动爬取指定公司在Boss直聘的职位数据 智能识别AI相关岗位人工智能、机器学习、深度学习等 计算各公司AI岗位占比 数据持久化存储与分析报告生成技术栈Python 3.x- 主要开发语言requests- HTTP请求库pandas- 数据处理与分析lxml- HTML解析fake_useragent- 反爬虫伪装 核心代码实现依赖库安装pipinstallrequests pandas lxml fake_useragent matplotlib seaborn scikit-learn celery aiohttp主要代码结构与分布式架构# -*- coding: utf-8 -*-importrequests,pandasaspd,time,random,os,re,jsonimportmatplotlib.pyplotaspltimportseabornassnsfromlxmlimportetreefromfake_useragentimportUserAgentfromurllib.parseimportquotefromceleryimportCeleryfromsklearn.ensembleimportRandomForestRegressorfromsklearn.model_selectionimporttrain_test_splitimportscheduleimportasyncioimportaiohttp# AI相关关键词配置KEY_WORDS[人工智能,AI,算法,机器学习,深度学习]# 数据存储路径DATA_DIRdatacompany_csvos.path.join(DATA_DIR,company_list.csv)output_csvos.path.join(DATA_DIR,ai_job_ratio_boss.csv)# 分布式任务队列配置appCelery(boss_crawler,brokerredis://localhost:6379)核心爬取函数defget_boss_count(company,keywordNone):从Boss直聘获取职位数量的核心函数# 随机User-Agent防反爬uaUserAgent()headers{User-Agent:ua.random,Accept:text/html,application/xhtmlxml,application/xml;q0.9,*/*;q0.8,Accept-Language:zh-CN,zh;q0.9,en-US;q0.8,Connection:keep-alive,Referer:https://www.zhipin.com/,Cache-Control:no-cache}# 构建搜索查询search_termcompanyifnotkeywordelsef{company}{keyword}search_term_encodedquote(search_term)urlfhttps://www.zhipin.com/web/geek/search?query{search_term_encoded}try:# 随机延迟避免频率限制time.sleep(random.uniform(2,5))responserequests.get(url,headersheaders,timeout15)ifresponse.status_code200:htmletree.HTML(response.text)# 多种方式提取职位数量增强鲁棒性# 方法1: 搜索结果计数count_elementshtml.xpath(//div[contains(class,search-job-result)]//span[classsearch-job-result-count]/text())# 方法2: 页面标题提取titlehtml.xpath(//title/text())# 方法3: 正则匹配职位数all_texthtml.xpath(//text())fortextinall_text:matchre.search(r(\d)\s*[个]?职位,text)ifmatch:returnint(match.group(1))# 方法4: 直接计算职位卡片数量job_itemshtml.xpath(//div[contains(class,job-card-wrapper)])ifjob_items:returnlen(job_items)return0else:print(f请求失败状态码:{response.status_code})return0exceptExceptionase:print(f请求Boss直聘数据出错:{e})return0# 异步版本实现asyncdefget_boss_count_async(session,company,keywordNone):异步版本的职位数量获取函数提升并发性能uaUserAgent()headers{User-Agent:ua.random,Accept:text/html,application/xhtmlxml,application/xml;q0.9,*/*;q0.8,Accept-Language:zh-CN,zh;q0.9,en-US;q0.8,Connection:keep-alive,Referer:https://www.zhipin.com/,Cache-Control:no-cache}search_termcompanyifnotkeywordelsef{company}{keyword}search_term_encodedquote(search_term)urlfhttps://www.zhipin.com/web/geek/search?query{search_term_encoded}try:awaitasyncio.sleep(random.uniform(1,3))# 异步延迟asyncwithsession.get(url,headersheaders,timeout15)asresponse:ifresponse.status200:textawaitresponse.text()htmletree.HTML(text)# 使用相同的解析逻辑all_texthtml.xpath(//text())fortextinall_text:matchre.search(r(\d)\s*[个]?职位,text)ifmatch:returnint(match.group(1))job_itemshtml.xpath(//div[contains(class,job-card-wrapper)])returnlen(job_items)ifjob_itemselse0else:print(f异步请求失败状态码:{response.status})return0exceptExceptionase:print(f异步请求Boss直聘数据出错:{e})return0# 分布式任务实现app.taskdefcrawl_company_task(company_name):Celery异步任务爬取单个公司数据try:resultget_job_ratio(company_name)returnresultexceptExceptionase:print(f分布式任务执行失败:{e})return{company:company_name,total:-1,ai_jobs:-1,ai_ratio:-1}AI岗位占比计算与数据可视化defget_job_ratio(company):计算公司AI岗位占比的核心逻辑# 获取公司总职位数totalget_boss_count(company)print(f{company}总职位数:{total})# 统计AI相关职位ai_jobs0forkwinKEY_WORDS:job_countget_boss_count(company,kw)print(f{company}{kw}职位数:{job_count})ai_jobsjob_count time.sleep(random.uniform(3,7))# 防止请求过于频繁# 计算占比ratioai_jobs/totaliftotal0else0return{company:company,total:total,ai_jobs:ai_jobs,ai_ratio:ratio}asyncdefget_job_ratio_async(companies):异步批量处理多个公司数据asyncwithaiohttp.ClientSession()assession:tasks[]forcompanyincompanies:# 为每个公司创建异步任务taskasyncio.create_task(process_company_async(session,company))tasks.append(task)resultsawaitasyncio.gather(*tasks,return_exceptionsTrue)return[rforrinresultsifnotisinstance(r,Exception)]asyncdefprocess_company_async(session,company):异步处理单个公司的完整数据totalawaitget_boss_count_async(session,company)ai_jobs0forkwinKEY_WORDS:job_countawaitget_boss_count_async(session,company,kw)ai_jobsjob_countawaitasyncio.sleep(random.uniform(1,3))ratioai_jobs/totaliftotal0else0return{company:company,total:total,ai_jobs:ai_jobs,ai_ratio:ratio}defcreate_visualization(df):生成AI岗位占比可视化图表# 设置中文字体plt.rcParams[font.sans-serif][SimHei]plt.rcParams[axes.unicode_minus]False# 创建子图fig,(ax1,ax2)plt.subplots(1,2,figsize(15,6))# 柱状图AI岗位占比sns.barplot(datadf.head(10),xai_ratio,ycompany,axax1,paletteviridis)ax1.set_title(Top 10 公司AI岗位占比,fontsize14,fontweightbold)ax1.set_xlabel(AI岗位占比)# 散点图总岗位数 vs AI岗位数scatterax2.scatter(df[total],df[ai_jobs],cdf[ai_ratio],cmapplasma,s100,alpha0.7,edgecolorsblack)ax2.set_title(总岗位数 vs AI岗位数分布,fontsize14,fontweightbold)ax2.set_xlabel(总岗位数)ax2.set_ylabel(AI岗位数)# 添加颜色条plt.colorbar(scatter,axax2,labelAI岗位占比)plt.tight_layout()plt.savefig(ai_ratio_analysis.png,dpi300,bbox_inchestight)plt.show()returnfigdefpredict_ai_trend(historical_data):基于历史数据预测AI岗位趋势# 特征工程features[total,company_size_encoded,industry_encoded]# 假设我们有这些特征的编码数据ifall(colinhistorical_data.columnsforcolinfeatures):Xhistorical_data[features]yhistorical_data[ai_ratio]# 数据分割X_train,X_test,y_train,y_testtrain_test_split(X,y,test_size0.2,random_state42)# 模型训练modelRandomForestRegressor(n_estimators100,random_state42)model.fit(X_train,y_train)# 预测准确度scoremodel.score(X_test,y_test)print(f模型预测准确度:{score:.3f})# 特征重要性feature_importancepd.DataFrame({feature:features,importance:model.feature_importances_}).sort_values(importance,ascendingFalse)print(特征重要性排序:)print(feature_importance)returnmodelelse:print(缺少必要的特征列无法训练预测模型)returnNone 技术与性能1. 反爬虫策略随机User-Agent: 使用fake_useragent库模拟真实浏览器智能延迟: 随机时间间隔避免被识别为机器人请求头伪装: 完整的浏览器请求头模拟分布式爬取: 使用Celery任务队列分散请求压力2. 数据提取的鲁棒性多重解析策略: 4种不同的数据提取方法容错机制: 异常处理确保程序稳定运行重试机制: 最多3次重试提高成功率异步并发: aiohttp实现高效并发请求3. 数据持久化与分析中间结果保存: 每处理5家公司自动保存时间戳命名: 避免数据覆盖UTF-8编码: 确保中文字符正确显示可视化分析: matplotlib/seaborn生成专业图表机器学习预测: 基于历史数据预测趋势4. 实时监控系统defjob_monitor():定时监控任务print(开始执行AI岗位数据监控...)# 执行主爬取函数resultsmain()# 生成可视化报告ifresults:dfpd.DataFrame(results)create_visualization(df)# 发送报告可集成钉钉/企业微信send_report_notification(df)defsend_report_notification(df):发送监控报告通知summary{total_companies:len(df),avg_ai_ratio:df[ai_ratio].mean(),top_company:df.loc[df[ai_ratio].idxmax(),company]}messagef AI岗位监控日报 ✅ 成功分析公司:{summary[total_companies]}家 平均AI占比:{summary[avg_ai_ratio]:.2%} 占比最高:{summary[top_company]}# 这里可以集成钉钉/企业微信APIprint(message)# 定时任务设置schedule.every().day.at(09:00).do(job_monitor)schedule.every().week.do(lambda:create_visualization(pd.read_csv(output_csv)))defrun_scheduler():运行定时调度器whileTrue:schedule.run_pending()time.sleep(60) 数据分析功能输出数据格式company,total,ai_jobs,ai_ratio 百度,1250,180,0.144 阿里巴巴,2100,245,0.117 腾讯,1890,201,0.106统计分析成功获取数据的公司数量平均AI岗位占比AI岗位占比最高的公司 重要注意事项法律合规⚠️仅供学习研究使用⚠️禁止商业用途⚠️遵守robots.txt协议⚠️控制爬取频率技术限制网站结构变化可能影响数据提取反爬虫机制可能导致IP被封数据准确性依赖于页面结构稳定性 完整主程序实现defmain():主程序整合所有功能模块# 重试机制MAX_RETRIES3results[]# 读取公司列表try:COMPANY_LISTpd.read_csv(company_csv)[company_name].tolist()exceptExceptionase:print(f读取公司列表失败:{e})COMPANY_LIST[百度,阿里巴巴,腾讯,字节跳动,华为]# 随机打乱公司列表random_companiesCOMPANY_LIST.copy()random.shuffle(random_companies)# 选择执行模式use_asynclen(random_companies)10# 超过10家公司使用异步模式ifuse_async:print(使用异步模式处理大量公司数据...)resultsasyncio.run(get_job_ratio_async(random_companies))else:print(使用同步模式处理...)forcompanyinrandom_companies:retries0successFalsewhileretriesMAX_RETRIESandnotsuccess:try:time.sleep(random.uniform(3,7))resultget_job_ratio(company)results.append(result)print(f✅{company}: 总职位{result[total]}, AI职位{result[ai_jobs]}, 占比{result[ai_ratio]:.2%})successTrueexceptExceptionase:retries1print(f❌{company}失败 ({retries}/{MAX_RETRIES}):{str(e)})time.sleep(random.uniform(10,15))ifnotsuccess:results.append({company:company,total:-1,ai_jobs:-1,ai_ratio:-1})# 每处理5家公司保存中间结果iflen(results)%50:interim_dfpd.DataFrame(results)interim_csvos.path.join(DATA_DIR,finterim_{int(time.time())}.csv)interim_df.to_csv(interim_csv,indexFalse,encodingutf_8_sig)# 保存最终结果dfpd.DataFrame(results)df.to_csv(output_csv,indexFalse,encodingutf_8_sig)# 生成分析报告success_dfdf[df[total]0]ifnotsuccess_df.empty:print(f\n 分析报告:)print(f成功分析:{len(success_df)}/{len(COMPANY_LIST)}家公司)print(f平均AI占比:{success_df[ai_ratio].mean():.2%})# 生成可视化图表create_visualization(success_df)# 尝试预测模型iflen(success_df)10:# 数据足够时训练预测模型modelpredict_ai_trend(success_df)ifmodel:print(✅ AI趋势预测模型训练完成)returnresultsif__name____main__:# 确保数据目录存在os.makedirs(DATA_DIR,exist_okTrue)# 运行主程序main()# 可选启动定时监控# run_scheduler() 持久化Redis缓存与数据库存储# Redis缓存实现importredisimportjsonfromdatetimeimporttimedelta redis_clientredis.Redis(hostlocalhost,port6379,db0)defget_cached_result(company,keywordNone):从Redis获取缓存结果cache_keyfboss:{company}:{keywordortotal}cachedredis_client.get(cache_key)ifcached:returnjson.loads(cached)returnNonedefset_cache_result(company,keyword,result,expire_hours24):设置Redis缓存cache_keyfboss:{company}:{keywordortotal}redis_client.setex(cache_key,timedelta(hoursexpire_hours),json.dumps(result))# 数据库存储实现importsqlite3definit_database():初始化SQLite数据库connsqlite3.connect(boss_data.db)cursorconn.cursor()cursor.execute( CREATE TABLE IF NOT EXISTS job_analysis ( id INTEGER PRIMARY KEY AUTOINCREMENT, company TEXT NOT NULL, total_jobs INTEGER, ai_jobs INTEGER, ai_ratio REAL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ) )conn.commit()conn.close()defsave_to_database(results):保存结果到数据库connsqlite3.connect(boss_data.db)cursorconn.cursor()forresultinresults:cursor.execute( INSERT INTO job_analysis (company, total_jobs, ai_jobs, ai_ratio) VALUES (?, ?, ?, ?) ,(result[company],result[total],result[ai_jobs],result[ai_ratio]))conn.commit()conn.close()NLP智能关键词识别importjiebafromsklearn.feature_extraction.textimportTfidfVectorizerfromsklearn.clusterimportKMeansdefextract_ai_keywords(job_descriptions):使用NLP技术提取AI相关关键词# 分词处理segmented_texts[ .join(jieba.cut(desc))fordescinjob_descriptions]# TF-IDF向量化vectorizerTfidfVectorizer(max_features1000,stop_words[的,和,在,有])tfidf_matrixvectorizer.fit_transform(segmented_texts)# 聚类分析kmeansKMeans(n_clusters5,random_state42)clusterskmeans.fit_predict(tfidf_matrix)# 提取关键词feature_namesvectorizer.get_feature_names_out()ai_keywords[]forcluster_idinrange(5):cluster_centerkmeans.cluster_centers_[cluster_id]top_indicescluster_center.argsort()[-10:][::-1]cluster_keywords[feature_names[i]foriintop_indices]ai_keywords.extend(cluster_keywords)returnlist(set(ai_keywords))本文介绍的Boss直聘AI岗位数据爬取方案不仅提供了完整的技术实现还包含了丰富的技术拓展内容。通过合理的反爬虫策略、鲁棒的数据提取机制和完善的错误处理能够稳定地获取有价值的行业数据。希望这个项目能够帮助大家更好地了解AI行业的就业趋势同时也为Python爬虫技术的学习提供参考。记住技术无罪关键在于如何合理合法地使用这些技术为社会创造价值。
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

网站建设流程新闻wordpress wplms

macOS鼠标滚动终极优化:Mos工具完全解析与性能飞跃指南 【免费下载链接】Mos 一个用于在 macOS 上平滑你的鼠标滚动效果或单独设置滚动方向的小工具, 让你的滚轮爽如触控板 | A lightweight tool used to smooth scrolling and set scroll direction independently …

张小明 2025/12/25 22:44:01 网站建设

网站制作流程视频教程企业网络安全解决方案

利用comsol软件建立激光熔覆三维流速场模型()在材料加工领域,激光熔覆技术凭借其独特的优势,如高精度、快速凝固等,越来越受到关注。而理解激光熔覆过程中的流速场对于优化工艺参数、提高熔覆层质量至关重要。今天咱们就来聊聊如何利用Comsol…

张小明 2025/12/25 22:43:58 网站建设

做网站的中标公司商务型网站建设

BetterNCM安装器终极指南:10分钟打造个性化网易云音乐 【免费下载链接】BetterNCM-Installer 一键安装 Better 系软件 项目地址: https://gitcode.com/gh_mirrors/be/BetterNCM-Installer 还在忍受网易云音乐单调的界面和有限的功能吗?BetterNCM安…

张小明 2025/12/25 22:44:00 网站建设

做企业网站域名电商运营培训机构排名

虚假发票造成的税收流失每年高达数百亿,传统查验手段却如大海捞针;财务团队深陷重复性劳动,合规成本居高不下;供应链金融因信息不对称而步履维艰……这些看似离散的商业痛点,正通过一个共同的技术支点获得系统性解决方…

张小明 2025/12/25 22:43:58 网站建设

天台网站建设网站后台如何做产品展示

Qwen图像编辑终极指南:从新手到高手的完整教程 🎨 【免费下载链接】Qwen-Image-Edit-Rapid-AIO 项目地址: https://ai.gitcode.com/hf_mirrors/Phr00t/Qwen-Image-Edit-Rapid-AIO 还在为复杂的AI图像编辑工具而头疼吗?🤔 …

张小明 2025/12/25 22:44:05 网站建设

阿里云备案成功怎么建设网站怎么让自己的网站

第一章:Rust 扩展的 PHP 函数调试概述在现代高性能 Web 开发中,将 Rust 编写的扩展集成到 PHP 中已成为提升关键路径执行效率的重要手段。由于跨语言调用的复杂性,调试此类扩展中的函数变得尤为关键。PHP 通过 FFI(Foreign Functi…

张小明 2025/12/25 22:44:03 网站建设