Что происходит?
На странице, которую вы пытаетесь очистить, отображается содержимое после выполнения кода javascript (вот разницу, которую вы можете найти между страницей, которую вы получили с помощью curl, и страницей, проверенной в вашем браузер), поэтому перед использованием l xml, чтобы найти то, что вам нужно, вам нужно кое-что, чтобы помочь вам визуализировать javascript.
Ввод селена
Selenium поможет вам в этой задаче. Это автоматизация для (веб) брокеров, а это значит, что вам понадобится аддон webdriver (есть несколько вариантов: gecko, chrome, opera, et c.), Которые можно загрузить с помощью менеджера пакетов операционной системы или загрузите их вручную, добавьте их в PATH или используйте executable_path="location\to\geckodriver.exe"
при вызове веб-драйвера.
Теперь, как это будет выглядеть в вашем коде (с использованием chrome в качестве веб-драйвера)?
from selenium import webdriver
from lxml import html
driver = webdriver.Chrome()
driver.get('https://finviz.com/futures.ashx')
tree = html.fromstring(driver.page_source)
Indicies = tree.xpath('//div[contains(@class, "tile_header is-indices")]//*')
Indicies = tree.xpath('//*[@id="futures"]/div/div[2]/div[1]/a[1]/div[1]/text()')
Indicies = tree.xpath('/html/body/div[2]/div/div/div/div[2]/div[1]/a[1]/div[1]')
print([e.text_content() for e in tree.xpath('//div[@class="tile_header is-indices" and @style]')])
Indicies = tree.xpath("//div[contains(text(), 'tile_header is-indices')]//*")
Indicies = tree.xpath("//a[contains(text(), 'tile_header is-indices')]//*")
driver.quit()
Теперь вы можете указать некоторые параметры, чтобы он мог работать без вывода сообщений (--log-level = 3), без заголовка (--headless) и т. Д., А сам аргумент будет зависеть от используемого вами веб-драйвера.
from selenium.webdriver.chrome.options import Options
chrome_options.add_argument("--add-first-thing")
chrome_options.add_argument("--add-second-thing")
driver = webdriver.Chrome(options=chrome_options)
Как видите, Selenium поможет вам визуализировать вашу страницу, а затем вы сможете проанализировать ее как l xml, Beautiful Soup или сам Selenium.