温州外贸网站设计,自己可以建网站吗,wordpress retina,网站建设得步骤文章目录0 前言1 课题背景2 实现效果3 Flask框架4 数据爬虫0 前言
#x1f525;这两年开始毕业设计和毕业答辩的要求和难度不断提升#xff0c;传统的毕设题目缺少创新和亮点#xff0c;往往达不到毕业答辩的要求#xff0c;这两年不断有学弟学妹告诉学长自己做的项目系统…文章目录0 前言1 课题背景2 实现效果3 Flask框架4 数据爬虫0 前言这两年开始毕业设计和毕业答辩的要求和难度不断提升传统的毕设题目缺少创新和亮点往往达不到毕业答辩的要求这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。并且很难找到完整的毕设参考学习资料。为了大家能够顺利以及最少的精力通过毕设学长分享优质毕业设计项目提供大家参考学习今天要分享的是 **基于大数据的招聘职业爬取与分析可视化 **学长这里给一个题目综合评分(每项满分5分)难度系数3分工作量3分创新点3分选题指导, 项目分享见文末1 课题背景基于Python网络爬虫、Flask Web框架实现的职业能力大数据可视化服务平台2 实现效果首页学生专区首页点击导航栏的学生专区进入学生专区首页。首页以表格文字的形式展示数据。但是可能因为屏幕尺寸的原因出现错位。导航栏有查看职业信息与职业分析与推荐两个部分后者需要登录。职业信息界面职业信息界面以卡片的方式展示了各种职业的信息。点击上面右边的文字可以进行筛选点击左边的城市、分类、薪资可以进入相应的可视化界面。职业分析界面进行职业分析前需要先登录和注册填写表单即可。职业分析界面填写表单即可。需要注意不能留空不然会打回来重填。填写完提交即可生成推荐职业。学校专区学校专区的界面就比较简单了首页展示各学校的就业网网址就业政策展示教育部的就业政策3 Flask框架简介Flask是一个基于Werkzeug和Jinja2的轻量级Web应用程序框架。与其他同类型框架相比Flask的灵活性、轻便性和安全性更高而且容易上手它可以与MVC模式很好地结合进行开发。Flask也有强大的定制性开发者可以依据实际需要增加相应的功能在实现丰富的功能和扩展的同时能够保证核心功能的简单。Flask丰富的插件库能够让用户实现网站定制的个性化从而开发出功能强大的网站。本项目在Flask开发后端时前端请求会遇到跨域的问题解决该问题有修改数据类型为jsonp采用GET方法或者在Flask端加上响应头等方式在此使用安装Flask-CORS库的方式解决跨域问题。此外需要安装请求库axios。Flask框架图相关代码fromflaskimportFlask,render_template,request,Response,make_response,redirectfromfunctionsimportlogin,job_info,job_analyse,school,policy,registerfromfunctions.configimportSQLManager# 实例化并命名为app实例appFlask(__name__,static_folderstatic,# 配置静态文件的文件夹template_foldertemplates)# 一些简单界面的路由app.route(/)defindex_view():returnrender_template(index.html)app.route(/info)definfo_view():returnrender_template(info.html)app.route(/echarts)defecharts():returnrender_template(echarts.html)app.route(/student)defstudent_view():cookrequest.cookies.get(username)ifcookisNone:cookreturnrender_template(student.html,usercook)app.route(/student/job_info/city)defcity_view():cookrequest.cookies.get(username)ifcookisNone:cookreturnrender_template(city.html,usercook)app.route(/student/job_info/salary)defsalary_view():cookrequest.cookies.get(username)ifcookisNone:cookreturnrender_template(salary.html,usercook)app.route(/student/job_info/category)defcategory_view():cookrequest.cookies.get(username)ifcookisNone:cookreturnrender_template(category.html,usercook)app.route(/student/job_info/class/cate)defcate_view(cate):aSQLManager()ia.get_one(select id from class where class_name{}.format(cate))[id]returnredirect(/student/job_info?category{}.format(i))# 引入蓝图对象app.register_blueprint(login.login)app.register_blueprint(job_info.job_info)app.register_blueprint(job_analyse.job_analyse)app.register_blueprint(school.school)app.register_blueprint(policy.policy)app.register_blueprint(register.register)# 调用run方法设定端口号启动服务if__name____main__:app.run(port2022,host0.0.0.0,debugTrue)4 数据爬虫简介Scrapy是基于Twisted的爬虫框架它可以从各种数据源中抓取数据。其架构清晰模块之间的耦合度低扩展性极强爬取效率高可以灵活完成各种需求。能够方便地用来处理绝大多数反爬网站是目前Python中应用最广泛的爬虫框架。Scrapy框架主要由五大组件组成它们分别是调度器(Scheduler)、下载器(Downloader)、爬虫Spider和实体管道(Item Pipeline)、Scrapy引擎(Scrapy Engine)。各个组件的作用如下调度器(Scheduler)说白了把它假设成为一个URL抓取网页的网址或者说是链接的优先队列由它来决定下一个要抓取的网址是 什么同时去除重复的网址不做无用功。用户可以自己的需求定制调度器。下载器(Downloader)是所有组件中负担最大的它用于高速地下载网络上的资源。Scrapy的下载器代码不会太复杂但效率高主要的原因是Scrapy下载器是建立在twisted这个高效的异步模型上的(其实整个框架都在建立在这个模型上的)。爬虫Spider是用户最关心的部份。用户定制自己的爬虫(通过定制正则表达式等语法)用于从特定的网页中提取自己需要的信息即所谓的实体(Item)。 用户也可以从中提取出链接,让Scrapy继续抓取下一个页面。实体管道(Item Pipeline)用于处理爬虫(spider)提取的实体。主要的功能是持久化实体、验证实体的有效性、清除不需要的信息。Scrapy引擎(Scrapy Engine)Scrapy引擎是整个框架的核心.它用来控制调试器、下载器、爬虫。实际上引擎相当于计算机的CPU,它控制着整个流程。官网架构图相关代码# -*- coding: utf-8 -*-importscrapyimportrandomimporttimefromfoodwake.itemsimportFoodwakespiderItemclassFoodwakeSpider(scrapy.Spider):namefoodwakeallowed_domains[www.foodwake.com]start_urls[http://www.foodwake.com/category/food-class/0]# //匹配任意位置的节点 匹配属性defparse(self,response):forboxinresponse.xpath(//div[classrow margin-b2]//a):new_urlbox.xpath(.//href).extract()[0]yieldscrapy.http.Request(new_url,callbackself.parse_item)defparse_item(self,response):forboxinresponse.xpath(//div[classrow margin-b2]//a):new_urlbox.xpath(.//href).extract()[0]yieldscrapy.http.Request(new_url,meta{url:new_url},callbackself.parse_item_info)defparse_item_info(self,response):itemFoodwakespiderItem()nameresponse.xpath(//h1[classcolor-yellow]/text()).extract()[0].strip()# food_nickname # try:# nicknames response.xpath(//h2[classh3 text-light]/text()).extract()[0].strip()# food_nickname nicknames.split()[1]# except:# food_nickname 无# url response.meta[url]infoList[]forboxinresponse.xpath(//table[classtable table-hover]//tr):tdsbox.xpath(.//td)iflen(tds)3:info{}td_nametds.xpath(.//text()).extract()[0]td_unittds.xpath(.//text()).extract()[1]td_valuetry:td_valuetd_unittds.xpath(.//text()).extract()[2]info[td_name]td_valueexcept:info[td_name]td_unit infoList.append(info)item[name]name item[info]str(infoList)# item[url] url# item[nickname] food_nicknameyielditemprint(······休眠 1 至 5 秒······)time.sleep(random.randint(1,5)) 项目分享:大家可自取用于参考学习获取方式见文末!