Краулер Python, не ступив на яму: как научиться сканировать большие данные за месяц

Python рептилия
Краулер Python, не ступив на яму: как научиться сканировать большие данные за месяц

Почему сканеры Python популярны

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

Используя сканеры, мы можем получить большое количество ценных данных, чтобы получить информацию, которую нельзя получить в перцептивном знании, например:

Знаю почти:Сканируйте высококачественные ответы и отфильтровывайте для себя лучший контент по каждой теме.Таобао, Цзиндун:Собирайте данные о продуктах, обзорах и продажах, а также анализируйте сценарии потребления различных продуктов и пользователей.Анджуке, Ляньцзя: собирайте информацию о продажах и аренде недвижимости, анализируйте тенденции изменения цен на жилье и проводите анализ цен на жилье в разных регионах.Lagou.com, Жилиан:Просматривайте все виды информации о вакансиях, анализируйте спрос на таланты и уровень заработной платы в различных отраслях.Снежная сеть:Фиксируйте поведение высокодоходных пользователей Snowball, чтобы анализировать и прогнозировать фондовый рынок.

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

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

Для Сяобая ползание может быть очень сложной задачей с высоким техническим порогом. Например, некоторые люди думают, что обучающиеся поисковые роботы должны владеть Python, а затемХе-хе-хе, я систематически изучаю все аспекты Python, но спустя долгое время я обнаружил, что все еще не могу сканировать данные.; Некоторые люди думают, что сначала нужно освоить знание веб-страниц, поэтомуЗапускаем HTML\CSS, результат попадает в яму фронтэнда, устал……

Тем не менее, очень легко освоить правильный метод и иметь возможность сканировать данные основных веб-сайтов за короткий период времени, но рекомендуется начать сНачните с конкретной цели.

Благодаря поставленным целям ваше обучение будет более точным и эффективным.Все предварительные знания, которые вы считаете необходимыми, могут быть изучены в процессе достижения цели.Вот гладкий, основанный на нуле путь быстрого старта для вас.

1. Изучите пакеты Python и внедрите базовый процесс сканирования 2. Поймите, как хранить неструктурированные данные 3. Изучите скрапер и создайте специализированный краулер 4. Изучите знания баз данных, работайте с крупномасштабным хранением и извлечением данных 5. Овладейте различными навыками, работайте с мерами по предотвращению сканирования для специальных веб-сайтов 6. Распределенные сканеры для обеспечения крупномасштабного одновременного сбора и повышения эффективности

- ❶ -

Изучите пакеты Python и реализуйте базовые процессы сканирования

Большинство рептилий являются"Отправить запрос - получить страницу - проанализировать страницу - извлечь и сохранить содержимое"Выполняется этот процесс, который фактически имитирует процесс использования браузера для получения информации о веб-странице.

В Python есть много пакетов, связанных со сканерами: urllib, request, bs4, scrapy, pyspider и т. д.Рекомендуется начинать с запросов+Xpath, запросы отвечают за подключение к веб-сайту и возврат веб-страницы, Xpath используется для анализа веб-страницы, что удобно для извлечения данных.

Если вы использовали BeautifulSoup, вы обнаружите, что Xpath избавляет от многих проблем, и вся работа по проверке кода элемента слой за слоем полностью опущена. Таким образом, основные процедуры почти одинаковы.Общие статические веб-сайты вообще не проблема, Douban, Embarrassing Encyclopedia, Tencent News и т. д. в принципе могут начать работу..

Конечно, если вам нужно сканировать асинхронно загружаемые веб-сайты, вы можете изучить браузеры.Захватывайте пакеты для анализа реальных запросов или изучите Selenium для автоматизации, чтобы динамические веб-сайты, такие как Zhihu, Mtime и TripAdvisor, также можно было легко решать..

- ❷ -

Понимание хранения неструктурированных данных

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

Когда объем данных в начале невелик, вы можете напрямуюСохраните данные в виде файла, такого как csv, с помощью синтаксиса Python или метода pandas..

Конечно, вы можете обнаружить, что отсканированные данные не являются чистыми, могут быть пропуски, ошибки и т. д., вам также необходимо очистить данные, вы можетеИзучите основы использования пакета pandas для предварительной обработки данных., чтобы получить более чистые данные.

- ❸ -

Изучайте скрейпи, создавайте специализированный краулер

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

scrapy — это очень мощная платформа для краулеров. Она может не только легко создавать запросы, но также имеет мощный селектор, который может легко анализировать ответы. Однако самое удивительное в ней — это ее сверхвысокая производительность, которая позволяет создавать краулеры Модульный.

Изучите scrapy, вы сможете создать несколько фреймворков для краулеров самостоятельно, и у вас в основном будет мышление инженера краулеров.

- ❹ -

Изучите основы баз данных и работайте с крупномасштабными хранилищами данных

Когда объем отсканированных данных невелик, вы можете сохранить его в виде документов. Когда объем данных велик, это немного не работает. Следовательно, необходимо освоить базу данных, и можно изучить текущую основную MongoDB.

MongoDB может помочь вам хранить некоторые неструктурированные данные, такие как текст различных комментариев, ссылки на изображения и т. д.Вы также можете использовать PyMongo, чтобы упростить управление MongoDB в Python.

Поскольку знания базы данных, используемые здесь, на самом деле очень просты, в основномКак хранить и извлекать данные, и учиться, когда это необходимо.

- ❺ -

Овладейте различными навыками для борьбы с мерами по предотвращению сканирования специальных веб-сайтов.

Конечно, в процессе сканирования будет некоторое отчаяние, такое как блокировка веб-сайтом, такие как различные странные коды проверки, ограничения доступа userAgent, различные динамические загрузки и так далее.

Конечно, при столкновении с этими методами борьбы с рептилиями требуются некоторые продвинутые навыки.Контроль частоты доступа, использование прокси-пулов IP-адресов, перехват пакетов, обработка OCR кодов подтверждения и т. д..

Часто веб-сайты будут склоняться к первому, между эффективной разработкой и антисканерами, что также предоставляет пространство для сканеров,Овладейте этими навыками, чтобы бороться с антикраулерами, большинство веб-сайтов больше не представляют для вас сложности.

- ❻ -

Распределенный краулер для крупномасштабного параллельного сбора данных

Сканирование основных данных больше не является проблемой, ваше узкое место будет сосредоточено на эффективности сканирования больших объемов данных. В это время, я полагаю, вы естественным образом соприкоснетесь с очень могущественным именем:Распределенный сканер.

Распространение этой штуки звучит ужасно,Но на самом деле, чтобы использовать принцип многопоточности, чтобы несколько краулеров работали одновременно, нужно освоить три инструмента Scrapy + MongoDB + Redis.

Как мы уже говорили, Scrapy используется для базового сканирования страниц, MongoDB используется для хранения просканированных данных, а Redis используется для хранения очереди веб-страниц для сканирования, то есть очереди задач.

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

Видите ли, после этого пути обучения вы уже можете стать водителем-ветераном, что очень гладко. Итак, в начале,Старайтесь не грызть какие-то вещи систематически, найдите реальный проект (можно начать с простых вещей вроде Douban и Xiaozhu), начните сразу.

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

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

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

После короткого периода обучения многие студенты добились прогресса с 0 до 1 и могут писать свои собственные сканеры и сканировать большие объемы данных. Вот некоторые студентыСовместное использование коллекции домашних заданий:

Восхождение на скин героя LOL HD картинка

@Тихая маленькая панда

Сканированы популярные на данный момент игровые обои, MOBA-игра «League of Legends», мобильные игры «Glory of the King», «Onmyoji», FPS-игра «Jedai Survival», среди которых обои «League of Legends» самые сложные для ползание, показанное здесь Процесс ползания всех обоев героев "League of Legends".

Давайте посмотрим на окончательный эффект ползания.Обои каждого героя были сползли вниз:

Папка с обоями 139 героев

12 обоев «Анна Темная Леди»:

Красная Шапочка Энни HD большая картинка

1. Блок-схема обходчика

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

2. Разработайте общую структуру кода

В соответствии с блок-схемой сканера я разработал следующую структуру кода:

Эта структура кода очень легко читается, в основном функция run().Функция run() выполняет такой набор задач: создать папку LOL - получить информацию о вводе с клавиатуры - если информация "Все", то сканировать все обои с героями, в противном случае сканируйте обои с одним героем.

3. Просканируйте всю информацию о герое

Во-первых, нам нужно разобрать файл Champion.js, чтобы получить однозначное соответствие между английским именем героя и его идентификатором.

Для всех страниц с информацией о героях на официальном сайте, поскольку они загружаются с помощью JavaScript, обычным методом не так просто сканировать Я использовал метод Selenium + PhantomJS для динамической загрузки информации о герое.

Разобранная информация о герое

4. Сканирование обоев героя

Получив информацию о каждом герое, мы можем начать сканировать их обои~ Определите функцию get_image(heroid,heroframe) для сканирования всех обоев одного героя.

При запуске кода следите за тем, чтобы сеть не блокировалась.Если скорость сети слишком низкая, сканирование может завершиться ошибкой. На просмотр всех обоев высокого разрешения всех 139 героев (около 1000 картинок) на скорости проводной сети 3М уходит около 3-4 минут.

Обои из других игр, таких как "Honor of Kings", "Onmyoji", "PUBG Mobile", также могут сканироваться по той же причине. По моему опыту, "League of Legends" сложнее всего сканировать, так что поймите описанный выше процесс Теперь легко написать код, чтобы самостоятельно лазить по другим играм.

Содержимое карты можно смахнуть

Сканирование информации о предприятиях общественного питания на Meituan.com

@Chenchen

На этот раз я буду сканировать все рекомендации по еде [Changzhou Food]. Основная информация, которую я хочу сканировать: название ресторана, рейтинг ресторана, количество отзывов о ресторане, адрес ресторана, цена потребления на душу населения...

Окончательные данные спуска сохраняются в формате CSV следующим образом:

Meituan использует механизм предотвращения сканирования, чтобы имитировать браузер для сканирования. После нескольких попыток выяснилось, что проверены только Cookie и User-Agent.

Поднимитесь к первому набору данных

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

упаковать функцию

Успешно просканировано до соответствующей информации

Но хорошие времена длились недолго, и на полпути мне было 403 балла.

Поскольку он заблокирован, мы можем получить к нему доступ только бесследным способом? Прочитав его, я решил использовать несколько файлов cookie, а затем вызывать их случайным образом, чтобы избежать блокировки. В итоге было использовано 17 куки, после тестирования их можно сканировать на высокой скорости без блокировки.

На этот раз сканирование заканчивается на этом, но просканированные данные можно использовать для большого анализа, например, ситуации с едой на вынос в разных областях, распределения продавцов и так далее.

Сканирование Dangdang.com всех пятизвездочных книг в каждой категории

@ZhuNewNew

На этот раз для сканирования выбран веб-сайт Dangdang.com. На Dangdang есть много данных о книгах, особенно книга с пятью звездами, которая содержит самую популярную информацию о книгах в различных областях. Это полезно для поиска ценных книг и анализа продаж хорошие книги.определенная ценность.

Окончательные просканированные данные выглядят следующим образом, всего более 10000 строк данных:

Данные, которые я хочу сканировать, — это информация о книге с пятью звездами (название книги, количество комментариев, автор, издатель, время публикации, количество оценок с пятью звездами, цена, цены на электронные книги и т. д.).

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

Нормальный возврат данных после печати

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

Следующим шагом является сканирование информации о книгах по каждой категории отдельно. Взяв в качестве примера «роман», на самом деле очень просто перелистывать страницы. Вот несколько сравнений:

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

Созданные ссылки для перелистывания страниц

Следующим шагом будет сбор информации с разных страниц, асинхронной загрузки нет, поэтому можно использовать xpath для прямого поиска. Конечно, посередине есть небольшие моменты, на которые нужно обратить внимание: информация, содержащаяся в каждой книге, разная, поэтому, когда вы используете xpath для ее получения, вы, возможно, не сможете ее получить, и возникнут ошибки. Итак, используется оператор try...except.

В конце концов, он поднялся до более чем 10 000 строк данных, соответствующих более чем 10 000 высокорейтинговых книг в разных областях.Конечно, будут некоторые двойные расчеты, такие как романы и литература, и многие книги находятся в этих двух категории одновременно.

Сам Dangdang не имеет механизма против ползания, поэтому ползание относительно плавное. Единственная незначительная досада — это то, что извлекаемые ссылки продолжают перелистывать страницы и обрабатывать недостающую информацию в некоторых книгах.

Информация о задании сети обхода хука

@南生

Изначально я хотел работать «аналитиком данных», поэтому хотел знать зарплату, требования и основные точки распространения в городе, где я живу. Lagou.com — авторитетная рекрутинговая платформа для интернет-индустрии, поэтому и вытягивание информации о работе для "аналитика данных" в Интернете хорошо представлены.

Окончательные просканированные данные хранятся в MongoDB следующим образом:

Когда я научился переворачивать страницы, я добавил кавычки в рантайм и сообщил об ошибке JSONDecodeError.Меня долго забрасывали кавычками. Я поделился этим и надеялся, что все примут предупреждение.

Наступив на две ямы, я начал делать уроки после уроков, не ожидал, что это будет сложно для новичка. В начале моей идеей было найти связь, но в собранных данных связи не было, поэтому я щелкнул, чтобы войти на страницу сведений, чтобы посмотреть, есть ли какие-то правила? Затем я попытался несколько раз нажать на каждую страницу сведений и обнаружил, что номер на странице соответствует определенным собранным данным. Например:

страница сведений

Найдите прорыв и начните действовать:

DOC

request url\request method

После многих попыток (это все равно заняло некоторое время): url запроса и сайт одинаковые, даже если прорыв найден, данные в формате DOC, а метод запроса: get, т.е. знакомое поле боя.

Идея: пройти positionId и использовать формат, например:

Страница сведений

метод xpath для получения данных

часть данных:

После попыток снова и снова оптимизированный код — это в основном процесс обучения и создания (сканирование страницы с подробностями — мой шедевр).

- Эффективный путь обучения -

Очень неразумно вначале говорить о теории, грамматике и языке программирования.Начинайте прямо с конкретных случаев и изучайте конкретные точки знаний с помощью практических операций.. Мы запланировали для вас систематический путь обучения, чтобы вы больше не сталкивались с разрозненными знаниями.

Чтобы быть конкретным, например, мы будем напрямую использовать lxml+Xpath вместо BeautifulSoup для разбора веб-страницы, уменьшая ваши ненужные операции проверки элементов веб-страницы,Можно сделать различные инструменты, мы дадим вам самый простой способ, Это вроде бы детали, но это могут быть ямы, на которые многие наступят.

Схема «Сканер Python: начальный + расширенный»

Глава 1: Начало работы с Python Crawler

1. Что такое рептилия

Состав URL и механизм перелистывания страниц

Исходная структура веб-страницы и процесс запроса веб-страницы

Применение и основной принцип краулера

2. Первое знакомство с краулером Python

Создание среды сканера Python

Создайте первый поисковый робот: Сканируйте домашнюю страницу Baidu

Три шага сканера: получить данные, проанализировать данные, сохранить данные

3. Используйте запросы для сканирования комментариев Douban

Установка и базовое использование запросов

Используйте запросы для сканирования информации о кратких комментариях Douban

Протокол сканера, который вы должны знать

4. Используйте Xpath для разбора короткого комментария Douban.

Установка и внедрение артефакта парсинга Xpath

Использование Xpath: копирование в браузере и рукописный ввод

Реальный бой: используйте Xpath для разбора короткого комментария Douban.

5. Используйте pandas для сохранения данных краткого обзора Douban

Введение в основное использование панд

сохранение файла pandas, обработка данных

Настоящий бой: используйте панд, чтобы сохранить данные краткого обзора Douban

6. Захват браузера и настройки заголовков (Случай 1: Crawling Zhihu)

Общая идея краулеров: сканирование, парсинг, хранение

Захват браузера для загрузки данных с помощью Ajax

Установите заголовки, чтобы обойти ограничения против рептилий

Настоящий бой: сканирование пользовательских данных Zhihu

7. MongoDB для хранения данных (вариант 2: обходной хук)

Установка и использование MongoDB и RoboMongo

Установите время ожидания и измените заголовки

Фактический бой: данные о работе ползучих крюков

Хранить данные в MongoDB

Дополнительный бой: очистка мобильных данных Weibo

8. Selenium сканирует динамические веб-страницы (пример 3: сканирование Taobao)

Артефакт динамического веб-сканирования Создание и использование Selenium

Анализировать динамическую информацию на страницах продуктов Taobao.

Настоящий бой: сканирование информации веб-страницы Taobao с помощью Selenium

Глава 2: Scrapy Framework для Python Crawler

1. Первый взгляд на разработку краулера и фреймворк Scrapy

html, css, js, база данных, http-протокол, интерфейсная и внутренняя связь

Расширенный рабочий процесс сканера

Компоненты Scrapy: движок, планировщик, загрузка промежуточного программного обеспечения, конвейер проекта и т. д.

Часто используемые инструменты сканера: различные базы данных, инструменты для захвата пакетов и т. д.

2. Установка Scrapy и базовое использование

Скрап установка

Основные методы и свойства Scrapy

Начните свой первый проект Scrapy

3. Использование селектора Scrapy

Общие селекторы: css, xpath, re, pyquery

Как использовать CSS

Как использовать xpath

Как использовать ре

Как использовать Пикери

4. Пайплайн проектов Scrapy

Введение и роль конвейера элементов

Основная функция Item Pipeline

Практический пример: запись данных в файл

Практический пример: фильтрация данных в конвейере

5. Промежуточное ПО для парсинга

Загрузите промежуточное ПО и ПО промежуточного слоя паука

Три функции загрузки промежуточного ПО

Промежуточное ПО, предоставляемое системой по умолчанию

6. Подробное объяснение запроса и ответа Scrapy

Базовые параметры объекта запроса и дополнительные параметры

Методы объекта запроса

Параметры и методы объекта ответа

Подробное объяснение комплексного использования методов объекта ответа

Глава 3: Расширенные возможности работы с Python Crawler

1. Анализ захвата пакетов браузера Google для расширенной сети

Детальный анализ http запросов

Структура сетевой панели

Метод ключевых слов для фильтрации запросов

Копировать, сохранять и очищать сетевую информацию

Просмотр создателей ресурсов и зависимостей

2. Дедупликация и БД хранения данных

дедупликация данных

Хранение данных MongoDB

Глава 4: Распределенные поисковые роботы и обучающие проекты

1. Масштабная параллельная сборка — написание распределенных краулеров

Введение в распределенный краулер

Принцип распределенного сканирования Scrapy

Использование Scrapy-Redis

Детали распределенного развертывания Scrapy

2. Учебный проект (1) - Мониторинг 58 вторичного жилья в том же городе

3. Учебный проект (2) — имитация входа в систему Qunar

4. Учебный проект (3) — JD.com Сбор данных о товарах

- К каждому уроку есть учебные материалы -

Может быть, у вас есть коллекция учебных ресурсов в G, но вы никогда не открываете их после сохранения?Мы нашли для вас самые полезные части и описали их в самой простой форме, чтобы помочь вам учиться, и вы можете проводить больше времени, практикуясь и практикуясь.

Учитывая разнообразие вопросов, мы подготовили внеклассные материалы по каждому разделу, состоящие из четырех частей:

1. Ключевые заметки курса, разработка ключевых знаний, помощь в понимании и последующем быстром обзоре;

2. По умолчанию вы Xiaobai, дополните все базовые знания, даже установку и базовую работу с программным обеспечением;

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

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

Некоторые внеклассные материалы

- Многие случаи, охватывающие основные веб-сайты -

В курсе представлены наиболее распространенные случаи сканирования веб-сайтов: Douban, Baidu, Zhihu, Taobao, Jingdong, Weibo...Каждый случай подробно разобран в видеокурсе, и преподаватель проведет вас через каждый этап операции..

Кроме того, мы также добавим такие случаи, как Xiaozhu, Lianjia, 58 Tongcheng, NetEase Cloud Music, друзья WeChat и т. д., чтобы предоставить идеи и коды.

После многократного подражания и практики вы можете легко написать свой собственный код поискового робота и легко сканировать данные этих основных веб-сайтов.

- Развитие навыков: антисканеры и хранение и обработка данных -

Знания базового сканера далеко не достаточно, поэтому мы будем использовать реальные примеры, чтобы показать вам некоторые меры против сканирования на веб-сайтах и ​​использовать специальные методы для обхода ограничений.Такие как асинхронная загрузка, ограничения IP, ограничения заголовков, коды проверки и т. д., вы можете избежать этих относительно распространенных методов борьбы с рептилиями.

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

Сканирование информации об аренде с помощью Scrapy

Сканировать данные по подбору хуков и сохранять их в MongoDB.