课题项目源码功能介绍
基于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企服之家,中国第一个企服评测及商务社交产业平台。 |