Python爬取Coinbase多页数据仅存最后一页排查及云定时运行咨询
问题1:CSV仅保存最后一页数据的原因及修复
核心原因
你将存储抓取结果的names列表初始化放在了遍历urls的循环内部,每处理一个新的页面,names就会被清空重置,循环结束后names里仅保留最后一个URL的抓取结果,最终导出的CSV自然只有最后一页的数据。
另外你的代码还存在两个可优化点:
- 每次循环都新建Chrome驱动实例,资源消耗大,可复用同一个驱动实例
- 导出文件名拼接了两次
date变量,会生成冗余重复的文件名,且时间中的冒号在部分系统中不支持作为文件名字符
修复后的代码
from selenium import webdriver from bs4 import BeautifulSoup import time import pandas as pd urls = [] for i in range(1, 4): if i == 1: url = "https://www.coinbase.com/price/s/listed" urls.append(url) else: url = "https://www.coinbase.com/price/s/listed" + f"?page={i}" urls.append(url) print(urls) # 将names初始化移到循环外部 names =[] # 复用同一个浏览器驱动,避免重复启动 wd = webdriver.Chrome() for url in urls: wd.get(url) # 新手可以先保留sleep,后续可替换为显式等待减少等待时间 time.sleep(30) resp = wd.page_source html = BeautifulSoup(resp,"lxml") tr = html.find_all("tr",class_="AssetTableRowDense__Row-sc-14h1499-1 lfkMjy") print(len(tr)) for i in tr: name1 = i.find("span",class_="TextElement__Spacer-hxkcw5-0 cicsNy Header__StyledHeader-sc-1xiyexz-0 kwgTEs AssetTableRowDense__StyledHeader-sc-14h1499-14 AssetTableRowDense__StyledHeaderDark-sc-14h1499-17 cWTMKR").text name2 = i.find("span",class_="TextElement__Spacer-hxkcw5-0 cicsNy Header__StyledHeader-sc-1xiyexz-0 bjBkPh AssetTableRowDense__StyledHeader-sc-14h1499-14 AssetTableRowDense__StyledHeaderLight-sc-14h1499-15 AssetTableRowDense__TickerText-sc-14h1499-16 cdqGcC").text names.append([name1,name2]) # 全部抓取完成后再关闭驱动 wd.quit() ns=pd.DataFrame(names) date = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) path = "/Users/paul/jpn traffic/coinbase/coinbase" # 修正重复拼接date的问题,同时把时间里的冒号替换掉避免部分系统不支持文件名带冒号 ns.to_csv(path + date.replace(':','-') +'.csv',index=None)
问题2:定时运行+邮件发送方案
适合新手的低门槛方案如下:
- 云服务器选择:购买最低配的Linux轻量应用服务器即可,一年成本仅几十元,系统选择Ubuntu 22.04版本。
- 运行环境配置:在服务器上安装Python环境、对应依赖库,以及无头模式的Chrome浏览器,启动webdriver时添加
--headless=new、--no-sandbox等无头启动参数,适配无图形界面的服务器环境。 - 邮件发送:直接使用Python自带的
smtplib和email库即可实现邮件发送,支持QQ邮箱、163邮箱等主流邮箱,可把爬取结果作为附件或正文内容发送到你的目标邮箱,无需额外第三方服务。 - 定时任务:直接使用Linux系统自带的crontab工具配置定时规则,无需额外安装复杂的定时框架,一行命令即可设置每天指定时间运行脚本。
内容的提问来源于stack exchange,提问作者southparkpythonguy
相关产品推荐
相关产品推荐

