目录
具体实现截图
Scrapy爬虫框架
网络爬虫是依靠预先设定好的规则而进行自动的抓取网络信息的过程 。网络爬虫通过解析网页,自动获取网页的数据。相较于人工去获取网页数据,无疑是要方便许多。本文使用 Python 的 Requests 库和 Beautifulsoup 库去解析链家网页,获取数据。同样是网络爬虫的一种。当然,网络爬虫也是有缺点的,它在对网页进行爬取时,可能会触发网页的反爬机制,从而导致失败。所以在编写爬虫程序的时候就要想办法绕过反爬机制,增加了工作量。而且网络爬虫必须要遵守相关法律法 规,不能够恶意的去爬取一些网站的信息。
Scrapy是一个Python编写的强大,灵活的网络爬虫框架和数据提取工具。它使用异步I/O网络库Twisted进行高效的爬取,并将提取到的数据存储到多种格式中。然而,在需要大规模爬取复杂的网站时,单机爬虫速度会受到限制。为了解决这个问题,Scrapy提供了分布式爬虫系统
数据可视化分析
数据可视化是指将数据从文本的形式转变为图表的形式,让人们能够更加直观的观察数据与数据之间的关系和变化,对于数据分析方面提供了重要的帮助。本文使用 Numpy 库,Matplotlib ,
技术栈
基于Python大数据技术进行网络爬虫的设计,框架使用Scrapy.
系统设计支持以下技术栈
前端开发框架:vue.js
数据库 mysql 版本不限
后端语言框架支持:
1 java(SSM/springboot)-idea/eclipse
2.python(flask/django)–pycharm/vscode
3.Nodejs+Vue.js -vscode
4.php(thinkphp/laravel)-hbuilderx/vscode
数据库工具:Navicat/SQLyog等都可以
关键技术和使用的工具环境等的说明
Python的应用场合非常广泛,在科研领域中,可以用Python训练人工智能模型,也可以对实验数据进行数据分析。在生活中,Python提供了很多优秀的、开源的Web开发框架,例如Django、Flask、Pyramid、Tornado等。知乎、豆瓣网、Youtube等知名应用都是由Python为基础进行开发的。相比于其他框架,vue 有着更加丰富的插件,作为企业级框架也很好上手,适合本次开发。此次IT招聘数据分析及可视化是开发一个Web应用,采用vue 框架,将在下一节进行具体介绍。
MySQL是一种关系型数据库管理系统,是大部分程序员接触的第一款关系型数据库。它相对于其他数据库来说相当轻量级,而且更加灵活。在大量的web工程中,经常作为首选的数据库,因为其开源免费的特点被大量的开发人员所使用。而且在大数据背景下,其海量的集群更为web的高并发提供了良好的后盾。
虽然Spark同样是大数据的框架和计算模型,但其实它与hadoop是相辅相成的,而且可以灵活的部署在hadoop之上,共享hadoop的文件系统。并且在数据处理上更为高效和方便、灵活。在数据量越来越庞大的现在,基于内存的spark可以很快的得到处理的结果,甚至现在已经可以支持近实时的数据处理。使得大数据的价值更加凸显。
Hadoop是由Apache基金会开源的分布式的大数据基础系统。
用户可以在不知道分布式基础设施的细节的情况下开发分布式程序。可以利用无数台节点集群进行高速计算和文件的多副本容错存储。
ECharts是百度开源的一个数据可视化框架,是web端的js框架,可以很方便的进行搭建数据可视化前端界面。官网的文档尤其简洁,极易上手开发,使得海量数据处理完成后,可以方便高效快速的进行可视化处理,直接作用于决策。使得数据的价值得到了直观的展示和提升。目前支持多种图形的绘制。
解决的思路
该系统架构主要依托scrapy框架进行架构,后台采用python动态网页语言编写,使用scrapy框架技术从网站上爬取数据,采用java/python/php/nodejs部署系统环境,使用pyhcarm作为系统的开发平台,在数据库设计和管理上使用MySQL。在人机交互的过程中,客户端不直接与数据库交互,而是通过组件与中间层建立连接,再由中间层与数据库交互。通过设计良好的框架可以减轻重新建立解决复杂问题方案的负担和精力,并且它可以被扩展以进行内部的定制化,有强大的用户社区来支持它,所以框架通常能很好的解决一个问题。
开发流程
在对大数据的深入研究后,根据其前景,包括数据方面的发展与价值,本套系统从用户痛点需求进行分析入手,对系统架构进行了设计,随后完成了系统方面的具体设计,最后为数据入库对DB进行配置和设计,最后到系统搭建和编码实现,分别为后台数据处理,在数据转换方面包括数据的clean、临时存储落地,数据经过完全处理后入库,和前台的ECharts可视化系统,对处理后落地的数据使用饼图进行可视化展现。对系统进行功能叙述、进行详细的系统分析、进行整体的结构性框架设计和对系统详细的设计、最终完成系统的搭建部分和对系统进行的单元测试这几个方面描述了整个系统的流程。
爬虫核心代码展示
import scrapy
import pymysql
import pymssql
from..items import xiangmuItem
import time
import re
import random
import platform
import json
import os
from urllib.parse import urlparse
import requests
import emoji
classxiangmuSpider(scrapy.Spider):
name ='xiangmuSpider'
spiderUrl ='https://url网址'
start_urls = spiderUrl.split(";")
protocol =''
hostname =''def__init__(self,*args,**kwargs):super().__init__(*args,**kwargs)# 列表解析defparse(self, response):
_url = urlparse(self.spiderUrl)
self.protocol = _url.scheme
self.hostname = _url.netloc
plat = platform.system().lower()if plat =='windows_bak':passelif plat =='linux'or plat =='windows':
connect = self.db_connect()
cursor = connect.cursor()if self.table_exists(cursor,'xiangmu')==1:
cursor.close()
connect.close()
self.temp_data()returnlist= response.css('ul.subject-list li.subject-item')for item inlist:
fields = xiangmuItem()
fields["laiyuan"]= self.remove_html(item.css('div.pic a.nbg::attr(href)').extract_first())if fields["laiyuan"].startswith('//'):
fields["laiyuan"]= self.protocol +':'+ fields["laiyuan"]elif fields["laiyuan"].startswith('/'):
fields["laiyuan"]= self.protocol +'://'+ self.hostname + fields["laiyuan"]
fields["fengmian"]= self.remove_html(item.css('div.pic a.nbg img::attr(src)').extract_first())
fields["xiaoshuoming"]= self.remove_html(item.css('div.info h2 a::attr(title)').extract_first())
detailUrlRule = item.css('div.pic a.nbg::attr(href)').extract_first()if self.protocol in detailUrlRule:passelif detailUrlRule.startswith('//'):
detailUrlRule = self.protocol +':'+ detailUrlRule
else:
detailUrlRule = self.protocol +'://'+ self.hostname + detailUrlRule
fields["laiyuan"]= detailUrlRule
yield scrapy.Request(url=detailUrlRule, meta={'fields': fields}, callback=self.detail_parse)# 详情解析defdetail_parse(self, response):
fields = response.meta['fields']try:if'(.*?)'in'''div#info span a::text''':
fields["zuozhe"]= re.findall(r'''div#info span a::text''', response.text, re.S)[0].strip()else:if'zuozhe'!='xiangqing'and'zuozhe'!='detail'and'zuozhe'!='pinglun'and'zuozhe'!='zuofa':
fields["zuozhe"]= self.remove_html(response.css('''div#info span a::text''').extract_first())else:
fields["zuozhe"]= emoji.demojize(response.css('''div#info span a::text''').extract_first())except:pass# 去除多余html标签defremove_html(self, html):if html ==None:return''
pattern = re.compile(r'<[^>]+>', re.S)return pattern.sub('', html).strip()# 数据库连接defdb_connect(self):type= self.settings.get('TYPE','mysql')
host = self.settings.get('HOST','localhost')
port =int(self.settings.get('PORT',3306))
user = self.settings.get('USER','root')
password = self.settings.get('PASSWORD','123456')try:
database = self.databaseName
except:
database = self.settings.get('DATABASE','')iftype=='mysql':
connect = pymysql.connect(host=host, port=port, db=database, user=user, passwd=password, charset='utf8')else:
connect = pymssql.connect(host=host, user=user, password=password, database=database)return connect
# 断表是否存在deftable_exists(self, cursor, table_name):
cursor.execute("show tables;")
tables =[cursor.fetchall()]
table_list = re.findall('(\'.*?\')',str(tables))
table_list =[re.sub("'",'',each)for each in table_list]if table_name in table_list:return1else:return0
论文书写大纲
绪论
1.系统分析
1.1需求分析
1.2所采用的技术关键
2系统总体设计
2.1总体功能
2.2处理流程设计
3系统详细设计
3.1概念结构设计
3.2数据库设计
3.3数据模块设计
4系统调试与测试
4.1测试环境简介
4.2测试目标
4.3测试方法
4,4程序测试
5结论
参考文献
致谢
详细视频演示
请联系我获取更详细的演示视频
源码获取
文章最下方名片联系我即可~
版权归原作者 qq_3166678367 所有, 如有侵权,请联系我们删除。