Python使用selenium插件自动打开网页,获取表格数据

Python 爬虫之使用selenium自动打开浏览器,并且访问对应的网页获取网页表格数据

代码如下:

#!/usr/local/bin/python
# coding: utf-8
import configparser
import time

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.chrome.options import Options
import pandas as pd


import warnings

warnings.filterwarnings('ignore', category=UserWarning)
warnings.filterwarnings('ignore', category=FutureWarning)



# 启动 Chrome 浏览器(需要安装 ChromeDriver)
    driver = webdriver.Chrome()
    url='https://cn.investing.com/equities/conoco-phillips-historical-data'
    # 访问目标 URL
    driver.get(url)

    # 最小化浏览器
    # driver.minimize_window()

    driver.set_window_position(-10000, 0)

    # 等待表格数据加载(这里需要根据实际情况设置等待条件)
    # 假设表格有一个特定的 ID 或类名,你可以使用它作为等待条件
    # 如果表格是通过 AJAX 加载的,你可能需要等待某个特定的元素出现
    # 例如,等待表格的某个元素可见
    # random_num = random.randint(30, 50)
    random_num = 10
    wait = WebDriverWait(driver, timeout=random_num)
    css = '.freeze-column-w-1.w-full.overflow-x-auto.text-xs.leading-4'
    element = wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, css)))
    # emelemt = wait.until()

    # 假设你已经等待了足够长的时间,表格数据已经加载
    # 使用 pandas 读取表格数据(这可能需要一些额外的 HTML 处理,因为 Selenium 返回的是页面的完整 HTML)
    # 通常,你需要找到包含表格的特定元素,然后将其 HTML 传递给 pandas.read_html
    # 这里只是一个示例,你需要根据实际情况调整
    # table_html = driver.find_element(By.CLASS_NAME, 'freeze-column-w-1 w-full overflow-x-auto text-xs leading-4').get_attribute('outerHTML')
    # 使用xpath选择元素
    # table_html = driver.find_element(By.XPATH,"//table[@class='freeze-column-w-1 w-full overflow-x-auto text-xs leading-4']").get_attribute('outerHTML')
    # /html/body/div[1]/div[2]/div[2]/div[2]/div[1]/div[3]/div[3]/table
    # 使用 class_name选择
    # table_html = driver.find_element(By.CLASS_NAME,
    #                                  "freeze-column-w-1").get_attribute(
    #     'outerHTML')

    # 使用cssselector选择元素
    css = '.freeze-column-w-1.w-full.overflow-x-auto.text-xs.leading-4'
    table_html = driver.find_element(By.CSS_SELECTOR,
                                     value=css).get_attribute(
        'outerHTML')

    dfs = pd.read_html(str(table_html))
    df = dfs[0]  # 假设我们想要第一个表格
    df.fillna(0, inplace=True)
    

    # 关闭浏览器
    driver.quit()

    # 打印数据(如果成功获取)
    print(df)



    
    

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值