У меня немного скучно во время блокировки COVID-19 здесь в Нигерии, поэтому я решил поиграть с помощью данных с помощью Python и Selenium.
Первый вопрос, который мне нужен, чтобы ответить, было то, какие данные я хотел бы соскребать, и то, что я буду делать с соскобными данными.
Я решил построить систему, которую соскребает данные COVID-19 из Сайт NCDC И отправляет мне уведомление SMS после того, как в стране будет увеличение случаев.
В этой серии я буду делиться, как я построил эту простую систему, надеюсь, это поможет кому-то построить что-то большее и лучше.
Настройка
Мы будем использовать библиотеку Selenium Python и драйвер браузера (драйвер Chrome или Firefox).
- Установите селен
pip install selenium
- Скачать и установить драйвер браузера
Вы можете скачать любой из драйверов из ссылок ниже:
Пойдем!
Теперь, когда мы установили нашу библиотеку и драйвер браузера, пришло время попасть в код.
Создайте свой файл .py и напишите:
from selenium import Chrome from selenium.webdriver.common.by import By # Make an instance of the chrome driver driver = webdriver.Chrome() # Initiate the browser and visit the link driver.get('https://covid19.ncdc.gov.ng/')
В указанном выше коде мы импортируем драйвер Chrome From Selenium, а также импортируя «по» частным методам от Web Selenium для выбора того, как мы хотели бы найти элементы. Кроме того, мы инициируем браузер с помощью драйвера Chrome и используя его, чтобы посетить страницу, которая будет соскабливаться.
Если вы предпочитаете использовать драйвер Firefox, ваш код будет выглядеть так:
from selenium import Firefox from selenium.webdriver.common.by import By # Make an instance of the firefox driver driver = webdriver.Firefox() # Initiate the browser and visit the link driver.get('https://covid19.ncdc.gov.ng/')
Следующим шагом будет находить элемент, в котором есть эти данные, важно изучать и осматривать, как визуализируется дом веб-сайта. Для нашего NCDC COVID-19 данные, которые мы хотим, находится в таблице с ID Custom3.
table = driver.find_elements(By.XPATH, "//table[@id='custom3']/tbody/tr") print(table[1].text)
Здесь мы находим элементы XPath, есть так много других методов поиска элементов, и вы можете найти доступные методы на Документация Selenium Python Отказ Мы находим тег таблицы с идентификатором Custom 3, затем перейдите в Tbode и, наконец, тег TR, это возможно, используя Оседание . Затем мы распечатаем второй контент, чтобы увидеть, что у нас есть, прежде чем мы продолжим.
На нашем терминале мы изменим каталог на наш ROOT Project Run Run:
python your_file_name.py
Мы получим это в результате:
Мы видим, что мы смогли получить некоторые данные со страницы, мы будем приступить к заголовку таблицы.
header_tag = table[0].find_elements_by_tag_name('th') headers = list(map(lambda header: header.text, header_tag)) print (headers)
Выше Код находит теги заголовка таблицы (TH) в первую строку и добавляет их в список заголовков. Запуск скрипта будет распечатать список заголовков:
Наконец, мы получим данные для всех штатов:
results = [] for item in table: data = item.find_elements_by_tag_name('td') sd = list(map(lambda item: item.text, data)) results.append(sd) #Always remember to quit the browser driver when you are done driver.quit() results = list(filter(None, results)) print(results)
Здесь мы создали пустой список под названием «Результаты», передаваемые через элемент строки таблицы и искали элемент по имени TAG ‘TD’. В каждом ряду таблицы у нас есть наши данные для каждого состояния. Затем мы наконец отфильтровали пустые строки и напечатали результаты.
Вуаля !!! У нас есть данные COVID-19 в разных штатах в Нигерии.
Теперь, когда у нас есть готовые данные, в следующей части этой серии мы будем сохранять данные для какой-либо базы данных для легкого поиска и отслеживания изменений.
Наш весь код пока выглядит так:
from selenium import webdriver from selenium.webdriver.common.by import By import itertools import csv driver = webdriver.Chrome() # Start the browser and visit the link driver.get('https://covid19.ncdc.gov.ng/') table = driver.find_elements(By.XPATH, "//table[@id='custom3']/tbody/tr") header_tag = table[0].find_elements_by_tag_name('th') headers = list(map(lambda item: item.text, header_tag)) results = [] for item in table: data = item.find_elements_by_tag_name('td') sd = list(map(lambda item: item.text, data)) results.append(sd) #Always remember to quit the browser driver when you are done driver.quit() results = list(filter(None, results)) print(results)
Я надеюсь, что я смог поделиться своим процессом достаточно хорошо в этой первой части, не стесняйтесь вносить свой вклад, если вы чувствуете, что что-то отсутствует, или есть лучшие способы, чтобы сделать определенные вещи. Я с нетерпением жду вашего вклада (ы). Поймать YA в следующей части.
Оригинал: “https://dev.to/chiefcode/building-a-covid-19-data-alert-system-with-python-and-selenium-part-1-dci”