Автор оригинала: 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изтаблицы.trelements представляет строки таблицы.Строка 15 Первая строка обычно содержит ячейки заголовка. Мы серчим через первую строку в списке строк, чтобы получить текстовые значения всех
thэлементов в этой строке. мы также гарантируем удаление всех конечных пробелов в тексте с помощью методаrstrippython string.Линия 17 – 22 Это открывает файл и создает новый файловый объект. Режим
wиспользуется для обеспечения того, чтобы файл был открыт для записи. Сначала мы пишем строку заголовка, затем перебираем остальные строки, игнорируя первую строку, чтобы получить данные, содержащиеся внутри, и записываем данные для всех этих строк в файловый объект.Строка 25 -27 Мы проверяем, что модуль запущен как основная программа, и вызываем функцию
scrape_dataс указаннымURLдля очистки данных.
на терминале выполните приведенную ниже команду для очистки данных
python main.py
Выходной файл с именем output.csv , содержащий данные, должен быть создан в корневой папке
Вывод
Прежде чем начать соскабливать данные с любого веб-сайта, обязательно изучите HTML-разметку/содержимое веб-сайта, чтобы определить местоположение нужных вам данных. Если у вас есть какие-либо вопросы или комментарии, пожалуйста, добавьте их в раздел комментариев ниже.