echarts mysql scrapy_抓取58job, 赶集job以及智联招聘,并使用数据分析生成echarts图...

本文介绍了一种使用scrapy-redis进行分布式爬取58job、赶集job和智联招聘招聘信息的方法,包括增量爬取、去重及Redis数据存储。随后,作者通过MySQL处理Redis数据,并展示了如何通过Flask、Echarts实现数据可视化。关键技术和扩展点包括详细信息抓取、通用爬虫、全国范围搜索和异常处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

**抓取58job, 赶集job以及智联招聘,并使用数据分析生成echarts图**

爬虫部分

爬虫部分使用scrapy-redis分布式爬虫,通过redis实现增量爬取以及去重,并将所有的数据直接保存到redis中,后续再做处理

github:https://github.com/AndrewAndrea/spider_work

代码已经提交到GitHub中,不是很完善,爬虫爬取的信息没有详情页的数据,只有赶集网的数据是详情页的。有点懒得写了。

可以自己把代码clone下来,在做完善。

抓取智联招聘的信息

b53da97e9c68710c79f79df0758aacfd.png

这个很简单

抓取58同城的招聘信息

a85978e1be24788796ba35ddf74a92fb.png

这个也很简单,我的代码只做了一个城市的抓取,可以做扩展

抓取赶集网的招聘信息

0a9040502e90ce7dced297a26cba2562.png

这个也简单。就不说了,也是一个城市的信息。

最后关于爬虫如何同时启动多个spider

如何将所有的爬虫的同时启动,这个我写一下,记录一下,避免以后给忘了。

首先,需要在爬虫文件新建一个commond包,在该目录下新建文件crawlall.py。

目录结构:

crawlall.py中的内容:

#!/usr/bin/env python# -*- coding: utf-8 -*-# @Time : 2019/5/6 16:31# @Author : zhao.jia# @Site :# @File : crawlall.py# @Software: PyCharmfromscrapy.commands importScrapyCommand

classCommand(ScrapyCommand):

requires_project = Truedefsyntax(self):

return'[options]'defshort_desc(self):

return'Runs all of the spiders'defrun(self,args,opts):

spider_list = self.crawler_process.spiders.list()

forname inspider_list:

self.crawler_process.crawl(name,**opts.__dict__)

self.crawler_process.start()

更改settings.py

COMMANDS_MODULE = 'spider_work.command'

启动

scrapy crawlall

爬虫部分到此结束,单个如何启动大家也都知道。

可以扩张的地方很多,所以再补充几点:

1、详细的招聘信息的抓取

2、可以将代码直接改成通用爬虫

3、58job和赶集网的都是同城的,可以扩展到全国,写个配置文件,拼接URL就行。可以分别根据每个网站做关键词搜索爬虫,而不是单一使用智联的关键词。

4、增加异常处理

5、增加数据去重存到 redis 中

数据转换部分(可以忽略)

我是通过 MySQL 去做的,所以需要将 Redis 中的数据取出来存到 MySQL 中。

Redis 存储的类型是列表,所以有重复数据。redis 取数据采用 lpop 方法。通过给 MySQL 表中的字段加索引,来去重,插入语句使用 replace into 而不是 insert into。 可以去百度一下,看看博客。

process_item_mysql.py

#!/usr/bin/env python# -*- coding: utf-8 -*-# @Time : 2019/4/29 23:15# @Author : zhao.jia# @Site :# @File : process_item_mysql.py# @Software: PyCharmimportpymysql

importredis

importjson

defprocess_item(key):

Redis_conn = redis.StrictRedis(host='ip',port=6379,db=0,password='pass')

MySql_conn = pymysql.connect(host='ip',user='root',passwd='pass',port=3306,db='zhaopin')

cur = MySql_conn.cursor()

while True:

data = Redis_conn.lpop(key)

ifdata:

try:

data = json.loads(data.decode('unicode_escape'),strict=False)

exceptExceptionase:

process_item(key)

print(data)

try:

if'-'indata['city']:

city = data['city'].split('-')[0]

else:

city = data['city']

exceptExceptionase:

city = data['city']

lis = (

pymysql.escape_string(data['jobType']),pymysql.escape_string(data['jobName']),pymysql.escape_string(data['emplType']),pymysql.escape_string(data['eduLevel']),pymysql.escape_string(data['salary']),pymysql.escape_string(data['companyName']),pymysql.escape_string(city),pymysql.escape_string(data['welfare']),pymysql.escape_string(data['workingExp']))

sql = (

"replace into work(jobType, jobName, emplType, eduLevel, salary, companyName, city, welfare, workingExp) VALUES ('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s')"% lis)

try:

cur.execute(sql)

MySql_conn.commit()

exceptExceptionase:

MySql_conn.rollback()

else:

breakcur.close()

MySql_conn.close()

if__name__ == "__main__":

key_list = ['job_spider:items','jobs58:items','jobsganjispider']

fori inrange(3):

process_item(key_list[i])

可视化部分

可视化采用的flask+mysql+echarts

具体代码见我的GitHub,这里就不贴了。

贴一下几个图吧

web网站的整体图

5ecd412964653bbb37bf2c58283c5956.png

搜索界面

27dc72d549edc3b38aad5dbc0e923f28.png

学历要求

e611d42d641db9d30f416bc06abea25b.png

学历工资图

dbabbdd0f6eb50d5786283f124f8e713.png

经验要求

51a1a4cdf564fc77a868bfd6519fb9c8.png

词云图

2be5ca06b16bc9a6ba82d70e7f9f67f6.png

完成

项目中可以扩展的部分很多,需要大家自己去写,不用再搭架子写简单的东西,web部分也可以扩展,包括页面以及echarts图,数据分析都可以继续扩展。

代码中有任何问题都可以留言,指正。一块学习!

代码会放在我GitHub上,关注后回复 ‘work’,即可获取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值