#python #selenium #web-scraping #beautifulsoup
#python #селен #очистка веб-страниц #beautifulsoup
Вопрос:
Я выполняю веб-очистку следующей страницы: COVID, что мне нужно сделать, это сгенерировать csv-файл таблицы, которая отображается на странице, но динамически загружается данными, для которых я использую selenium. Проблема в том, что даже в этом случае я не могу найти таблицы со следующим кодом:
import requests
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
#url of the page we want to scrape
url = "https://saluddigital.ssch.gob.mx/covid/"
# initiating the webdriver. Parameter includes the path of the webdriver.
driver = webdriver.Firefox()
driver.get(url)
# this is just to ensure that the page is loaded
html = driver.page_source
soup = BeautifulSoup(html, "html.parser")
print(len(soup.find_all("table")))
driver.close()
driver.quit()
Когда я печатаю таблицу, я получаю 0, поскольку он не может ее найти.
Ответ №1:
Я также пытаюсь извлечь и сгенерировать csv-файл с данными. Надеется, что это поможет.
import requests
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
import csv
url = "https://saluddigital.ssch.gob.mx/covid/"
# initiating the webdriver. Parameter includes the path of the webdriver.
driver = webdriver.Chrome()
driver.get(url)
time.sleep(5) # delay for load properly
# # this is just to ensure that the page is loaded
html = driver.page_source
soup = BeautifulSoup(html, "html.parser")
table = soup.select_one('div.contenedor-general')
header = [[a.getText(strip=True,separator=' ')][0].split() for a in table.find_all('tr', {'class': 'header-table'})]
text1 = [t.text.strip().split() for t in soup.find_all('tr', {'class': 'ringlon-1'})]
text2 = [t.text.strip().split() for t in soup.find_all('tr', {'class': 'ringlon-2'})]
with open('outz.csv', 'w') as f:
wr = csv.writer(f, delimiter=',')
wr.writerow(header[0][1:])
for row in text1:
wr.writerow(row)
for row in text2:
wr.writerow(row)
Ответ №2:
Похоже, вам нужно выполнить простой GET
https://saluddigital.ssch.gob.mx/app/asincronos/jsonstats.ashx?getconteos=1
и проанализировать ответ JSON.