нажатие кнопки до очистки таблицы html - PullRequest
0 голосов
/ 31 марта 2020

Привет! Я пытаюсь удалить таблицу HTML, и у меня есть рабочий код.

Один URL, однако, содержит две таблицы html. Первая таблица содержит «квартальные» числа и загружает по умолчанию URL-адрес. Когда вы нажимаете кнопку над таблицей, вы можете переключиться на вторую таблицу с «годовыми» числами.

Мой код выбирает только первую таблицу по умолчанию (квартальную), которая появляется при загрузке URL-адреса.

Как я могу получить свой код python для очистки второй "годовой" таблицы? Может ли селен сделать это? Если да, то может ли кто-нибудь дать какое-нибудь руководство?

#!/usr/local/bin/python3

import requests
import pandas as pd

headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:74.0) Gecko/20100101 Firefox/74.0'}
r = requests.get("https://www.investing.com/equities/exxon-mobil-income-statement", headers=headers)
df = pd.read_html(r.content)[1]
print(df)

Большое спасибо

Ответы [ 3 ]

1 голос
/ 31 марта 2020

Да,

Вы можете сделать это с селеном.

driver.get("https://www.investing.com/equities/exxon-mobil-income-statement")
annual_button = driver.find_element_by_css_selector("#leftColumn > div.alignBottom > div.float_lang_base_1 > a:nth-child(1)")
annual_button.click()
print(driver.find_element_by_css_selector("#rrtable > table").get_attribute('innerHTML'))

Вот код python для этого.

Что он делает? Он вводит страницу, находит элемент year_button с помощью селектора css и затем щелкает по нему. Затем он находит таблицу по селектору css и печатает ее HTML.

Надеюсь, это поможет.

0 голосов
/ 16 апреля 2020

Это может вам помочь. Попробуйте, и, пожалуйста, отправьте отзыв.

Sub Web_Table()
    Dim HTMLDoc As New HTMLDocument
    Dim objTable As Object
    Dim lRow As Long
    Dim lngTable As Long
    Dim lngRow As Long
    Dim lngCol As Long
    Dim ActRw As Long
    Dim objIE As InternetExplorer
    Set objIE = New InternetExplorer
    objIE.Navigate "https://www.investing.com/equities/exxon-mobil-income-statement"

    Do Until objIE.ReadyState = 4 And Not objIE.Busy
        DoEvents
    Loop
    Application.Wait (Now + TimeValue("0:00:03")) 'wait for java script to load
    HTMLDoc.body.innerHTML = objIE.Document.body.innerHTML
    With HTMLDoc.body
        Set objTable = .getElementsByTagName("table")
        For lngTable = 0 To objTable.Length - 1
            For lngRow = 0 To objTable(lngTable).Rows.Length - 1
                For lngCol = 0 To objTable(lngTable).Rows(lngRow).Cells.Length - 1
                    ThisWorkbook.Sheets("Sheet1").Cells(ActRw + lngRow + 1, lngCol + 1) = objTable(lngTable).Rows(lngRow).Cells(lngCol).innerText
                Next lngCol
            Next lngRow
            ActRw = ActRw + objTable(lngTable).Rows.Length + 1
        Next lngTable
    End With
    objIE.Quit
End Sub

enter image description here

0 голосов
/ 04 апреля 2020

После долгих поисков и других сообщений в стеке, наконец-то все заработало:

from selenium import webdriver
from bs4 import BeautifulSoup
import pandas as pd

browser = webdriver.Firefox(executable_path=r'/Users/xxxxxx/Documents/python/web_drivers/geckodriver')
browser.get('https://www.investing.com/equities/exxon-mobil-income-statement')
linkElem = browser.find_element_by_link_text('Annual')
linkElem.click()

r = browser.find_element_by_css_selector("#rrtable > table").get_attribute('outerHTML')
browser.quit()

soup = BeautifulSoup(r, 'html.parser')

df = pd.read_html(str(soup))[0]

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