imagen


Creo que todos los estudiantes han enviado sus currículums en el anzuelo más o menos. Hoy, de repente quiero saber el nivel salarial, los requisitos de contratación, los beneficios y la ubicación de la empresa de desarrollo de Python en Beijing . Dado que se va a analizar, debe ser una muestra de datos existente. ¡Este artículo le muestra el estado actual del desarrollo de Python en Beijing a través del rastreo y el análisis de datos, y espera ayudarlo en la planificación de su carrera! ! !


reptil


El primer paso de un rastreador es, naturalmente, comenzar analizando la solicitud y el código fuente de la página web. Desde el código fuente de la página web no podemos encontrar las ofertas de trabajo publicadas. Pero en la solicitud vemos una solicitud POST de este tipo

Como se muestra en la siguiente figura, podemos ver que

URL : https://www.lagou.com/jobs/positionAjax.json?city=%E5%8C%97%E4%BA%AC&needAddtionalResult=false

Método de solicitud : publicación

resultado : para las ofertas de trabajo publicadas

totalCount : el número de ofertas de trabajo


imagen


imagen


imagen

A través de la práctica se encuentra que además de tener que llevar cabeceras, Lagou.com también tiene restricciones en la frecuencia de acceso ip. Al principio, le indicará "acceso demasiado frecuente", y si continúa accediendo, la dirección IP se incluirá en la lista negra. Sin embargo, se eliminará automáticamente de la lista negra después de un período de tiempo.

Para esta estrategia, podemos limitar la frecuencia de las solicitudes, este inconveniente es que afecta la eficiencia del rastreador.

En segundo lugar, también podemos rastrear la IP del proxy. Las IP de proxy gratuitas se pueden encontrar en línea, pero la mayoría de ellas no son estables. El precio pagado no es muy asequible. 

Depende de cómo elijas

imagen

1
ideas

    Al analizar la solicitud, encontramos que se devuelven 15 piezas de datos por página, y totalCount nos dice el número total de piezas de información sobre la posición.

Redondea hacia arriba para obtener el número total de páginas. Luego guarde los datos resultantes en un archivo csv. ¡De esta manera obtenemos la fuente de datos para el análisis de datos!

Los datos del formulario de la solicitud posterior pasan tres parámetros

first : Si es la primera página (no muy útil)

pn : número de página

kd : palabra clave de búsqueda


2
no bb, mostrar código


# 获取请求结果
# kind 搜索关键字
# page 页码 默认是1
def get_json(kind, page=1,):
    # post请求参数
    param = {
        'first''true',
        'pn': page,
        'kd': kind
    }
    header = {
        'Host''www.lagou.com',
        'Referer''https://www.lagou.com/jobs/list_python?labelWords=&fromSearch=true&suginput=',
        'User-Agent''Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36'
    }
    # 设置代理
    proxies = [
        {'http''140.143.96.216:80''https''140.143.96.216:80'},
        {'http''119.27.177.169:80''https''119.27.177.169:80'},
        {'http''221.7.255.168:8080''https''221.7.255.168:8080'}
    ]
    # 请求的url
    url = 'https://www.lagou.com/jobs/positionAjax.json?px=default&city=%E5%8C%97%E4%BA%AC&needAddtionalResult=false'
    # 使用代理访问
    # response = requests.post(url, headers=header, data=param, proxies=random.choices(proxies))
    response = requests.post(url, headers=header, data=param, proxies=proxies)
    response.encoding = 'utf-8'
    if response.status_code == 200:
        response = response.json()
        # 请求响应中的positionResult 包括查询总数 以及该页的招聘信息(公司名、地址、薪资、福利待遇等...)
        return response['content']['positionResult']
    return None

A continuación, solo necesitamos llamar a  get_json  para obtener el resultado de la solicitud después de cada vuelta de página, y luego atravesar y recuperar la información de reclutamiento requerida.

if __name__ == '__main__':
    # 默认先查询第一页的数据
    kind = 'python'
    # 请求一次 获取总条数
    position_result = get_json(kind=kind)
    # 总条数
    total = position_result['totalCount']
    print('{}开发职位,招聘信息总共{}条.....'.format(kind, total))
    # 每页15条 向上取整 算出总页数
    page_total = math.ceil(total/15)

    # 所有查询结果
    search_job_result = []
    #for i in range(1, total + 1)
    # 为了节约效率 只爬去前100页的数据
    for i in range(1100):
        position_result = get_json(kind=kind, page= i)
        # 每次抓取完成后,暂停一会,防止被服务器拉黑
        time.sleep(15)
        # 当前页的招聘信息
        page_python_job = []
        for j in position_result['result']:
            python_job = []
            # 公司全名
            python_job.append(j['companyFullName'])
            # 公司简称
            python_job.append(j['companyShortName'])
            # 公司规模
            python_job.append(j['companySize'])
            # 融资
            python_job.append(j['financeStage'])
            # 所属区域
            python_job.append(j['district'])
            # 职称
            python_job.append(j['positionName'])
            # 要求工作年限
            python_job.append(j['workYear'])
            # 招聘学历
            python_job.append(j['education'])
            # 薪资范围
            python_job.append(j['salary'])
            # 福利待遇
            python_job.append(j['positionAdvantage'])

            page_python_job.append(python_job)

        # 放入所有的列表中
        search_job_result += page_python_job
        print('第{}页数据爬取完毕, 目前职位总数:{}'.format(i, len(search_job_result)))
        # 每次抓取完成后,暂停一会,防止被服务器拉黑
        time.sleep(15)

¡OK! Hemos obtenido los datos, el último paso que necesitamos para guardar los datos

  # 将总数据转化为data frame再输出
    df = pd.DataFrame(data=search_job_result,
                      columns=['公司全名''公司简称''公司规模''融资阶段''区域''职位名称''工作经验''学历要求''工资''职位福利'])
    df.to_csv('lagou.csv', index=False, encoding='utf-8_sig')

Ejecute el método principal directamente al resultado:


imagen

análisis de los datos

Al analizar el archivo cvs, para facilitar nuestras estadísticas, necesitamos limpiar los datos.

Por ejemplo, se excluye la contratación de puestos de pasantía, no se requieren los años de trabajo o los estudiantes nuevos se tratan como 0 años, el rango salarial debe calcularse como un valor aproximado y no se requiere la formación académica como universidad.

# 读取数据  
df = pd.read_csv('lagou.csv', encoding='utf-8')
# 数据清洗,剔除实习岗位  
df.drop(df[df['职位名称'].str.contains('实习')].index, inplace=True)  
# print(df.describe())
# 由于CSV文件内的数据是字符串形式,先用正则表达式将字符串转化为列表,再取区间的均值  
pattern = 'd+'  
df['work_year'] = df['工作经验'].str.findall(pattern)
# 数据处理后的工作年限
avg_work_year = []
# 工作年限
for i in df['work_year']:
   # 如果工作经验为'不限'或'应届毕业生',那么匹配值为空,工作年限为0  
   if len(i) == 0:  
       avg_work_year.append(0)  
   # 如果匹配值为一个数值,那么返回该数值  
   elif len(i) == 1:  
       avg_work_year.append(int(''.join(i)))  
   # 如果匹配值为一个区间,那么取平均值  
   else:  
       num_list = [int(j) for j in i]  
       avg_year = sum(num_list)/2  
       avg_work_year.append(avg_year)
df['工作经验'] = avg_work_year

# 将字符串转化为列表,再取区间的前25%,比较贴近现实  
df['salary'] = df['工资'].str.findall(pattern)
# 月薪
avg_salary = []  
for k in df['salary']:  
   int_list = [int(n) for n in k]  
   avg_wage = int_list[0]+(int_list[1]-int_list[0])/4  
   avg_salary.append(avg_wage)
df['月工资'] = avg_salary

# 将学历不限的职位要求认定为最低学历:大专
df['学历要求'] = df['学历要求'].replace('不限','大专')

Después de que los datos simplemente se limpien, comencemos nuestras estadísticas.

1
Trazar histograma de salario
# 绘制频率直方图并保存  
plt.hist(df['月工资'])
plt.xlabel('工资 (千元)')   
plt.ylabel('频数')
plt.title("工资直方图")   
plt.savefig('薪资.jpg')  
plt.show()  

imagen


Conclusión: la mayor parte del salario del desarrollo de Python en Beijing está entre 15 y 25 000

2
Gráfico circular de distribución de la empresa
# 绘制饼图并保存  
count = df['区域'].value_counts()
plt.pie(count, labels = count.keys(),labeldistance=1.4,autopct='%2.1f%%')  
plt.axis('equal')  # 使饼图为正圆形  
plt.legend(loc='upper left', bbox_to_anchor=(-0.11))  
plt.savefig('pie_chart.jpg')  
plt.show()  

imagen

Conclusión: el distrito de Haidian tiene la mayor cantidad de empresas que desarrollan Python, seguido del distrito de Chaoyang. Los amigos que van a trabajar en Beijing probablemente saben dónde alquilar una casa. 

3
Histograma de Requisitos Académicos
# {'本科': 1304, '大专': 94, '硕士': 57, '博士': 1}
dict = {}
for i in df['学历要求']:
    if i not in dict.keys():
        dict[i] = 0
    else:
        dict[i] += 1
index = list(dict.keys())
print(index)
num = []
for i in  index:
    num.append(dict[i])
print(num)
plt.bar(left=index, height=num, width=0.5)
plt.show()

imagen


Conclusión: en el reclutamiento de Python, la mayoría de las empresas requieren una licenciatura o superior. Pero la educación es solo un trampolín, si trabajas duro para mejorar tus habilidades, esto no es un problema.


4
Beneficios palabra nube mapa
# 绘制词云,将职位福利中的字符串汇总  
text = ''  
for line in df['职位福利']:  
   text += line  
# 使用jieba模块将字符串分割为单词列表
cut_text = ' '.join(jieba.cut(text))
#color_mask = imread('cloud.jpg')  #设置背景图
cloud = WordCloud(
    background_color = 'white',
    # 对中文操作必须指明字体
    font_path='yahei.ttf',
    #mask = color_mask,
    max_words = 1000,
    max_font_size = 100
    ).generate(cut_text)

# 保存词云图片
cloud.to_file('word_cloud.jpg')
plt.imshow(cloud)
plt.axis('off')
plt.show()

imagen

Conclusión: el trabajo flexible es el beneficio de la mayoría de las empresas, seguido de cinco seguros y un fondo de vivienda, y algunas empresas también proporcionarán seis seguros y un fondo de vivienda. El ambiente de equipo y la gestión plana también son aspectos importantes.

Esto concluye el análisis. Los estudiantes que lo necesiten también pueden consultar la información de contratación de otros puestos o regiones ~

Espero que pueda ayudarte a posicionar tu propio desarrollo y planificación de carrera.


imagen

§§

Como comunidad tecnológica global descentralizada, la comunidad china de Python tiene la visión de convertirse en una tribu espiritual de 200 000 desarrolladores chinos de Python en todo el mundo. Actualmente cubre las principales plataformas de medios y colaboración, y coopera con Alibaba, Tencent, Baidu, Microsoft, Amazon , fuente abierta China, CSDN y otras empresas conocidas en la industria han establecido amplios contactos con la comunidad técnica, con decenas de miles de miembros registrados de más de diez países y regiones Agencias gubernamentales, instituciones de investigación científica, instituciones financieras y empresas conocidas en el país y en el extranjero, representadas por bancos, la Academia de Ciencias de China, CICC, Huawei, BAT, Google, Microsoft, etc., son seguidas por casi 200,000 desarrolladores en toda la plataforma.

Popular recientemente


Interpretación de datos quién es la diosa en el corazón de los hombres heterosexuales.


El método y la implementación de Python de la evaluación del modelo de clasificación.


Analicé 50.000 artículos en Huxiu.com y encontré estos secretos


Rastreo y analizo Meituan.com, resulta que las 10 mejores delicias en Beijing y Shanghái son ellas.


¡El secreto del éxito de los Golden State Warriors en 4 años y 3 campeonatos! El análisis de visualización de datos de Python le dice la respuesta


Correo electrónico de envío: [email protected]


imagen

▼  Haga clic a continuación para leer el texto original y convertirse en miembro  registrado de la comunidad de forma gratuita