Каждый день мы посещаем множество веб-сайтов. Иногда нам нужно собрать некоторые фрагменты информации. Как мы можем это сделать? Единственное решение — скопировать-вставить или сохранить страницу в формате PDF? Возьмем пример; Rocomari — бангладешская онлайн-площадка для заказа книг. Они продают книги со скидками в разных категориях. Итак, вы хотите купить книгу со скидкой 40%. Вам нужны уведомления, когда эта книга будет продаваться со скидкой 40%. Здесь веб-парсер может помочь вам лучше, чем просматривать веб-сайт каждый день вручную.

В этой статье я поделюсь некоторыми базовыми знаниями об веб-скрапинге и пакете python Beautiful Soup для сбора новостей Bangla, связанных с коронавирусом, с бангладешских веб-сайтов.

Веб-скрейпинг

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

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

Зачем нам нужен веб-скрейпинг?

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

Это законно?

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

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

Как работают веб-скрейперы?

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

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

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

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

Большинство веб-скребков будут выводить данные в электронную таблицу CSV или Excel, в то время как более продвинутые парсеры будут поддерживать другие форматы, такие как JSON, которые можно использовать для API.

Почему Python для парсинга веб-страниц?

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

Начало работы с веб-скрейпингом

Существует множество пакетов для парсинга веб-страниц с помощью Python. Я использую пакет Beautiful Soup (bs4) для сбора «новостей Bangla, связанных с коронавирусом».

Давайте сначала установим необходимый пакет, из вашей виртуальной среды выполните следующую команду:

pip install bs4

давайте создадим парсер, который примет URL-адрес в качестве аргумента и вернет HTML-документ.

import requests
from requests.exceptions import HTTPError
from bs4 import BeautifulSoup
def scrape_url(url, headers=None):
    try:
        page = requests.get(url, headers)
        page.raise_for_status()
    except HTTPError as e:
        print(e)
    except Exception as err:
        print(err)
    else:
        soup = BeautifulSoup(page.content, 'html.parser')
        soup = BeautifulSoup(soup.prettify(), 'html.parser')
        return soup

    return BeautifulSoup("", 'html.parser')

если URL-адрес недействителен или не может ответить, он вернет пустой документ.
в следующем коде заголовки работают как агент браузера. чтобы получить агент браузера: введите в поиске Google «мой пользовательский агент»

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

soup = scrape_url("https://somoynews.tv", my_user_agent)
print(type(soup))

Взамен вы получите объект типа класса bs4.

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

all_links = soup.find_all('a')

all_links также объект bs4 содержит только атрибут ссылки «a». Теперь нам нужно отфильтровать и удалить все новости Bangla, не связанные с коронавирусом.

Итак, давайте сделаем заявление, что эти заголовки ссылок не содержат слов короны, которые не имеют к ней отношения.

training_samples = ['করোনা', 'কোভিড-১৯', 'উহান-ভাইরাস']

Если какой-либо заголовок новости содержит слова traning_samples, это означает, что новость связана с коронавирусом. следующий код для соответствия новостям, связанным с короной:

soup = scrape_url("https://somoynews.tv")
all_links = soup.find_all('a')

training_samples = ['করোনা', 'কোভিড-১৯', 'উহান-ভাইরাস']
for link in all_links:
    title_words = link.get_text().strip().split()
    if set(training_samples).intersection(set(title_words)):
        print("Title: {}, Link: {}".format(link.get_text().strip(), link.get('href')))

следующий результат:

Завершенный код:

Мы можем добавить несколько веб-сайтов, чтобы получать больше новостей. также, если мы используем извлечение метаданных, можно найти больше новостей. Я загрузил полный код в github.

Ссылка на Github этого примера проекта: https://github.com/imShakil/DataScience/tree/master/web_scraping

Это все для этой статьи. Если вы хотите узнать больше о Beautiful Soup,
перейдите на их домашнюю страницу: https://www.crummy.com/software/BeautifulSoup/bs4/doc/