Каждый день мы посещаем множество веб-сайтов. Иногда нам нужно собрать некоторые фрагменты информации. Как мы можем это сделать? Единственное решение — скопировать-вставить или сохранить страницу в формате 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/