Что такое парсинг?

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

Кто это делает?

Множество веб-сайтов, которые собирают данные с других веб-сайтов в Интернете. Некоторыми примерами могут быть веб-сайты, которые предлагают вам лучшие предложения по одному и тому же продукту после сравнения на нескольких платформах (Amazon, Flipkart, Ebay и т. Д.), А также сайты, которые собирают наборы данных для применения алгоритмов машинного обучения.

Чем он мне полезен?

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

Что нам понадобится

  • Python v3.6.8
  • VSCode

Установка Python (пропустите, если он уже установлен)

  • Перейдите на - python.org ›Загрузки› Windows
  • Прокрутите до версии 3.6.8 ›x86 (32 бит) / x86–64 (64 бит)› Исполняемый
  • Дважды щелкните и установите флажок «Добавить Python в PATH».
  • Следуйте инструкциям по установке.

Проверить правильность установки

  • Нажмите клавишу Windows + R › Введите « cmd », чтобы открыть командную строку.
  • В командной строке ›Введите,
python --version

Если Python установлен правильно, вы должны увидеть,

3.6.8

Установка VSCode (пропустите, если уже установлен)

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

  • Перейдите на code.visualstudio.com ›Загрузить для Windows› x86 / x64 ›Установщик.
  • Дважды щелкните и следуйте инструкциям.

Давайте начнем!

  • Создайте новую папку и назовите ее Webscraper.
  • Внутри папки создайте новый файл с именем webscraper.py.
  • Откройте VSCode ›Файл› Открыть папку ›Перейдите к« Webscraper »

Теперь нам нужно импортировать несколько библиотек, которые помогут нам создать наш веб-парсер.

  • Перейдите в Терминал ›Новый терминал.

По сути, это командная строка, но внутри редактора, поэтому нам не нужно иметь два окна и постоянно переключаться между ними.

Затем мы вызываем pip. Вы могли бы назвать это Альфредом в Бэтмене Питона. Хе-хе.

В вашем терминале введите pip install beautifulsoup4

Устанавливается библиотека beautifulsoup, которая поможет нам очищать веб-страницы.

Далее введите pip install flask и pip install requests

Flask - это легкий фреймворк для создания веб-сайтов. Мы будем использовать это, чтобы проанализировать собранные данные и отобразить их как HTML в новом файле HTML.

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

В вашем файле введите следующий код:

from flask import Flask, render_template
from bs4 import BeautifulSoup
import requests

Первая строка импортирует класс Flask и render_template method из библиотеки flask. Вторая строка импортирует класс BeautifulSoup, а третья строка импортирует модуль requests из нашей библиотеки Python.

Затем мы объявляем переменную, которая будет содержать результат нашего запроса.

source = requests.get(‘https://webscraper.netlify.com/').text

Мы отправляем запрос GET на webscraper.netlify.com, конвертируем HTML в обычный текст и сохраняем его в исходном коде.

Затем мы объявляем переменную супа и сохраняем значение, которое получаем после передачи источника в BS. «Lxml» - это разметка, которую мы хотим иметь в нашем визуализированном коде.

soup = BeautifulSoup(source, 'lxml')

На данный момент наш код работает. Вы можете проверить это, передав суп функции печати (print(soup)) после предыдущей строки и запустив python webscraper.py в терминале.

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

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

<variable> = soup.find('<HTML_element_name>')
<variable> = soup.find('<HTML_element_name>').select_one('child_element')
<variable> = soup.find('<HTML_element_name>').find_all('child_element')

Вы можете передать в скобках обычную нотацию CSS, чтобы уточнить требуемые элементы.

Теперь мы фактически просто выводим HTML вместе с текстом внутри него. Что, если нам просто нужен текст?

Это просто.

Мы просто передаем .text в конце. Точно так же, как мы поступили с исходным кодом. Вот пример.

head = soup.find(‘main’).select_one(‘article:nth-of-type(4)’).div.text

Здесь мы говорим Python сохранить text из div в 4-м article элементе, который находится в элементе main, в переменной head.

Вы можете проверить вывод, передав head в print() и запустив python webscraper.py в терминале.

Если можете, попробуйте узнать имена одного из авторов.

Вы можете получить такого автора,

author = soup.find(‘main’).select_one(‘p’).text

Обратите внимание, как вы также получаете дату вместе с именем. Это потому, что они оба имеют один и тот же элемент. Существует способ получить имя автора отдельно, используя строковые методы Python, такие как split и slice. Но мы не будем рассматривать это здесь.

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

В вашем файле введите следующий код,

app = Flask(__name__)
@app.route('/')
def index():
   return render_template('index.html,**locals())
app.run(debug=True)

Создайте новую папку шаблонов в своей основной папке webscraper и назовите ее index.html

Часть фляги немного сложно объяснить, но, проще говоря, мы создали простой сервер, который берет наш index.html из папки шаблонов и обслуживает его на локальном сервере - localhost://5000

Теперь мы можем объединить несколько переменных, которые мы объявили во всем предыдущем коде, с помощью супа, передать текст в наш HTML и использовать CSS, чтобы стилизовать их так, как мы хотим!

Вы можете использовать этот код для файла index.html,

<!DOCTYPE html>
<html lang=”en”>
 <head>
  <meta charset=”UTF-8">
  <meta name=”viewport” content=”width=device-width, initial-scale=1.0">
  <meta http-equiv=”X-UA-Compatible” content=”ie=edge”>
  <title>Webscraper in Python using Flask</title>
 </head>
 <body>
  <!-- Variables from Flask here -->
 </body>
</html>

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

head = soup.header.h1.text

second_author = soup.main.select_one(‘article:nth-of-type(2)’).p.text

first_article = soup.main.article.div

  • Введите их в созданную нами функцию index(), прямо над оператором return.
  • Сохраните файл
  • Go to index.html

Теперь мы передадим эти переменные в наш HTML-код во время его рендеринга, чтобы мы могли видеть данные на нашей веб-странице.

<!DOCTYPE html>
<html lang=”en”>
 <head>
  <meta charset=”UTF-8">
  <meta name=”viewport” content=”width=device-width, initial-scale=1.0">
  <meta http-equiv=”X-UA-Compatible” content=”ie=edge”>
  <title>Webscraper in Python using Flask</title>
 </head>
 <body>
  <h1>{{ head }}</div>
  <p>{{ second_author }}</p>
  <article>{{ first_article }}</article>
 </body>
</html>

Теперь откройте терминал и запустите python webscraper.py

И мы сделали это!

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

Интересно, как можно очистить несколько страниц?

Ответ - несколько циклов for, while, try, except и if-else!