Как очистить динамический сайт в Python Selenium? - PullRequest
0 голосов
/ 31 января 2019

Я студент финансов, очень плохо знаком с программированием.Я пытался выучить Python в течение недели.

  • Цель: сбор данных для финансовой отчетности перечисленных компаний во Вьетнаме Источник: https://www.vndirect.com.vn/portal/bang-can-doi-ke-toan/vnm.shtml?request_locale=en_GB (образец тикера: VNM)

  • Ситуация: я использую Python 3 с BS4, Selenium для очистки и Pandas для создания таблиц.Я читал о Scrapy, но обнаружил, что учиться нужно больше усилий.

  • Проблемы:

    1. Как вы видите, веб-сайт упалменю для выбора лет, количества терминов, единиц ... Я выяснил, как использовать Selenium для выбора параметров и нажать кнопку «Вид» для загрузки данных.У меня проблемы с получением данных после.Я пытался использовать «ждать до», но элементы веб-сайта не изменились.

    2. Переход к отчету о доходах и CF. Данные были при проверке, но отсутствовали в источнике страницы (с использованием Chrome).

Спасибо за любую помощь.

import requests as rq
import bs4
import pandas as pd

# ticker = input('Ticker')
ticker = 'vnm'

url = 'https://www.vndirect.com.vn/portal/bang-can-doi-ke-toan/' + ticker + '.shtml'
res = rq.get(url)
web_text = bs4.BeautifulSoup(res.text)
content = web_text.select('.bordertd')

mod_content =[]
for x in content:
    mod_content.append(x.getText().strip())

def chunks(l, n):
    for i in range(0, len(l), n):
        yield l[i:i+n]

table = list(chunks(mod_content, 5))
bsheet=pd.DataFrame(table)
print(bsheet)

Я держу часть с Selenium отделенной:

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

browser = webdriver.Chrome('path')
browser.get('https://www.vndirect.com.vn/portal/bang-can-doi-ke-toan/VNM.shtml')

dropdown = Select(browser.find_element_by_name("searchObject.fiscalQuarter"))
dropdown.select_by_value('IN_YEAR')
browser.find_element_by_class_name('iButton').click()

# wait = WebDriverWait(browser, 10)
# element = wait.until(EC.element_to_be_clickable((By.NAME,'searchObject.fiscalQuarter')))

content = browser.page_source
browser.quit()

content = web_text.select('.bordertd')
mod_content =[]
for x in content:
    mod_content.append(x.getText().strip())
mod_content
...