Нажмите кнопку, а затем очистите данные на казалось бы статической веб-странице?
Я пытаюсь очистить статистику игрока в Totals
Таблица по этой ссылке: http://www.basketball-reference.com/players/j/jordami01.html. Когда вы впервые появляетесь на этом сайте, гораздо сложнее обработать данные как есть, поэтому у вас есть возможность нажать "CSV" прямо над таблицей. Этот формат будет намного легче переварить.
У меня проблемы
import urllib2
from bs4 import BeautifulSoup
from selenium import webdriver
player_link = "http://www.basketball-reference.com/players/j/jordami01.html"
browser = webdriver.Firefox()
browser.get(player_link)
elem = browser.find_element_by_xpath("//span[@class='tooltip' and @onlick='table2csv('totals')']")
elem.click()
Когда я запускаю это, появляется окно Firefox, но код никогда не меняет таблицу с ее исходного формата на CSV. Таблица CSV появляется в исходном коде только после того, как я щелкну CSV (очевидно). Как я могу получить selenium
нажать на эту кнопку CSV, а затем BS, чтобы очистить данные?
1 ответ
Вам не нужно BeautifulSoup
здесь Нажмите на CSV
Кнопка с селеном, извлечь содержимое появившегося pre
элемент с данными CSV и анализировать его со встроенным csv
модуль:
import csv
from StringIO import StringIO
from selenium import webdriver
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
player_link = "http://www.basketball-reference.com/players/j/jordami01.html"
browser = webdriver.Firefox()
wait = WebDriverWait(browser, 10)
browser.set_page_load_timeout(10)
# stop load after a timeout
try:
browser.get(player_link)
except TimeoutException:
browser.execute_script("window.stop();")
# click "CSV"
elem = wait.until(EC.presence_of_element_located((By.XPATH, "//div[@class='table_heading']//span[. = 'CSV']")))
elem.click()
# get CSV data
csv_data = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "pre#csv_totals"))).text.encode("utf-8")
browser.close()
# read CSV
reader = csv.reader(StringIO(csv_data))
for line in reader:
print(line)