Введение В эпоху науки о данных принято собирать данные с веб-сайтов в аналитических целях. Python-один из наиболее часто используемых языков программирования для проектов в области науки о данных. Использование python с beautifulsoup упрощает утилизацию веб-страниц. Знание того, как утилизировать веб-страницы, сэкономит ваше время и деньги.
Предпосылка
- Основы программирования на python (
python3.x
). - Основы
html
тегов.
Установка необходимых модулей Во-первых, предполагая, что python3.x
уже установлен в вашей системе, вам необходимо установить библиотеку http запросов и модуль beautifulsoup4.
Установите запросы
и beautifulsoup4
$ pip install requests $ pip install beautifulsoup4
Сбор данных веб-страниц
Теперь мы готовы идти. В этом уроке наша цель-получить список президентов Соединенных Штатов с этой страницы wikipedia . Перейдите по этой ссылке и щелкните правой кнопкой мыши на таблице, содержащей всю информацию о президентах Соединенных Штатов, а затем нажмите на проверить , чтобы проверить страницу (я использую Chrome. Другие браузеры имеют аналогичную возможность проверки страницы).
Содержимое таблицы находится в теге table
и классе wikitable
(см. Изображение ниже). Нам понадобится эта информация для извлечения интересующих нас данных.
Импорт установленных модулей
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
George Washington John Adams Thomas Jefferson James Madison James Monroe ... ... Barack Obama Donald Trump
Элемент 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!! Бинго!
Оставьте отзыв в поле для комментариев. Дайте мне знать, если у вас возникнут какие-либо вопросы или возникнут какие-либо трудности с этим учебником.