1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/XksA-me-lagou_data_spider

Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

拉钩网数据爬虫

Проект введения

Сбор данных с сайта Лагу, их анализ, визуализация и анализ того, какой город и какая должность наиболее востребованы.

Если вы впервые читаете этот учебник, можете начать с самого начала: Сканер, от основ до продвинутого уровня (1) Подписывайтесь на официальный аккаунт WeChat: Экстремально простой XksA WeChat ID: xksnh888 Перепечатка, пожалуйста, свяжитесь с WeChat ID: zs820553471 Обмен и обучение

1. Установка модулей перед началом обучения

pip install requests
pip install cvs
pip install pandas
pip install numpy
pip install jieba
pip install re
pip install pyecharts
pip install os

2. Краткое изложение

Зачем собирать данные с Лагу? Ха-ха, конечно, потому что это просто, вуаля, причины следующие:    (1) Динамическая веб-страница, сложнее для сбора данных, более содержательно при объяснении;    (2) В отличие от обычных ситуаций, мы не можем получить нужные нам данные через запросы get, нам нужно проанализировать страницу.

    1. Сбор данных о вакансиях на Лагу   (1) Запросы на получение, получение одной страницы;   (2) Анализ загрузки страницы, поиск данных;   (3) Добавление информации о заголовках, имитация запросов браузера;   (4) Разбор страницы, реализация сбора данных по страницам;   (5) Сбор данных в файл csv.
    1. Анализ и визуализация данных   (1) Анализ данных; ​  (2) Реализация визуализации данных с помощью pyecharts.

3. Начинаем всерьёз, откройте свои маленькие глазки

Сбор данных о вакансиях на Лагу
(1) Запросите и получите одну страницу
# Мы обычно используем процесс: скопируйте URL-адрес веб-страницы -> отправьте запрос get -> распечатайте содержимое страницы -> проанализируйте сбор данных
# 1. Получить URL-адрес Лагу
req_url = 'https://www.lagou.com/jobs/list_python?city=%E5%85%A8%E5%9B%BD&cl=false&fromSearch=true&labelWords=&suginput='
# 2. Отправить запрос get
req_result = requests.get(req_url)
# 3. Распечатайте результат запроса
print(req_result.text)

Из этого процесса выводится следующий результат:

<html>
  <head>
     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"><meta name="renderer"  content="webkit">
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  </head>
  <script type="text/javascript" src="https://www.lagou.com/utrack/trackMid.js?version=1.0.0.3&t=1529144464"></script>
  <body>
   <input type="hidden" id="KEY" value="VAfyhYrvroX6vLr5S9WNrP16ruYI6aYOZIwLSgdqTWc"/>
  <script type="text/javascript">HZRxWevI();</script>
é?μé?¢?? è????-...
  <script type="text/javascript" src="https://www.lagou.com/upload/oss.js"></script>
  </body>
</html>

Можно видеть, что ситуация сильно отличается от ожидаемой. Почему это происходит? Это очень просто, потому что это не простая статическая страница. Мы знаем, что есть два основных различия между запросами get и post:

(1) Get — это тип запроса, который запрашивает данные у сервера; Post — это тип запроса, который отправляет данные на сервер, и данные находятся в теле сообщения после.
GET и POST — это только разные способы отправки, а не один получает, другой отправляет.
(2) Запрос get отправляет информацию в виде открытого текста в URL-адресе, параметры сохраняются в истории браузера или на сервере веб-сайта,
а post не будет (это также причина, по которой мы обнаруживаем, что URL-адрес страницы не меняется при переходе на следующую страницу на Лагу).
(2) Проанализируйте загрузку страницы, найдите данные
    1. Анализ запроса Введя «python» в поле поиска на главной странице Лагу и нажав кнопку поиска, я наконец нашёл страницу с информацией о вакансии, которая действительно является запросом post, и содержимое страницы представляет собой словарь формата json.

Здесь напишите описание изображения

    1. Содержимое ответа На странице мы в основном получаем 7 фрагментов данных (компания | город | должность | зарплата | требования к образованию | опыт работы | преимущества должности).

Здесь опишите изображение

      json данные организованы следующим образом: Я организовал данные, полученные из json, следующим образом:

Здесь опишите изображение

Мы увидим, что нужные нам данные находятся внутри: req_info['content']['positionResult']['result'], который представляет собой список, и в нём также содержится много других данных. В этом случае нас не интересуют другие данные. Данные, которые нам нужны, показаны на следующем рисунке:

Здесь опишите изображение

(3) Добавьте информацию о заголовке, имитируйте запрос браузера

       Из анализа запроса мы можем найти URL-адрес запроса post как: https://www.lagou.com/jobs/positionAjax.json?needAddtionalResult=false, если мы отправим запрос post напрямую, мы получим следующее сообщение об ошибке:

{'success': False, 'msg': 'Вы слишком часто выполняете операции, пожалуйста, подождите некоторое время и повторите попытку', 'clientIp': '122.xxx.xxx.xxx'}

Причина этой ошибки заключается в том, что мы непосредственно отправляем запрос post, и сервер ошибочно принимает нас за «робота», это своего рода анти-сканирование, решение простое, добавьте заголовок запроса, чтобы полностью имитировать запрос браузера, информация заголовка запроса показана на следующем рисунке:

Здесь опишите изображение

(4) Разобрать страницу, реализовать сбор данных со страниц
  • Как реализовать переход по страницам? Обычно мы реализуем переход по страницам, вручную переходя по страницам в браузере, а затем наблюдая за изменениями в URL, чтобы найти закономерности, но когда мы переходим по страницам на Лагу, мы обнаружим, что когда мы вручную переходим по страницам в браузере, URL в адресной строке не изменяется.
  • Ещё раз проанализируем страницу? Конечно, мы должны верить, что должно быть изменение, иначе как страница может измениться сама по себе? Анализ показывает следующую закономерность: В запросе post есть три параметра запроса формы: first, kd, pn, через диаграмму мы можем легко догадаться об их значении: ``` first: true, # Является ли страница первой, false означает, что не является, true означает, что является kd: Python, # Ключевое слово поиска pn: 1 # Номер страницы }

**Код на Python для поиска вакансий на сайте Lagou.com:**

```Python
import requests
# 1. URL запроса POST
req_url = 'https://www.lagou.com/jobs/positionAjax.json?needAddtionalResult=false'
# 2. Заголовок запроса headers
headers = {'Ваш заголовок запроса'}
# 3. Цикл запроса for
for i in range(1, 31):
    data = {
        'first': 'false',
        'kd': 'Python',
        'pn': i
    }
    # 3.1 Запрос requests.post
    req_result = requests.post(req_url, headers=headers, data=data)
    req_result.encoding = 'utf-8'
    # 3.2 Получение данных
    req_info = req_result.json()
    # Вывод полученных данных на экран
    print(req_info)

Функция для сохранения данных в CSV-файл:

def file_do(list_info):
    # Получение размера файла
    file_size = os.path.getsize(r'G:\lagou_test.csv')
    if file_size == 0:
        # Заголовок таблицы
        name = ['Компания', 'Город', 'Должность', 'Зарплата', 'Требования к образованию', 'Опыт работы', 'Преимущества должности']
        # Создание объекта DataFrame
        file_test = pd.DataFrame(columns=name, data=list_info)
        # Запись данных в файл
        file_test.to_csv(r'G:\lagou_test.csv', encoding='gbk', index=False)
    else:
        with open(r'G:\lagou_test.csv','a+',newline='') as file_test :
            # Добавление данных в конец файла
            writer = csv.writer(file_test)
            # Запись данных в файл
            writer.writerows(list_info)

Простой пример данных, полученных с помощью функции:

Здесь будет изображение.

Часть 4: Продвинутое использование (не связанное с парсингом)

Анализ данных и визуализация с использованием Pyechart:

  • Анализ заработной платы:
    • Статистический анализ количества появлений каждого города.
    • Создание столбчатой диаграммы с использованием библиотеки Pyechart.

Здесь будет изображение.

Мы можем видеть, что зарплата в сфере Python обычно начинается от 10 тысяч и находится в диапазоне от 10 до 40 тысяч. Поэтому не стоит бояться, что работа программистом на Python не принесёт достаточного дохода.

  • Анализ рабочих мест по городам:
    • Использование столбчатой диаграммы для визуализации распределения рабочих мест по городам.

Здесь будет изображение.

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

  • Требования к уровню образования:
    • Визуализация требований к уровню образования с использованием столбчатой диаграммы.

Здесь будет изображение.

Согласно диаграмме, требования к уровню образования для программистов на Python невысоки, и большинство вакансий требуют наличия высшего образования.

  • Опыт работы:
    • Анализ требований к опыту работы с использованием столбчатой диаграммы.

Здесь будет изображение.

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

  • Направления исследований в области разработки:
    • Исследование направлений исследований в области разработки с использованием диаграмм.

Здесь будет изображение.

Основным направлением является разработка, без уточнения конкретных областей.

  • Преимущества работы:
    • Анализ преимуществ работы с использованием ключевых слов и визуализации.

Здесь будет изображение.

Преимуществом работы является возможность развития в области разработки.

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Соберите данные с сайта Лагок (Lakorn) и проведите анализ данных. Это поможет определить, какой город и какая должность наиболее подходят для вашей профессиональной деятельности. Развернуть Свернуть
Apache-2.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/XksA-me-lagou_data_spider.git
git@api.gitlife.ru:oschina-mirror/XksA-me-lagou_data_spider.git
oschina-mirror
XksA-me-lagou_data_spider
XksA-me-lagou_data_spider
master