Автор оригинала: Oluwagbenga Joloko.
Вступление
Этот учебник расскажет вам, как очистить данные из таблицы в Википедии. Страница, с которой мы будем соскабливать данные, – это Список стран и зависимостей по населению . Вы можете перейти по ссылке, чтобы получить представление о том, как выглядит страница. Таблица с данными, подлежащими очистке, приведена ниже –
Используемые пакеты
Csv – Модуль, входящий в стандартную библиотеку python для чтения и записи данных в файловый объект в формате csv.
Beautifulsoup – Библиотека для извлечения данных из html-и xml-файлов.
Requests – Библиотека для выполнения HTTP-запросов в python.
Установка
Предполагается, что у вас уже установлен Python3 на вашем компьютере, если не следовать здесь для установки Python 3 на OSx. Выполните следующие команды для установки библиотеки beautifulsoup и запросов
pip install requests
pip install beautifulsoup4
Очистите данные
Перейдите в определенный каталог на вашем компьютере и выполните приведенную ниже команду, чтобы создать новый файл с именем main.py
touch main.py
В main.py добавьте следующий код:
import csv import requests from bs4 import BeautifulSoup def scrape_data(url): response = requests.get(url, timeout=10) soup = BeautifulSoup(response.content, 'html.parser') table = soup.find_all('table')[1] rows = table.select('tbody > tr') header = [th.text.rstrip() for th in rows[0].find_all('th')] with open('output.csv', 'w') as csv_file: writer = csv.writer(csv_file) writer.writerow(header) for row in rows[1:]: data = [th.text.rstrip() for th in row.find_all('td')] writer.writerow(data) if __name__=="__main__": url = "https://en.wikipedia.org/wiki/List_of_countries_and_dependencies_by_population" scrape_data(url)
давайте разберем это на части и посмотрим, как это работает строка за строкой.
Линии 1 – 3 Импортирует все пакеты, необходимые для запуска приложения.
Строка 6 Мы определяем функцию
scrape_data
, которая принимает параметрurl
.Строка 8 Мы делаем запрос get к
url
, используя метод get библиотекиrequests
.
При выполнении HTTP – запросов с помощью библиотеки запросов важно установить тайм-аут на случай, если сервер не ответит своевременно. Это предотвращает бесконечное зависание вашей программы в ожидании ответа от сервера.
Строка 9 Мы создаем древовидную структуру beautifulsoup из содержимого ответа с сервера. Этот объект легко ориентировать и искать.
Строка 11 Мы ищем через красивый объект
суп
, чтобы найти вторую таблицу в документе, которая содержит нужные нам данные, используя метод it’sfind_all
. Метод beautifulsoup объектаfind_all
ищет все html-теги, соответствующие фильтру/поисковому термину в древовидной структуре.Строка 13 Эта строка кода выбирает все элементы
tr
, где родителем является элементtbody
изтаблицы
.tr
elements представляет строки таблицы.Строка 15 Первая строка обычно содержит ячейки заголовка. Мы серчим через первую строку в списке строк, чтобы получить текстовые значения всех
th
элементов в этой строке. мы также гарантируем удаление всех конечных пробелов в тексте с помощью методаrstrip
python string.Линия 17 – 22 Это открывает файл и создает новый файловый объект. Режим
w
используется для обеспечения того, чтобы файл был открыт для записи. Сначала мы пишем строку заголовка, затем перебираем остальные строки, игнорируя первую строку, чтобы получить данные, содержащиеся внутри, и записываем данные для всех этих строк в файловый объект.Строка 25 -27 Мы проверяем, что модуль запущен как основная программа, и вызываем функцию
scrape_data
с указаннымURL
для очистки данных.
на терминале выполните приведенную ниже команду для очистки данных
python main.py
Выходной файл с именем output.csv
, содержащий данные, должен быть создан в корневой папке
Вывод
Прежде чем начать соскабливать данные с любого веб-сайта, обязательно изучите HTML-разметку/содержимое веб-сайта, чтобы определить местоположение нужных вам данных. Если у вас есть какие-либо вопросы или комментарии, пожалуйста, добавьте их в раздел комментариев ниже.