<style>
.div-border-image{
margin-top: 20px;
margin-bottom: 10px;
box-shadow: 10px 10px 5px #888888;
width:100%;
hegiht:auto;
background: whitesmoke;
border: yellowgreen inset;
border-right-width: 0px;
border-top-width: 0px;
border-bottom-width: 0px;
border-left-width: 5px;
border-radius: 5px;
}
.div-border-question{
margin-top: 20px;
margin-bottom: 10px;
box-shadow: 10px 10px 5px #888888;
width:100%;
hegiht:50px;
padding:20px;
background: whitesmoke;
border: red inset;
border-right-width: 0px;
border-top-width: 0px;
border-bottom-width: 0px;
border-left-width: 5px;
border-radius: 5px;
}
.div-border-answer{
margin-top: 20px;
margin-bottom: 10px;
box-shadow: 10px 10px 5px #888888;
width:100%;
hegiht:50px;
padding:20px;
background: whitesmoke;
border: #4876FF inset;
border-right-width: 0px;
border-top-width: 0px;
border-bottom-width: 0px;
border-left-width: 5px;
border-radius: 5px;
}
</style>
# LaGou-Distributed-Spider-Flask
----
[toc]
<div class="div-border-answer">
分布式采集拉钩网中杭州爬虫相关职位的数据并使用Flask进行数据的可视化与分析
</div>
## 写在前面
<div class="div-border-answer">
来北京3年多了,这3年来,经历了很多了,成长了很多,领悟了许多,也看懂了很多,但是居京都大不易,来北京之前也没有
考虑过在北京定居这个想法,现在也依然没有,即便我有能力在这里定居,我也不会在这里定居,原因就是我不喜欢这个城市
,这里太过于喧嚣,太过于吵闹,就像唐寅那句,‘车尘马足富者趣,酒盏花枝贫者缘。’,北京,于我来说,终究是个临时的
泊岗,而我于北京,终究是个过客,既然迟早要离开,而现在又赶上现在的这样的一个机会,所以,再见,北京。
</div>
## 项目概述
<div class="div-border-question">
好了,说回这个项目,因为之前一直做的是数据采集的相关的工作,以前是通过SDK的方式来采集数据,由于工作的需要,便学习了
网络爬虫,从刚刚开始的定向爬虫,到后来的多机分布式爬虫,定时服务化爬虫,可视化爬虫,在爬虫的使用上,还是有丰富的经验的
现在要离开北京,去杭州了,主要想要从数据采集相关的工作,所以便萌生了一个想法,用爬虫,爬取以下有关数据采集的相关数据,
并进行一下分析,在用 `Flask` 进行一下可视化,为啥要选Flask那,因为它轻啊,`Django` 太过于繁重了,用于中级以上的项目来说是个不
错的选择,但是对于个人来说,Flask是个不二的选择。
</div>
> - [x] 支持分布式采集
*
> - [x] SemanticUi+Flask数据可视化
*
> - [x] 提供登录权限认证功能
*
> - [x] 支持flask_script 命令管理
*
> - [x] 支持flask_sqlalchemy数据库orm映射
*
> - [x] 支持动态抓取
*
>- [x] 支持异常状态收集,与重试
*
>- [x] 支持运行状态的邮件通知
## 项目结构
* 在整体结构上涉及三个部分,
* 数据采集
* 数据存储
* 数据分析与可视化
### 数据采集
在数据采集上,准备使用 `Scrapy-Redis`和`Redis`来实现多机器分布爬取,目标网站是拉钩网,由于拉钩网的反爬
还是比较严厉的,所以需要进行一下防ban的操作,具体的实现我会写在下面
### 数据存储
在数据存储上,前期分析了一下,数据大约几百条,不到1000条,所以就不用需要分布式存储了,直接用`MySQL`或者是`MongDB`存储一下就好了,
可以先把数据同步在`Redis`中,然后在写个脚本直接从`Redis`同步到MySQL中,就不考虑`Redis`磁盘存储了,或者直接放在磁盘上,就不放在内存中了,
也方便`Flask`使用。
### 数据分析与可视化
在数据可视化上,准备使用`Flask`来实现一个`WebServer`,因为Flask比较轻,所以我非常喜欢`Flask`,基于插件,想要什么功能
直接用插件来实现即可。用`Flask`来进行数据的可视化,可以分析一下,杭州各个区的数据采集相关的职位数量,薪资和工作年限的分布清空
或者统计一下,在任职需求中出现频率最高的词汇 Top10等等
### 补充说明
最近接触了一个非常不错的文档在线生成工具,[docsify](https://docsify.js.org/#/),这个工具非常的不错,使用GitHubPage可以直接完成部署的工作,非常方便,vue风格的界面非常美观
对于我这种经常写文档的同学来说,简直是天大的福音。我的这个项目,会提供一份说明文档。就使用这个 [docsify](https://docsify.js.org/#/)来实现,
最后会呈现在[LaGou-Distributed-Spider-Flask项目说明文档](https://bruceju.github.io/LaGou-Distributed-Spider-Flask/)
* Python 版本;Python 2.7
* Scrapy 版本: Scrapy 1.5.0
* Redis 系统版本: Windows 64bit Redis-x64-3.2.100
## 构建Flask
### 创建Flask
这个没有什么太特别的地方
```python
# coding:utf8
from flask import Flask
import WebConfig
app = Flask(__name__)
app.config.from_object(WebConfig)
@app.route('/')
def index():
return 'hello Spider'
if __name__ == '__main__':
app.run()
```
### 构建命令行操作
> 为了能在cmd/shell中控制WebServer和Spider,需要设计几个操作命令,使用的是`flask_script`
* 提供以下几个命令
* db init (数据库初始化)
* create_admin -a <帐户名> - p <密码>
* 用于向数据库种添加Admin,用于登录WebServer
* 需要使用者 在命令行中进行输入,并加密储存
* runserver -host <帐户名> -port <密码> (启动WebServer)
* 接受用户输入的 host 和 port 进行host和port设置
* 默认是在 host=127.0.0.1 port = 5000 下运行
* runspider -debug <是否是调试模式> (启动Spider)
* 模式模式下,会自动将爬取的数据输出到 data.json文件中
* drop_all_db 重置数据库,进行信息提示,需要用户输入确认信息才能执行。
* 由于进行到此时,还没有进行db相关操作,所有先实现 `runserver`和 `runspider`的俩个部分的逻辑,
* 这里要注意项目的目录结构,否则会出现问题,可以参考d代码中的目录结构
* 在根目录创建 一个 `Manager.py`这样的一个文件用于命令的管理 部分代码如下
```python
# coding:utf8
from flask_script import Manager
from scrapy import cmdline
from LaGouSpiderProject.WebServer.WebServer import app
manager = Manager(app=app)
@manager.option('-host', '--host', dest='host', help='run server host', default='127.0.0.1')
@manager.option('-port', '--port', dest='port', help='run server port', default=5000)
def runserver(host, port):
app.run(host=host, port=port)
@manager.option('-debug', '--debug', dest='debug', help='is debug ??', default=1)
def runspider(debug):
if debug == 0:
cmdline.execute('scrapy crawl LGSpider -o data.json -t json'.split())
else:
cmdline.execute('scrapy crawl LGSpider'.split())
if __name__ == '__main__':
manager.run()
```
### 创建数据库模块
> 思考过后,决定使用MySQL了,那么现在需要创建一个数据库和一个管理员的表,这里使用的是
``flask_sqlalchemy`` 进行数据库关系的映射
* 使用`flask_sqlalchemy`连接MySQL数据库模块
* 创建Admin的class进行管理员的数据模表的映射
* 使用 `flask_sqlalchemy` 连接数据库,这里为了避免循环引用的问题
* 创建了一个类`exts.py`来进行间接引用,然后在WebServer中进行初始化
```python
# coding:utf8
'''
exts.py类
'''
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
```
```python
# coding:utf8
'''
WebServer.py类
'''
from flask imp
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
爬虫(Web Crawler)是一种自动化程序,用于从互联网上收集信息。其主要功能是访问网页、提取数据并存储,以便后续分析或展示。爬虫通常由搜索引擎、数据挖掘工具、监测系统等应用于网络数据抓取的场景。 爬虫的工作流程包括以下几个关键步骤: URL收集: 爬虫从一个或多个初始URL开始,递归或迭代地发现新的URL,构建一个URL队列。这些URL可以通过链接分析、站点地图、搜索引擎等方式获取。 请求网页: 爬虫使用HTTP或其他协议向目标URL发起请求,获取网页的HTML内容。这通常通过HTTP请求库实现,如Python中的Requests库。 解析内容: 爬虫对获取的HTML进行解析,提取有用的信息。常用的解析工具有正则表达式、XPath、Beautiful Soup等。这些工具帮助爬虫定位和提取目标数据,如文本、图片、链接等。 数据存储: 爬虫将提取的数据存储到数据库、文件或其他存储介质中,以备后续分析或展示。常用的存储形式包括关系型数据库、NoSQL数据库、JSON文件等。 遵守规则: 为避免对网站造成过大负担或触发反爬虫机制,爬虫需要遵守网站的robots.txt协议,限制访问频率和深度,并模拟人类访问行为,如设置User-Agent。 反爬虫应对: 由于爬虫的存在,一些网站采取了反爬虫措施,如验证码、IP封锁等。爬虫工程师需要设计相应的策略来应对这些挑战。 爬虫在各个领域都有广泛的应用,包括搜索引擎索引、数据挖掘、价格监测、新闻聚合等。然而,使用爬虫需要遵守法律和伦理规范,尊重网站的使用政策,并确保对被访问网站的服务器负责。
资源推荐
资源详情
资源评论
收起资源包目录
分布式采集拉钩网中杭州爬虫相关职位的数据并使用Flask进行数据的可视化与分析.zip (39个子文件)
SJT-code
docs
_coverpage.md 452B
.nojekyll 0B
index.html 637B
README.md 27KB
login.md 2KB
.gitignore 2KB
README.md 1KB
LaGou
__init__.py 0B
scrapy.cfg 279B
Manager.py 1KB
LaGouSpiderProject
__init__.py 0B
pipelines.py 2KB
WebServer
__init__.py 0B
WebConfig.py 213B
WebServer.py 476B
exts.py 74B
admin
__init__.py 95B
views.py 3KB
forms.py 1KB
templates
admin
login.html 4KB
index.html 5KB
model.py 2KB
Util
text.txt 198KB
__init__.py 0B
wordCount.txt 18KB
python_creater.jpg 45KB
WordCloud.py 4KB
common.py 3KB
lagou_job.txt 95KB
bloomfilter.py 3KB
stopwords 252B
spiders
__init__.py 161B
cache.py 1KB
data.json 30KB
LGSpider.py 7KB
startsipder.py 124B
items.py 3KB
settings.py 1KB
middlewares.py 5KB
共 39 条
- 1
资源评论
JJJ69
- 粉丝: 6223
- 资源: 5778
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于python实现的路径跟踪控制实现的项目源代码+文档说明(高分课程设计)
- 基于神经网络的虚假评论识别系统(Python源码+文档资料+数据集+代码流程说明文档+详细注释)
- 科大讯飞开发者大赛锂离子电池生产参数调控及生产温度预测挑战赛记录python源码
- 基于Python通过神经网络训练锂离子电池使用相关数据,预测电池当前最大容量+源代码+文档说明(毕业设计)
- 2023年创新组赛题一:基于数据驱动的动力电池健康状态评估与剩余寿命预测python源码+文档说明+全部数据
- indexcss.css
- 汇客数据权限,测试文件上传
- Proteus Professional 8.17
- kubesphere v3.4.1 离线包制作和离线安装
- VSPD虚拟串口软件安装包
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功