You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现Python Selenium爬虫每日自动运行2次?

需求与问题

我用Python(Selenium)开发了一个可正常运行的CNN巴西网站爬虫,能将获取的信息存入CSV文件和SQL Server数据库,目前用VS Code开发。现在需要实现脚本每日自动运行2次,且能在电脑关机时在线执行并更新CSV文件。之前尝试过AWS但没成功,爬虫运行依赖chromedriver.exe和用于追加数据的CSV文件。


导入模块

import pandas as pd
from datetime import datetime
import requests
import json
from pandas_datareader import data as web
import yfinance as yf
from selenium import webdriver
from selenium.webdriver.common.by import By
from time import sleep
from datetime import date, timedelta
from selenium.webdriver.chrome.options import Options
import pyodbc

爬虫核心代码

dataset.to_csv(r"C:\Users\belig\OneDrive\Python\MeuProjeto\Projetos\WebScrapping_News\WebScrapping_News\dataset.csv", index=False)

dataset = pd.read_csv(r"C:\Users\belig\OneDrive\Python\MeuProjeto\Projetos\WebScrapping_News\WebScrapping_News\dataset_news.csv", sep=";")


# 创建变量

# %%
Date = 1
WeekDay = 2
Brazil_Ibovespa = 3
BRL_Dollar = 4
Titulo_CNNBrasil = 5

# 设置日期变量
Date = datetime.now().strftime("%d/%m/%Y, %H:%M:%S")
Date

# 设置星期变量
date_now = datetime.now()
WeekDay = date_now.strftime("%A")
WeekDay

# 设置巴西Ibovespa指数变量
today = date.today()
start_day = today - timedelta(days = 7)
tickers_DowJones = "^BVSP"
datayf = yf.download(tickers_DowJones, start=start_day, end=today)
print(datayf)
datayf = datayf['Adj Close']

Brazil_Ibovespa = datayf[-1]
Brazil_Ibovespa

# 设置巴西雷亚尔兑美元汇率变量
requisicao = requests.get('https://economia.awesomeapi.com.br/all/USD-BRL')
cotacao = requisicao.json()
BRL_Dollar = round(float(cotacao['USD']['bid']),2)
BRL_Dollar

# 启动无头浏览器进行爬取
driver_exe = r'C:\Users\belig\OneDrive\Python\MeuProjeto\Projetos\WebScrapping_News\WebScrapping_News\chromedriver.exe'
options = Options()
options.add_argument("--headless")
driver = webdriver.Chrome(driver_exe, options=options)


# 设置CNN巴西头条标题变量
driver.get('https://www.cnnbrasil.com.br/')
Titulo_CNNBrasil = driver.find_element(By.XPATH, '//*[@id="block1847327"]/div/div/a/h2').text
print(Titulo_CNNBrasil)

# 设置CNN巴西头条链接变量
driver.find_element(By.XPATH, '//*[@id="block1847327"]/div/div/a/h2').click()
Url_CNNBrasil = driver.current_url
print(Url_CNNBrasil)

# 设置CNN巴西头条主题标签变量
try:
    Topics_CNNBrasil =  driver.find_element(By.CLASS_NAME, 'tags__list').text
    Topics_CNNBrasil = Topics_CNNBrasil.replace('\n', ', ')
    print(Topics_CNNBrasil)
except:
    Topics_CNNBrasil = 'None'
    print

写入SQL与DataFrame代码(已修正语法错误)

# 向DataFrame添加行
new_row = pd.DataFrame({"Date":[Date], "WeekDay":[WeekDay], "Brazil_Ibovespa":[Brazil_Ibovespa], "BRL_Dollar":[BRL_Dollar], "Titulo_CNNBrasil":[Titulo_CNNBrasil], "Url_CNNBrasil":[Url_CNNBrasil], "Topics_CNNBrasil":[Topics_CNNBrasil]}, index=[0])
print(new_row)
dataset = pd.concat([dataset, new_row], ignore_index=True)
# dataset = dataset.append({"Date":Date, "WeekDay": WeekDay}, ignore_index=True)
print(dataset)

dataset.to_csv(r'C:\Users\belig\OneDrive\Python\MeuProjeto\Projetos\WebScrapping_News\WebScrapping_News\dataset_news.csv', index=False, encoding="utf-8-sig", sep = ';')

# 向SQL Server添加信息
dados_conexao = (
    "Driver={SQL Server};"
    "Server=Beligolli;"
    "Database=WebScrappingNews;"
    'Trusted_Connection=yes;'
    # UID  = Login;
    # PWD=Senha;
)


conexao = pyodbc.connect(dados_conexao)
cursor = conexao.cursor()

comando = "INSERT INTO NewsDataBase (Date_Hour, WeekDay_, Brazil_Ibovespa, BRL_Dollar, Titulo_CNNBrasil, Url_CNNBrasil, Topics_CNNBrasil) VALUES (?, ?, ?, ?, ?, ?, ?)"

valores = (Date, WeekDay, Brazil_Ibovespa, BRL_Dollar, Titulo_CNNBrasil, Url_CNNBrasil, Topics_CNNBrasil)

cursor.execute(comando, valores)
cursor.commit()
cursor.close()
conexao.close()

print(f'Adicionado {Date} - {WeekDay} ao dataset')

可行的自动执行方案

1. 修正AWS使用方案

之前AWS尝试失败多因环境配置问题,调整如下:

  • 用AWS Lambda运行爬虫,搭配chrome-aws-lambda包替代本地chromedriver.exe,该包自带适配Lambda环境的无头Chrome及驱动,无需手动上传。
  • 将CSV文件迁移至S3存储桶,通过boto3库实现读写操作,保证数据持久化与跨环境访问。
  • 配置CloudWatch Events定时触发器,设置每日两次的执行规则,触发Lambda运行。

2. 轻量云服务器方案

  • 租用最低配云服务器(如AWS EC2、阿里云ECS),安装Python、Chrome及对应版本驱动。
  • 上传爬虫代码与CSV文件,用Linux的crontab或Windows服务器的任务计划设置每日两次定时任务。
  • 保持服务器常年运行,即可实现关机状态下的自动执行。

3. GitHub Actions方案

  • 将代码与CSV文件托管至GitHub仓库,每次运行后提交更新CSV。
  • 在仓库.github/workflows目录下编写YAML配置文件,设置每日两次定时触发规则。
  • 使用带Chrome的Docker镜像作为运行环境,无需手动安装驱动,执行完成后自动提交更新的CSV文件回仓库。

代码适配要点

  • 替换本地文件路径为云存储访问逻辑(如S3的boto3操作、GitHub文件读写)。
  • 若使用本地SQL Server,需迁移至云数据库(如Azure SQL Database),否则云环境无法访问本地实例。

内容的提问来源于stack exchange,提问作者Gabriel Beligolli

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 01:13:59