Рубрики
Без рубрики

Веб-скребок с использованием Python и BeautifulSoup

Узнайте, как удалить веб-страницы с помощью python и beautifulsoup. Веб-слом-это необходимость сбора данных с веб-сайта, а затем их анализа с помощью инструментов data science.

Автор оригинала: Dan.

Введение В эпоху науки о данных принято собирать данные с веб-сайтов в аналитических целях. Python-один из наиболее часто используемых языков программирования для проектов в области науки о данных. Использование python с beautifulsoup упрощает утилизацию веб-страниц. Знание того, как утилизировать веб-страницы, сэкономит ваше время и деньги.

Предпосылка

  1. Основы программирования на python ( python3.x ).
  2. Основы html тегов.

Установка необходимых модулей Во-первых, предполагая, что python3.x уже установлен в вашей системе, вам необходимо установить библиотеку http запросов и модуль beautifulsoup4.

Установите запросы и beautifulsoup4

$ pip install requests
$ pip install beautifulsoup4

Сбор данных веб-страниц

Теперь мы готовы идти. В этом уроке наша цель-получить список президентов Соединенных Штатов с этой страницы wikipedia . Перейдите по этой ссылке и щелкните правой кнопкой мыши на таблице, содержащей всю информацию о президентах Соединенных Штатов, а затем нажмите на проверить , чтобы проверить страницу (я использую Chrome. Другие браузеры имеют аналогичную возможность проверки страницы).

Снимок экрана 2018-10-07 в 11.38.39 вечера.png

Содержимое таблицы находится в теге table и классе wikitable (см. Изображение ниже). Нам понадобится эта информация для извлечения интересующих нас данных.

Снимок экрана 2018-10-07 в 9.25.01 вечера.png

Импорт установленных модулей

import requests
from bs4 import BeautifulSoup

Для получения данных с веб-страницы мы будем использовать метод requests API get()

url = "https://en.wikipedia.org/wiki/List_of_Presidents_of_the_United_States"
page = requests.get(url)

Всегда полезно проверить код состояния ответа http

print(page.status_code)   # This should print 200

Теперь мы собрали данные с веб-страницы, давайте посмотрим, что у нас получилось

print(page.content)

Приведенный выше код отобразит http тело ответа . Вышеуказанные данные можно просмотреть в красивом формате с помощью метода beautifulsoup ‘s prettify () . Для этого мы создадим объект bs4 и используем метод prettify

soup = BeautifulSoup(page.content, 'html.parser')
print(soup.prettify())

Это приведет к печати данных в формате, который мы видели при просмотре веб-страницы.

Unaffiliated (2) ... ...

На данный момент мы знаем, что наша таблица находится в теге table и классе wikitable . Итак, сначала мы извлекем данные из таблицы тега с помощью find метода bs4 объекта. Этот метод возвращает объект bs4

tb = soup.find('table', class_='wikitable')

Этот тег имеет много вложенных тегов, но нам нужен только текст под title элементом тега a родительского тега b (который является дочерним тегом таблицы ). Для этого нам нужно найти все теги b под тегом table , а затем найти все теги a под тегами b . Для этого мы будем использовать метод find_all и перебирать каждый тег b , чтобы получить тег a

for link in tb.find_all('b'):
    name = link.find('a')
    print(name)  

Это приведет к извлечению данных под всеми тегами a

Элемент title может быть извлечен из всех тегов a с помощью метода get_text() . Таким образом, изменение приведенного выше фрагмента кода

for link in tb.find_all('b'):
    name = link.find('a')
    print(name.get_text('title'))

и вот желаемый результат

George Washington
John Adams
Thomas Jefferson

James Monroe
...
...
Barack Obama
Donald Trump

Складывая все это вместе

import requests
from bs4 import BeautifulSoup

url = "https://en.wikipedia.org/wiki/List_of_Presidents_of_the_United_States"
page = requests.get(url)
soup = BeautifulSoup(page.content, 'html.parser')
tb = soup.find('table', class_='wikitable')

for link in tb.find_all('b'):
    name = link.find('a')
    print(name.get_text('title'))

Мы успешно удалили веб-страницу менее чем за 10 строк кода python!! Бинго!

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