如何在Python Selenium中抓取动态网站?

时间:2019-01-31 20:15:04

标签: python-3.x selenium screen-scraping

我是金融专业的学生,​​对编码非常陌生。我一直在努力学习Python了一个星期。

  • 目标: 在越南上市公司的财务报表数据刮痧 来源:https://www.vndirect.com.vn/portal/bang-can-doi-ke-toan/vnm.shtml?request_locale=en_GB(样本代码:VNM)

  • 情况: 我使用Python 3 BS4,硒刮和熊猫的桌游戏。我已经读过有关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)

我将硒分离的部分保留下来:

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

0 个答案:

没有答案