课题项目源码功能介绍
基于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等都可以
具体实现截图
开发流程
1)情况搭建
搭建符合课题开发的情况。如果接纳支持高可用的系统(例如hdfs,Hbase,Flink,Spark 等),集群至少3台服务器;
2)数据采集。可选项,根据课题必要完成数据采集的设计与开发。
3)数据预处置惩罚。
对于有缺失值的记录,按照自己界说的规则或增补或舍弃处置惩罚,对于类型数据按照规则映射为数值;对于不平衡数据必要有相应的处置惩罚步伐。
4)数据存储。
必须使用数据库保存数据。 推荐使用NoSQL数据库,如 MongoDB、 Redis 等数据库,也可以使用关系数据库保存数据,如 MySQL;开发过程必要包括数据库需求分析、数据库设计、数据库建立、数据输入等部分。
5) 数据分析与预测
使用合理的数据计算框架实现数据分析,例如:Tensorflow/Pytorch、Hadoop、hive、Spark等;根据课题选择、比较各算法性能;构造出基于最佳算法的框架,编程实现并测试选取不同参数时对算法性能的影响;
6) 数据可视化
对模型建立、数据分析效果用不同可视化方式进行可视化分析。此部分可以增加对用户/会员管理功能。推荐接纳B/S布局实现。
2.具体要求:
1)独立开发设计系统的模块步伐,遵循软件工程开发周期进行,包括需求分析、总体方案订定、具体设计和功能规划、编程实现、调试等;
2)所开的系统能正常运行在所选的平台上,并实现相干模块的功能;
3)提供系统模块框架分析图、模块功能说明图、系统平台设计图、各分模块实现框图,在设计文档中体现;
Scrapy爬虫框架
网络爬虫是依靠预先设定好的规则而进行自动的抓取网络信息的过程 。网络爬虫通过剖析网页,自动获取网页的数据。相较于人工去获取网页数据,无疑是要方便许多。本文使用 Python 的 Requests 库和 Beautifulsoup 库去剖析链家网页,获取数据。同样是网络爬虫的一种。当然,网络爬虫也是有缺点的,它在对网页进行爬取时,可能会触发网页的反爬机制,从而导致失败。以是在编写爬虫步伐的时间就要想办法绕过反爬机制,增加了工作量。而且网络爬虫必须要服从相干法律法 规,不能够恶意的去爬取一些网站的信息。
Scrapy是一个Python编写的强盛,机动的网络爬虫框架和数据提取工具。它使用异步I/O网络库Twisted进行高效的爬取,并将提取到的数据存储到多种格式中。然而,在必要大规模爬取复杂的网站时,单机爬虫速度会受到限制。为了解决这个问题,Scrapy提供了分布式爬虫系统
爬虫核心代码展示
- 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
- class xiangmuSpider(scrapy.Spider):
- name = 'xiangmuSpider'
- spiderUrl = 'https://url网址'
- start_urls = spiderUrl.split(";")
- protocol = ''
- hostname = ''
- def __init__(self, *args, **kwargs):
- super().__init__(*args, **kwargs)
- # 列表解析
- def parse(self, response):
-
- _url = urlparse(self.spiderUrl)
- self.protocol = _url.scheme
- self.hostname = _url.netloc
- plat = platform.system().lower()
- if plat == 'windows_bak':
- pass
- elif 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()
- return
- list = response.css('ul.subject-list li.subject-item')
-
- for item in list:
- 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:
- pass
- elif 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)
- # 详情解析
- def detail_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标签
- def remove_html(self, html):
- if html == None:
- return ''
- pattern = re.compile(r'<[^>]+>', re.S)
- return pattern.sub('', html).strip()
- # 数据库连接
- def db_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', '')
- if type == '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
- # 断表是否存在
- def table_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:
- return 1
- else:
- 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企服之家,中国第一个企服评测及商务社交产业平台。 |