版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
教师备课纸苏州工业职业技术学院教师备课纸SuzhouInstituteOfIndustrialTechnology第
PAGE
3页教师备课首页苏州工业职业技术学院教师备课首页SuzhouInstituteOfIndustrialTechnology第1页课题项目三招聘Requests项目实战课型理实一体授课班级大数据22C1、大数据22C2授课时数8教学目标(1)掌握Requests爬虫用法。(2)掌握XPath语法格式。(3)掌握从CSV文件读取到DataFrame。(4)掌握DataFrame去重方法。(5)掌握DataFrame列裂变。(6)掌握DataFrame自定义函数转换数据。(7)掌握DataFrame保存到CSV文件。(8)掌握DataFrame删除列。(9)掌握DataFrame分组count统计。(10)理解DataFrame分组mean统计。(11)了解ECharts柱状图。(12)了解ECharts饼状图。教学重点(1)掌握Requests爬虫用法。(2)掌握XPath语法格式。教学难点XPath语法格式学情分析学生零基础,在教学中注重引导学生学会自主学习,培养学生学会查找文献资料教学效果教后记任务1:Requests+XPath采集数据下面以爬取某招聘网站为例,介绍Requests配合XPath采集手机销售数据的详细步骤。步骤1:转到Tomcat安装目录下的bin目录,运行startup.bat后,打开Chrome,访问:50001/findjob/index1.html,显示网站首页,代表Tomcat运行正常。步骤2:打开PyCharm,File->NewProject创建PyCharm项目jobvis,手工填写项目路径,选择Anaconda编译器(python.exe),点击“Create”按钮,进入窗口“OpenProject”。点击“OK”按钮,创建空项目jobvis。步骤3:打开网站首页,在页面任意位置点击鼠标右键后,选择“检查”,选择“Network”选项卡,查看HTTP请求和返回内容。点击“Clear”按钮,清除缓存,然后在左面页面窗口中任意位置点击鼠标右键,选择“重新加载”。接着,切换到”Doc”选项卡后,选择”list1.html”,查看RequestHeaders,保存User-Agent、cookie(如果有的话)、referer(如果有的话)3个属性值。步骤4:在项目根目录下New->PythonFile,创建findjob_spider.py,定义get_page函数,起始URL指向网站首页,headers的“User-Agent”值使用上面RequestHeaders复制过来的内容。importcsvimportreimportrequestsfromlxmlimportetreefromrequests.utilsimportget_encodings_from_contentlist_base_url=":50001/findjob/index1.html"defget_page(url):#从chrome开发者工具复制User-Agent和cookie值(如果有的话)headers={'User-Agent':'Mozilla/5.0(WindowsNT10.0;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/91.0.4472.124Safari/537.36'}#发送GET请求res=requests.get(url,headers)#查看编码方式enconding=get_encodings_from_content(res.text)#打印网页内容html_doc=res.content.decode(enconding[0])returnhtml_doc步骤5:打开网站首页(:50001/findjob/index1.html),然后在页面空白区域点击鼠标右键,选择“检查”,在右边“Elements”窗口查找div元素,对照左边窗口的显示,找到各岗位div对应的页面元素岗位div的XPath相对路径为div[@class='j_joblist']/div[@class='e'],在爬虫中用这个相对路径匹配岗位div。步骤6:回到网站首页,鼠标停留在第1个岗位的职位名称,然后点击鼠标右键后,选择“检查”,查找职位名称的XPath路径。从XPath路径“div[@class='j_joblist']/div[@class='e']”开始,“职位名称”字段对应的XPath相对路径为“a/p/span[@class='jnameat']/text()”。步骤7:鼠标停留在左面窗口的单位名称,然后点击鼠标右键后,选择“检查”,找到单位名称的XPath路径。从XPath路径“div[@class='j_joblist']/div[@class='e']”开始,“岗位名称”字段对应的XPath相对路径为“div[@class='er']/a/text()”。步骤8:类似上述步骤,查找单位属性和发布时间的XPath路径。从XPath路径“div[@class='j_joblist']/div[@class='e']”开始,单位属性对应的XPath相对路径为“div[@class='er']/p[@class='dcat']/text()”,发布时间对应的XPath相对路径为“a/p/span[@class='time']/text()”。步骤9:在findjob_spider.py中增加parse_page和website_crawl函数,职位名称、单位名称、单位名称和发布时间使用上面查找的XPath路径。defparse_page(url):#解析页面到html树page_content=get_page(url)response=etree.HTML(page_content)#提取商品属性node_list=response.xpath("//div[@class='j_joblist']/div[@class='e']")fornodeinnode_list:#职位名称span_value=node.xpath("./a/p/span[@class='jnameat']/text()")iflen(span_value)>0:jobName=re.sub("\s+","",span_value[0])else:jobName=""#单位名称a_value=node.xpath("./div[@class='er']/a/text()")companyName=a_value[0]iflen(a_value)>0else""#单位属性,例:['国企|500-1000人']p_value=node.xpath("./div[@class='er']/p[@class='dcat']/text()")iflen(p_value)>0:companyAttr=re.sub("\s+","",p_value[0])else:companyAttr=""#发布时间,例:06-14发布span_value=node.xpath("./a/p/span[@class='time']/text()")pubTime=span_value[0]iflen(span_value)>0else""#保存职位信息withopen('findjob_raw.csv','a',newline="",encoding='utf-8')asf:csv_write=csv.writer(f)csv_write.writerow([jobName,companyName,companyAttr,pubTime])defwebsite_crawl():current_page_url=list_base_urlparse_page(current_page_url)步骤10:在findjob_spider.py定义主函数。if__name__=='__main__':website_crawl()运行findjob_spider.py,应该在项目根目录下看到文件findjob_raw.csv。打开findjob_raw.csv,看到如下结果:嵌入式硬件工程师,上海大唐移动通信设备有限公司,国企|500-1000人,06-14发布模拟电路工程师,上海磐诺仪器有限公司,民营公司|150-500人,06-14发布电子工程师(仪器研发),北京百晶生物技术有限公司,外资(非欧美)|少于50人,06-14发布高级硬件工程师,罗特尼克能源科技(北京)有限公司,合资|50-150人,06-14发布高级电气应用(调试)工程师,北京煜能电气有限公司,民营公司|少于50人,06-14发布硬件工程师,煜象科技(杭州)有限公司,民营公司,06-14发布电气设计工程师,华信永益(北京)信息技术有限公司,民营公司|500-1000人,06-14发布电子工程师,北京宝德仪器有限公司,民营公司|50-150人,06-14发布技术工程师(五险一金),广东柏高保设备工程有限公司,民营公司|50-150人,06-14发布电池管理工程师,蔚蓝空间飞行器有限公司,民营公司|少于50人,06-14发布仪表工程师,北京凯明阳热能技术有限公司,民营公司|少于50人,06-14发布电气技术员,北京金瀑布景观艺术有限责任公司,民营公司|少于50人,06-14发布嵌入式电气工程师,北京东孚久恒仪器技术有限公司,国企|50-150人,06-14发布电气工程技术员,北京中治赛瑞科技有限责任公司,民营公司|少于50人,06-14发布硬件工程师,北京宝盈科技发展有限公司,民营公司|少于50人,06-14发布上面结果显示15条记录,恰好是1页数据,接下来继续增强爬虫,让它具有翻页爬取功能。步骤11:回到网站首页,滑动页面到最底端,鼠标停留在最后一页的页码“5”,然后点击鼠标右键后,选择“检查”,查看页码“5”的XPath路径。页码“5”对应的XPath路径为“//div[@class="p_in"]/ul/li[last()-1]/a/text()”,“//”代表任意路径,“last()”代表最后一个li子结点,“last()-1”代表倒数第2个li子结点。步骤12:修改findjob_spider.py,定义list_base_url和offset,start_urls改变为可替换的模板,完善website_crawl函数,使爬虫具有翻页爬取功能。importrandomfromtimeimportsleeplist_base_url=":50001/findjob/index#offset#.html"defwebsite_crawl():#获取首页内容start_url=list_base_url.replace("#offset#",str(1))first_page_doc=get_page(start_url)first_page_tree=etree.HTML(first_page_doc)#找到总页数page_num=first_page_tree.xpath('//div[@class="p_in"]/ul/li[last()-1]/a/text()')page_num=(int)(page_num[0])iflen(page_num)>0else0ifpage_num:page_num=(int)(page_num)#访问所有页面foriinrange(1,page_num+1):current_page_url=list_base_url.replace("#offset#",str(i))#sleep(seconds)随机间隔5~10秒爬取页面,防止目标网站拦截sleep(random.randint(5,10)+random.random())print("爬取第{}页".format(i))parse_page(current_page_url)运行findjob_spider.py,打开findjob_raw.csv。打开文件,看到如下结果:嵌入式硬件工程师,上海大唐移动通信设备有限公司,国企|500-1000人,06-14发布模拟电路工程师,上海磐诺仪器有限公司,民营公司|150-500人,06-14发布电子工程师(仪器研发),北京百晶生物技术有限公司,外资(非欧美)|少于50人,06-14发布高级硬件工程师,罗特尼克能源科技(北京)有限公司,合资|50-150人,06-14发布高级电气应用(调试)工程师,北京煜能电气有限公司,民营公司|少于50人,06-14发布嵌入式硬件工程师,上海大唐移动通信设备有限公司,国企|500-1000人,06-14发布模拟电路工程师,上海磐诺仪器有限公司,民营公司|150-500人,06-14发布电子工程师(仪器研发),北京百晶生物技术有限公司,外资(非欧美)|少于50人,06-14发布高级硬件工程师,罗特尼克能源科技(北京)有限公司,合资|50-150人,06-14发布高级电气应用(调试)工程师,北京煜能电气有限公司,民营公司|少于50人,06-14发布模拟IC设计工程师,北京芯动致远微电子技术有限公司,民营公司,06-14发布模拟电路资深设计工程师,辰芯半导体(深圳)有限公司,民营公司|少于50人,06-14发布FAE现场应用工程师,北京维信诺光电技术有限公司,民营公司|50-150人,06-14发布任务2:Pandas清洗数据findjob_raw.csv包含90条记录,其中前15条是重复数据,需要删除。另外,要从页面字段“单位属性”中解析出单位类型。接下来,采用Pandas完成数据清洗任务。步骤1:在项目根目录New->PythonFile,创建data_clean.py,读入findjob_raw.csv到DataFrame类型。importpandasaspdlabels=["职位名称","单位名称","单位属性","发布时间"]df=pd.read_csv('findjob_raw.csv',names=labels,encoding='utf-8')print(df.head())运行data_clean.py,PyCharm控制台输出如下结果:职位名称单位名称单位属性发布时间0嵌入式硬件工程师上海大唐移动通信设备有限公司国企|500-1000人06-14发布1模拟电路工程师上海磐诺仪器有限公司民营公司|150-500人06-14发布2电子工程师(仪器研发)北京百晶生物技术有限公司外资(非欧美)|少于50人06-14发布3高级硬件工程师罗特尼克能源科技(北京)有限公司合资|50-150人06-14发布4高级电气应用(调试)工程师北京煜能电气有限公司民营公司|少于50人06-14发布步骤2:完善data_clean.py,删除重复记录。#去重df=df.drop_duplicates()print("去重后记录行数:{}".format(df.shape[0]))运行data_clean.py,PyCharm控制台输出如下结果:去重后记录行数:72步骤3:完善data_clean.py,从“单位属性”列抽取出单位类型和规模。#字段“单位属性”裂变成二列:单位类型,规模。pattern="(?P<单位类型>.+)\|(?P<规模>.+)"compdesc_df=df["单位属性"].str.extract(pattern)df["单位类型"]=compdesc_df["单位类型"]df["规模"]=compdesc_df["规模"]df.drop(["单位属性"],axis=1,inplace=True)print(df[["单位类型","规模"]].head())运行data_clean.py,PyCharm控制台输出如下结果:单位类型规模0国企500-1000人1民营公司150-500人2外资(非欧美)少于50人3合资50-150人4民营公司少于50人步骤4:完善data_clean.py,删除“发布时间”列的“发布”后缀。#字段“发布时间”去掉“发布”后缀。df["发布时间"]=df["发布时间"].str.replace("发布","")print(df["发布时间"].head())运行data_clean.py,PyCharm控制台输出如下结果:006-14106-14206-14306-14406-14步骤4:完善data_clean.py,保存清洗后的数据。#保存清洗后的数据df.to_csv("findjob_clean.csv",index=False)3.3.3任务3:Pandas分析数据经过数据清洗后,采用Pandas按照经销商分组统计评价数。步骤1:在项目根目录New–>PythonFile,创建data_analysis.py,读入findjob_clean.csv到DataFrame类型。importpandasaspd#读入csv文件到Dataframe对象df=pd.read_csv("findjob_clean.csv",header=0,encoding="utf-8")print(df.head())运行data_analysis.py,PyCharm控制台输出如下结果:职位名称单位名称发布时间单位类型规模0嵌入式硬件工程师上海大唐移动通信设备有限公司06-14国企500-1000人1模拟电路工程师上海磐诺仪器有限公司06-14民营公司150-500人2电子工程师(仪器研发)北京百晶生物技术有限公司06-14外资(非欧美)少于50人3高级硬件工程师罗特尼克能源科技(北京)有限公司06-14合资50-150人4高级电气应用(调试)工程师北京煜能电气有限公司06-14民营公司少于50人步骤2:完善data_analysis.py,记录按照单位类型分组后,统计招聘岗位数量。#按单位类型统计岗位数量stats_stats=df.groupby(["单位类型"]).count()[["职位名称"]].reset_index().rename(columns={"职位名称":"岗位数量"})print(stats_stats)运行data_analysis.py,PyCharm控制台输出如下结果:单位类型岗位数量0上市公司21合资262国企73外企代表处14外资(欧美)55外资(非欧美)46民营公司18有了上面的结果,手工复制到ECharts图表,完成可视化任务。3.3.4任务3:ECharts可视化数据ECharts提供了多种图表,比如柱状图、饼形图、雷达图等,这里采用常见的饼图对比各单位类型的岗位招聘数量比例。步骤1:在项目根目录New->Directory,创建app目录。步骤2:在app目录下New->Directory,创建目录static,然后把echarts.min.js复制到app/static目录。步骤3:在app目录下New->Directory,创建templates目录。步骤4:在templates目录下NewHTMLFile,创建single_chart.html。<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>单图</title></head><body></body></html>步骤5:在single_chart.html中引入依赖的JS文件。<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>单图</title><scriptsrc="../static/echarts.min.js"></script></head><body></body></html>步骤6:完善single_chart.html,定义div元素和编写JS代码。JS代码中引用数据分析产生的数据,实例化ECharts图表对象,然后传给div元素显示。<
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 多渠道协同定制平台-洞察与解读
- 质量守恒定律教案
- 2026年汽车租赁合同协议书范本三篇
- 保密协议2026规范版含反泄露约定三篇
- 2026年农业科技种植项目合作合同协议三篇
- 地热资源勘探-第2篇-洞察与解读
- 跨境物流对农产品供应链优化-洞察与解读
- 小学六年级英语下册Review Module8单元整体复习教学设计
- 小学三年级英语下册《Unit 4 Home Life – Lesson 2 Fun in the Living Room》教案
- 人教版历史选修四课后习题第1单元第1课统一中国的第一个皇帝秦始皇
- 2026广东外语外贸大学招聘事业编制工作人员31人备考题库附答案详解(轻巧夺冠)
- 2026年高考物理复习备考策略讲座
- 2026年大数据在过程控制中的应用实例
- 2026年科技日报社招聘笔试科技政策与科普写作专项练习
- 公安联控申请书(参考式样版)
- 金山文档课件
- 2026年防爆电气设备事故案例分析
- 高一数学下册解三角形专项卷(人教版考点)
- 儿童康复辅具评估协议2025年服务
- 共病患者控制目标个体化设定
- 雨课堂学堂云在线《人类与生态文明(云南大学 )》单元测试考核答案
评论
0/150
提交评论