基于大数据爬虫的汽车销售数据库可视化分析系统的设计与实现 ...

  论坛元老 | 2024-12-16 01:16:21 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 1740|帖子 1740|积分 5220

具体实现截图





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可视化系统,对处理后落地的数据使用饼图举行可视化显现。对系统举行功能叙述、举行详细的系统分析、举行整体的结构性框架设计和对系统详细的设计、最终完成系统的搭建部分和对系统举行的单元测试这几个方面描述了整个系统的流程。
爬虫核心代码展示

  1. import scrapy
  2. import pymysql
  3. import pymssql
  4. from ..items import xiangmuItem
  5. import time
  6. import re
  7. import random
  8. import platform
  9. import json
  10. import os
  11. from urllib.parse import urlparse
  12. import requests
  13. import emoji
  14. class xiangmuSpider(scrapy.Spider):
  15.     name = 'xiangmuSpider'
  16.     spiderUrl = 'https://url网址'
  17.     start_urls = spiderUrl.split(";")
  18.     protocol = ''
  19.     hostname = ''
  20.     def __init__(self, *args, **kwargs):
  21.         super().__init__(*args, **kwargs)
  22.     # 列表解析
  23.     def parse(self, response):
  24.         
  25.         _url = urlparse(self.spiderUrl)
  26.         self.protocol = _url.scheme
  27.         self.hostname = _url.netloc
  28.         plat = platform.system().lower()
  29.         if plat == 'windows_bak':
  30.             pass
  31.         elif plat == 'linux' or plat == 'windows':
  32.             connect = self.db_connect()
  33.             cursor = connect.cursor()
  34.             if self.table_exists(cursor, 'xiangmu') == 1:
  35.                 cursor.close()
  36.                 connect.close()
  37.                 self.temp_data()
  38.                 return
  39.         list = response.css('ul.subject-list li.subject-item')
  40.         
  41.         for item in list:
  42.             fields = xiangmuItem()
  43.             fields["laiyuan"] = self.remove_html(item.css('div.pic a.nbg::attr(href)').extract_first())
  44.             if fields["laiyuan"].startswith('//'):
  45.                 fields["laiyuan"] = self.protocol + ':' + fields["laiyuan"]
  46.             elif fields["laiyuan"].startswith('/'):
  47.                 fields["laiyuan"] = self.protocol + '://' + self.hostname + fields["laiyuan"]
  48.             fields["fengmian"] = self.remove_html(item.css('div.pic a.nbg img::attr(src)').extract_first())
  49.             fields["xiaoshuoming"] = self.remove_html(item.css('div.info h2 a::attr(title)').extract_first())
  50.             detailUrlRule = item.css('div.pic a.nbg::attr(href)').extract_first()
  51.             if self.protocol in detailUrlRule:
  52.                 pass
  53.             elif detailUrlRule.startswith('//'):
  54.                 detailUrlRule = self.protocol + ':' + detailUrlRule
  55.             else:
  56.                 detailUrlRule = self.protocol + '://' + self.hostname + detailUrlRule
  57.                 fields["laiyuan"] = detailUrlRule
  58.             yield scrapy.Request(url=detailUrlRule, meta={'fields': fields},  callback=self.detail_parse)
  59.     # 详情解析
  60.     def detail_parse(self, response):
  61.         fields = response.meta['fields']
  62.         try:
  63.             if '(.*?)' in '''div#info span a::text''':
  64.                 fields["zuozhe"] = re.findall(r'''div#info span a::text''', response.text, re.S)[0].strip()
  65.             else:
  66.                 if 'zuozhe' != 'xiangqing' and 'zuozhe' != 'detail' and 'zuozhe' != 'pinglun' and 'zuozhe' != 'zuofa':
  67.                     fields["zuozhe"] = self.remove_html(response.css('''div#info span a::text''').extract_first())
  68.                 else:
  69.                     fields["zuozhe"] = emoji.demojize(response.css('''div#info span a::text''').extract_first())
  70.         except:
  71.             pass
  72. # 去除多余html标签
  73.     def remove_html(self, html):
  74.         if html == None:
  75.             return ''
  76.         pattern = re.compile(r'<[^>]+>', re.S)
  77.         return pattern.sub('', html).strip()
  78.     # 数据库连接
  79.     def db_connect(self):
  80.         type = self.settings.get('TYPE', 'mysql')
  81.         host = self.settings.get('HOST', 'localhost')
  82.         port = int(self.settings.get('PORT', 3306))
  83.         user = self.settings.get('USER', 'root')
  84.         password = self.settings.get('PASSWORD', '123456')
  85.         try:
  86.             database = self.databaseName
  87.         except:
  88.             database = self.settings.get('DATABASE', '')
  89.         if type == 'mysql':
  90.             connect = pymysql.connect(host=host, port=port, db=database, user=user, passwd=password, charset='utf8')
  91.         else:
  92.             connect = pymssql.connect(host=host, user=user, password=password, database=database)
  93.         return connect
  94.     # 断表是否存在
  95.     def table_exists(self, cursor, table_name):
  96.         cursor.execute("show tables;")
  97.         tables = [cursor.fetchall()]
  98.         table_list = re.findall('(\'.*?\')',str(tables))
  99.         table_list = [re.sub("'",'',each) for each in table_list]
  100.         if table_name in table_list:
  101.             return 1
  102.         else:
  103.             return 0
复制代码
论文誊写大纲

绪论
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结论
参考文献
致谢
详细视频演示

请联系我获取更详细的演示视频
源码获取

文章最下方手刺联系我即可~

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表