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

8 篇文章 0 订阅
1 篇文章 0 订阅

爬虫部分

爬虫部分使用scrapy-redis分布式爬虫,通过redis实现增量爬取以及去重,并将所有的数据直接保存到redis中,后续再做处理
github:https://github.com/AndrewAndrea/spider_work
代码已经提交到GitHub中,不是很完善,爬虫爬取的信息没有详情页的数据,只有赶集网的数据是详情页的。有点懒得写了。
可以自己把代码clone下来,在做完善。
微信公众号,公众号中有更多资源,以及更多干货欢迎关注,
在这里插入图片描述
公众号

抓取智联招聘的信息

这个很简单

抓取58同城的招聘信息

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

抓取赶集网的招聘信息

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

最后关于爬虫如何同时启动多个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: PyCharm

from scrapy.commands import ScrapyCommand


class Command(ScrapyCommand):
    requires_project = True

    def syntax(self):
        return '[options]'

    def short_desc(self):
        return 'Runs all of the spiders'

    def run(self, args, opts):
        spider_list = self.crawler_process.spiders.list()
        for name in spider_list:
            self.crawler_process.crawl(name, **opts.__dict__)
        self.crawler_process.start()

更改settings.py

COMMANDS_MODULE = 'spider_work.command'

启动

scrapy crawlall

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

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

我是通过 MySQL 去做的,所以需要将 Redis 中的数据取出来存到 MySQL 中。
Redis 存储的类型是列表,所以有重复数据。redis 取数据采用 lpop 方法。通过给 MySQL 表中的字段加索引,来去重,插入语句使用 replace into 而不是 insert into,可以去看看我的另外一篇文章关于插入不重复数据replace

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: PyCharm

import pymysql
import redis
import json


def process_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='dbname')
    cur = MySql_conn.cursor()
    while True:
        data = Redis_conn.lpop(key)
        if data:
            try:
                data = json.loads(data.decode('unicode_escape'), strict=False)
            except Exception as e:
                process_item(key)
            print(data)
            try:
                if '-' in data['city']:
                    city = data['city'].split('-')[0]
                else:
                    city = data['city']
            except Exception as e:
                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()
            except Exception as e:
                MySql_conn.rollback()
        else:
            break
    cur.close()
    MySql_conn.close()


if __name__ == "__main__":
    key_list = ['job_spider:items', 'jobs58:items', 'jobsganjispider']
    for i in range(3):
        process_item(key_list[i])

可视化部分

可视化采用的flask+mysql+echarts

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

贴一下几个图吧

web网站的整体图

整体

学历要求

学历要求

学历工资图

在这里插入图片描述

经验要求

在这里插入图片描述

词云图

词云

完成

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

裸睡的雨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值