Очистить таблицу с помощью кнопки «Показать больше» на веб-странице JavaScript - PullRequest
1 голос
/ 17 марта 2020

Я пытаюсь получить таблицу данных из веб-статьи открытого доступа NYT о количестве случаев COVID-19, которые можно найти здесь . В таблице показаны первые 10 штатов с наибольшим количеством дел, и она расширяется до всех 50 штатов и территорий США после нажатия кнопки «Показать больше».

enter image description here

Часть таблицы HTML выглядит следующим образом:

enter image description here

Используя это руководство, я написал следующее код, использующий Selenium, чтобы попытаться нажать эту кнопку, и передать эту страницу BeautifulSoup, чтобы начать синтез для использования в Pandas. Мой исходный код выглядит следующим образом:

from bs4 import BeautifulSoup
import selenium
import time
from selenium import webdriver

options = webdriver.ChromeOptions()
options.add_argument('--ignore-certificate-errors')
options.add_argument('--incognito')
options.add_argument('--headless')
driver = webdriver.Chrome("/usr/bin/chromedriver", chrome_options=options)
driver.get("https://www.nytimes.com/interactive/2020/us/coronavirus-us-cases.html")

На данном этапе я не уверен, как выполнить нажатие кнопки (находится во фрагменте HTML: <button class="svelte-1tjczrs">Show more</button>) и поставить ее на BeautifulSoup.

Любая помощь приветствуется!

1 Ответ

2 голосов
/ 17 марта 2020

Попробуйте следующую попытку. Должно быть выбрано нужное вам содержимое, показать кнопку «Показать больше» и поместить ее в кадр данных.

import pandas
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

link = "https://www.nytimes.com/interactive/2020/us/coronavirus-us-cases.html"

with webdriver.Chrome() as driver:
    driver.get(link)

    datalist = []

    show_more = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.CSS_SELECTOR,"#g-cases-by-state button[class^='svelte']")))
    driver.execute_script("arguments[0].click();",show_more)

    for elem in WebDriverWait(driver, 10).until(EC.presence_of_all_elements_located((By.CSS_SELECTOR,"#g-cases-by-state table[class^='svelte'] tr"))):
        data = [item.text for item in elem.find_elements_by_css_selector("th,td")]
        datalist.append(data)

df = pandas.DataFrame(datalist)
print(df)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...