Веб-скрепер на Python (Beautiful Soup) и его развертывание на Heroku [часть 1]

Некоторое время назад я решил создать проект веб-скрейпинга с использованием Beautiful Soup (библиотека Python для извлечения данных из HTML и XML файлов). Вот как я это сделал, с какими трудностями я столкнулся во время разработки и как я их преодолел.

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

Чтобы деактивировать виртуальную среду, просто введите deactivate.

Затем мы создадим файл requirements.txt для перечисления всех зависимостей для нашего проекта Python.
Ваши требования могут отличаться в зависимости от вашего случая.

requirements.txt очень важен! Я был слишком ленив, чтобы выполнить этот шаг с первой попытки… Однако рано или поздно вам придется сделать это, по крайней мере, для того, чтобы запустить его в Heroku.

Теперь позвольте мне показать вам, как написать код для фактического скраппирования заданного веб-сайта. В двух словах, веб-скрейпинг — это извлечение данных с веб-сайтов в выбранную вами форму (я написал «https://www.scrapethissite.com/pages/» в файл csv).


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

Как вы можете видеть ниже, мы распечатали содержимое полученной информации, и это та же HTML-страница, которую вы можете увидеть с помощью комбинации клавиш Ctrl+U в Chrome или нажав правую кнопку мыши, затем View page source.

import requests
from bs4 import BeautifulSoup

link = "https://www.scrapethissite.com/pages/"
request = requests.get(link)
print(request.content)
Вход в полноэкранный режим Выход из полноэкранного режима


Для извлечения фактических данных из HTML-тегов мы обратимся к помощи библиотеки Beautiful Soup.

Получите .text из тега <title>:

import requests
from bs4 import BeautifulSoup

link = "https://www.scrapethissite.com/pages/"
request = requests.get(link)

soup = BeautifulSoup(request.content, "html5lib")
print(soup.title.text)
Вход в полноэкранный режим Выйти из полноэкранного режима

Вывести гиперссылки с помощью тега .a:

import requests
from bs4 import BeautifulSoup

link = "https://www.scrapethissite.com/pages/"
request = requests.get(link)

soup = BeautifulSoup(request.content, "html5lib")
print(soup.a)
Войти в полноэкранный режим Выйти из полноэкранного режима

.find_all():

import requests
from bs4 import BeautifulSoup

link = "https://www.scrapethissite.com/pages/"
request = requests.get(link)

soup = BeautifulSoup(request.content, "html5lib")

for i in soup.find_all('h3'):
    print(i.text)
Войти в полноэкранный режим Выход из полноэкранного режима

Вы даже можете искать по CSS-классу .find_all(class_="class_name").

import requests
from bs4 import BeautifulSoup

link = "https://www.scrapethissite.com/pages/"
request = requests.get(link)

soup = BeautifulSoup(request.content, "html5lib")

for i in soup.find_all(class_='class_name'):
    print(i.text)
Войти в полноэкранный режим Выйти из полноэкранного режима

Правило заключается в том, чтобы найти часть данных в исходном коде веб-сайта (через Ctrl+F в Chrome) и извлечь данные, используя любой тег, в котором они находятся.

На Beautiful Soup есть много тегов, и из моего опыта я понял, что часто учебники или/и посты не совсем подходят для вашего случая. Читать это в посте звучит так, как будто я стреляю себе в ногу, не так ли? 😅 Не поймите меня неправильно, посты/видео, конечно же, полезны, чтобы получить общее представление о теме. Тем не менее, если вы работаете над другой ситуацией, лучше просмотреть документацию, чтобы вы могли решить свою проблему более адекватными методами. Кроме того, к тому времени, когда вы будете смотреть/читать видеоурок/пост, все (версии), скорее всего, будут изменены. Поэтому я бы посоветовал пойти по тому пути, который изначально кажется трудным, и прочитать документацию, а не пытаться срезать углы и в итоге расстраиваться из-за потерянного времени.

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

Вы можете найти исходный код на моей странице Git Hub: https://github.com/Muxsidov/Scraper_Blog

Оцените статью
devanswers.ru
Добавить комментарий