В холодную зиму занятости перспективы трудоустройства Python можно увидеть по найму Lagou.

Python

1. Сбор данных

Происхождение вопроса таково, солнечный полдень... Привычно открыла жиху и приготовилась грести в воду, когда увидела вопрос и просто пригласила на него ответить

Поэтому он был создан для того, чтобы собирать информацию о найме на работу Python на веб-сайте по подбору персонала, смотреть на текущую зарплату и распределение должностей и делать то, что вы говорите.

Поговорим о проблемах, возникающих в процессе сбора данных, во-первых, заголовок запроса должен быть замаскирован, иначе у вас всплывет первый шаг.Ваш запрос слишком частый, повторите попытку позже, Во-вторых, на веб-сайте есть несколько стратегий защиты от сканирования. Решение состоит в том, чтобы сначала получить сеанс, затем обновить сеанс для сканирования и, наконец, получить нужные данные.

Браузер Chrome щелкните правой кнопкой мыши, чтобы просмотретьnetwork, найти ссылкуhttps://www.lagou.com/jobs/positionAjax.json?needAddtionalResult=false

Вы можете видеть, что возвращенные данные — это сведения о наборе Python на странице, поэтому я открыл ее напрямую и нашел прямую подсказку.{"status":false,"msg":"您操作太频繁,请稍后再访问","clientIp":"124.77.161.207","state":2402}, мудро я понял, что все не так просто

Настоящий конкурс только начался, давайте сначала проанализируем запрошенное сообщение,

Вы можете видеть, что запросpostспособ передачи при передаче параметров

datas = {
            'first': 'false',
            'pn': x,
            'kd': 'python',
        }

В то же время нетрудно обнаружить, что каждый раз, когда вы нажимаете на следующую страницу, в одно и то же время будет отправляться сообщение.getпросить

这里我点了两次,出现两条get请求
После осмотра нашел этоgetзапрос и мыpostПросьба та же, дальше задача намного проще, разберитесь с идеями

Ключевые слова:python**Область поиска: **По всей стране **Старение данных:**2019.05.05

#!/usr/bin/env python3.4
# encoding: utf-8
"""
Created on 19-5-05
@title: ''
@author: Xusl
"""
import json
import requests
import xlwt
import time


# 获取存储职位信息的json对象,遍历获得公司名、福利待遇、工作地点、学历要求、工作类型、发布时间、职位名称、薪资、工作年限
def get_json(url, datas):
    my_headers = {
        "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36",
        "Referer": "https://www.lagou.com/jobs/list_Python?city=%E5%85%A8%E5%9B%BD&cl=false&fromSearch=true&labelWords=&suginput=",
        "Content-Type": "application/x-www-form-urlencoded;charset = UTF-8"
    }
    time.sleep(5)
    ses = requests.session()    # 获取session
    ses.headers.update(my_headers)  # 更新
    ses.get("https://www.lagou.com/jobs/list_python?city=%E5%85%A8%E5%9B%BD&cl=false&fromSearch=true&labelWords=&suginput=")
    content = ses.post(url=url, data=datas)
    result = content.json()
    info = result['content']['positionResult']['result']
    info_list = []
    for job in info:
        information = []
        information.append(job['positionId'])  # 岗位对应ID
        information.append(job['city'])  # 岗位对应城市
        information.append(job['companyFullName'])  # 公司全名
        information.append(job['companyLabelList'])  # 福利待遇
        information.append(job['district'])  # 工作地点
        information.append(job['education'])  # 学历要求
        information.append(job['firstType'])  # 工作类型
        information.append(job['formatCreateTime'])  # 发布时间
        information.append(job['positionName'])  # 职位名称
        information.append(job['salary'])  # 薪资
        information.append(job['workYear'])  # 工作年限
        info_list.append(information)
        # 将列表对象进行json格式的编码转换,其中indent参数设置缩进值为2
        # print(json.dumps(info_list, ensure_ascii=False, indent=2))
    # print(info_list)
    return info_list


def main():
    page = int(input('请输入你要抓取的页码总数:'))
    # kd = input('请输入你要抓取的职位关键字:')
    # city = input('请输入你要抓取的城市:')

    info_result = []
    title = ['岗位id', '城市', '公司全名', '福利待遇', '工作地点', '学历要求', '工作类型', '发布时间', '职位名称', '薪资', '工作年限']
    info_result.append(title)
    for x in range(1, page+1):
        url = 'https://www.lagou.com/jobs/positionAjax.json?needAddtionalResult=false'
        datas = {
            'first': 'false',
            'pn': x,
            'kd': 'python',
        }
        try:
            info = get_json(url, datas)
            info_result = info_result + info
            print("第%s页正常采集" % x)
        except Exception as msg:
            print("第%s页出现问题" % x)
        
        # 创建workbook,即excel
        workbook = xlwt.Workbook(encoding='utf-8')
        # 创建表,第二参数用于确认同一个cell单元是否可以重设值
        worksheet = workbook.add_sheet('lagouzp', cell_overwrite_ok=True)
        for i, row in enumerate(info_result):
            # print(row)
            for j, col in enumerate(row):
                # print(col)
                worksheet.write(i, j, col)
        workbook.save('lagouzp.xls')


if __name__ == '__main__':
    main()

日志记录

Хранить в экселе конечно мало, я им и раньше пользовался.matplotlibЗаймитесь визуализацией данных, на этот раз с новой вещьюpyecharts.

2. Узнайте о круговых диаграммах

pyecharts — мощный инструмент визуализации данных, сочетающий в себе Python и echarts, включая различные диаграммы.

  • Гистограмма (столбец/гистограмма)
  • Bar3D (трехмерная гистограмма)
  • Блочная диаграмма
  • EffectScatter (точечная диаграмма с анимацией волнового эффекта)
  • Воронка
  • Датчик (приборная панель)
  • Гео (географическая система координат)
  • График
  • Тепловая карта
  • Клайн (диаграмма К-линии)
  • Линия (линейная/областная диаграмма)
  • Line3D (трехмерная линейная диаграмма)
  • Жидкость (Таблица водного поло)
  • карта
  • Parallel (параллельная система координат)
  • пирог
  • Полярная (полярная система координат)
  • Радар
  • Санки (диаграмма Санки)
  • Разброс
  • Scatter3D (3D точечная диаграмма)
  • ТемаРека
  • WordCloud (карта облака слов)

Обычай

  • Класс сетки: отображать несколько графиков параллельно
  • Класс перекрытия: комбинируйте разные типы диаграмм для наложения на одну и ту же диаграмму.
  • Класс страницы: отображать несколько изображений последовательно на одной веб-странице.
  • Класс временной шкалы: предоставляет карусель временной шкалы из нескольких изображений.

Следует также отметить, что, начиная с версии 0.3.2, чтобы уменьшить размер самого проекта и сохранить облегченную работу проекта pyecharts, pyecharts больше не будет поставляться с файлом карты js. Если пользователям необходимо использовать картографические карты (Geo, Map), они могут самостоятельно установить соответствующий пакет файлов карты.

  1. Глобальная карта страныecharts-countries-pypkg(1.9MB): Карта мира и 213 стран, включая карту Китая.
  2. Карта провинции Китайecharts-china-provinces-pypkg(730 КБ): 23 провинции, 5 автономных районов.
  3. Карта уровня города Китаяecharts-china-cities-pypkg(3,8 МБ): 370 китайских городов.

Вы также можете установить его с помощью команды

pip install echarts-countries-pypkg
pip install echarts-china-provinces-pypkg
pip install echarts-china-cities-pypkg

3. Визуализация данных (код + дисплей)

  • Набор по городам
from pyecharts import Bar

city_nms_top10 = ['北京', '上海', '深圳', '成都', '杭州', '广州', '武汉', '南京', '苏州', '郑州', '天津', '西安', '东莞', '珠海', '合肥', '厦门', '宁波',
                  '南宁', '重庆', '佛山', '大连', '哈尔滨', '长沙', '福州', '中山']
city_nums_top10 = [149, 95, 77, 22, 17, 17, 16, 13, 7, 5, 4, 4, 3, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1]

bar = Bar("Python岗位", "各城市数量")
bar.add("数量", city_nms, city_nums, is_more_utils=True)
# bar.print_echarts_options() # 该行只为了打印配置项,方便调试时使用
bar.render('Python岗位各城市数量.html')  # 生成本地 HTML 文件

  • Отображение распределения карты (в этой сцене мало смысла, но больше анализа)
from pyecharts import Geo

city_datas = [('北京', 149), ('上海', 95), ('深圳', 77), ('成都', 22), ('杭州', 17), ('广州', 17), ('武汉', 16), ('南京', 13), ('苏州', 7),
     ('郑州', 5), ('天津', 4), ('西安', 4), ('东莞', 3), ('珠海', 2), ('合肥', 2), ('厦门', 2), ('宁波', 1), ('南宁', 1), ('重庆', 1),
     ('佛山', 1), ('大连', 1), ('哈尔滨', 1), ('长沙', 1), ('福州', 1), ('中山', 1)]
geo = Geo("Python岗位城市分布地图", "数据来源拉勾", title_color="#fff",
                  title_pos="center", width=1200,
                  height=600, background_color='#404a59')
attr, value = geo.cast(city_datas)
geo.add("", attr, value, visual_range=[0, 200], visual_text_color="#fff",
                symbol_size=15, is_visualmap=True)
geo.render("Python岗位城市分布地图_scatter.html")


geo = Geo("Python岗位城市分布地图", "数据来源拉勾", title_color="#fff",
                  title_pos="center", width=1200,
                  height=600, background_color='#404a59')
        attr, value = geo.cast(city_datas)
        geo.add("", attr, value, type="heatmap", visual_range=[0, 10], visual_text_color="#fff",
                symbol_size=15, is_visualmap=True)
        geo.render("Python岗位城市分布地图_heatmap.html")

  • Набор по городам
from pyecharts import Pie

city_nms_top10 = ['北京', '上海', '深圳', '成都', '广州', '杭州', '武汉', '南京', '苏州', '郑州']
city_nums_top10 = [149, 95, 77, 22, 17, 17, 16, 13, 7, 5]
pie = Pie()
pie.add("", city_nms_top10, city_nums_top10, is_label_show=True)
# pie.show_config()
pie.render('Python岗位各城市分布饼图.html')

БэйшаншенКоличество рабочих мест в Китае явно превосходит другие города, что также отражает то, почему все больше и больше ИТ-специалистов уезжают в города первого уровня после окончания учебы. и городов третьего эшелона есть еще одна важнейшая причина.Спрос и предложение,Поскольку передовых позиций много, избирательность относительно высока.С другой стороны, если вы посмотрите на ситуацию второй и третьей линий, очень вероятно, что вы несколько раз прыгнули и обнаружили, что компании которые могут остаться в той же отрасли, остались...

  • Диапазон заработной платы

Видно, что зарплата на должностях Python в основном составляет 10 000 ~ 20 000. Те, кто хочет работать в индустрии Python, могут объединить количество рабочих лет и зарплату для справки.

  • Требования к образованию + стаж работы

С точки зрения трудового стажа много новобранцев с 1-3 годами или 3-5 годами опыта работы, в то время как свежих выпускников и меньше года очень мало, что не очень дружелюбно к стажерам. что он придает большое значение квалификации новобранцев.Хотя образование не значит все, для предприятия самый быстрый и эффективный способ оценить способности человека за короткий период времени, несомненно, начать с образования. Первый уровень образования, второй уровень собеседования.

Однако это не означает, что для людей с низкой академической квалификацией нет хорошего выхода: сейчас студентов становится все больше, найти работу становится все труднее, а конкуренция становится все более жесткой. .Даже если у вас есть высшее образование, нет никакой гарантии, что вы сможете найти работу.Довольная работа, Бог вознаграждает тяжелый труд,Особенно в ИТ-индустрии итерация знаний происходит чаще, чем в других отраслях. Это самое правильное решение продолжать учиться и расширять широту и глубину собственного обучения.

Когда приближается трудовая зима, нам нужен рациональный и объективный взгляд, а не слепой пессимизм или оптимизм. Из приведенного выше анализа данных, если вам нравится Python, вы все равно можете войти в яму, но вам следует обратить внимание на ярлык с опытом работы, даже если у вас нет опыта работы, вы должны попытаться сделать полный проект самостоятельно в процессе изучения Python, будь то поисковый робот или сканер.Будь то анализ данных или разработка, вы должны попытаться самостоятельно построить систему и в процессе развить собственное мышление и способность решать проблемы. Непрерывное обучение — лучшая инвестиция в свое будущее и самая правильная поза, чтобы пережить холодную зиму.

Данные о наборе можно получить на официальном аккаунте:Осадный лев питонаФоновый ответДанные о набореВот и все.