【python】爬虫记录每小时金价

2024-06-02 09:04

本文主要是介绍【python】爬虫记录每小时金价,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

数据来源:

https://www.cngold.org/img_date/

因为这个网站是数据随时变动的,用requests、BeautifulSoup的方式解析html的话,数据的位置显示的是“--”,并不能取到数据。

所以采用webdriver访问网站,然后从界面上获取金价。

1、建表

在本地(服务器)上的mysql上建表,主要字段:sku、date_time、price,分别对应产品(也就是黄金)、时间、价格

2、读取金价函数

这个函数主要就是读取金价,并调用插入sql的函数:


def extract_info(url,id):print('开始')chrome_options = Options()chrome_options.add_argument('--disable-infobars')chrome_options.add_argument('--window-size=1920,1080')  # 可以设置浏览器窗口大小chrome_options.add_argument('--start-maximized')  # 可以让浏览器窗口最大化chrome_options.add_argument('--disable-extensions')  # 禁用扩展chrome_options.add_argument('--no-sandbox')  # 以最高权限运行chrome_options.add_argument('--disable-dev-shm-usage')  # 用于解决Chrome crash问题chrome_options.add_argument('--disable-browser-side-navigation')  # 禁用浏览器端导航chrome_options.add_argument('--enable-automation')  # 允许自动化chrome_options.add_argument("--headless")  # 设置Chrome无头模式print('过程1')driver=webdriver.Chrome(options=chrome_options)driver.get(url)print('过程2')driver.maximize_window()#time.sleep(5)text_list=driver.find_element(by=webdriver.common.by.By.XPATH,value='//html/body/div[3]/div/div[2]/div/div[3]/table/tbody/tr/td[2]/font')price_hour=text_list.textsql = 'insert into reptile.gold_price_log values("' + str(id) + '","' + datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') + '",' + str(price_hour) + ');'print(sql)sql_insert(sql, id)

数据插入函数:


def sql_insert(sql,id):sql=sqlalchemy.text(sql)print(sql_getcnt(id))if sql_getcnt(id) == 0:try:con.execute(sql)con.commit()except:print('执行失败')print(sql)
3、数据验证函数

因为爬取数据的目标是每个小时记录一次,为了避免测试、调试的数据干扰,做一个验证的方法,如果这个小时已经有数据了,就不再运行上个函数了:


def sql_getcnt(id):g_sql = '''selectcount(*) as cntfrom reptile.gold_price_logwhere sku="黄金"and date_format(date_time,'%Y-%m-%d %H:00:00')="''' + datetime.datetime.now().strftime('%Y-%m-%d %H:00:00') + '''"order by sku desc,date_time desc'''g_sql = sqlalchemy.text(g_sql)data = pd.read_sql_query(sql=g_sql, con=con, index_col=['cnt'])cnt = list(data.index)[0]#print(cnt)return cnt
4、主方法

url_list=['https://www.cngold.org/img_date/']
sku_list=['黄金']for i in range(len(sku_list)):print(sql_getcnt(sku_list[i]))if sql_getcnt(sku_list[i])>100:time.sleep(random.uniform(1, 5))print(str(sku_list[i])+'已存在')else:url_id=url_list[i]extract_info(url_id,sku_list[i])

有些写法是之前脚本复制过来的,所以偶尔会有些奇怪哈哈哈。

5、配置每小时调用

因为这个脚本是设置在了云服务器上,所以要在linux服务器上设置定时执行,我这边的逻辑是shell脚本调用python脚本,然后定时执行shell脚本。

shell脚本内容:

然后:

crontab -e

这样,就可以每小时记录金价了。

这篇关于【python】爬虫记录每小时金价的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1023531

相关文章

python: 多模块(.py)中全局变量的导入

文章目录 global关键字可变类型和不可变类型数据的内存地址单模块(单个py文件)的全局变量示例总结 多模块(多个py文件)的全局变量from x import x导入全局变量示例 import x导入全局变量示例 总结 global关键字 global 的作用范围是模块(.py)级别: 当你在一个模块(文件)中使用 global 声明变量时,这个变量只在该模块的全局命名空

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

AI Toolkit + H100 GPU,一小时内微调最新热门文生图模型 FLUX

上个月,FLUX 席卷了互联网,这并非没有原因。他们声称优于 DALLE 3、Ideogram 和 Stable Diffusion 3 等模型,而这一点已被证明是有依据的。随着越来越多的流行图像生成工具(如 Stable Diffusion Web UI Forge 和 ComyUI)开始支持这些模型,FLUX 在 Stable Diffusion 领域的扩展将会持续下去。 自 FLU

nudepy,一个有趣的 Python 库!

更多资料获取 📚 个人网站:ipengtao.com 大家好,今天为大家分享一个有趣的 Python 库 - nudepy。 Github地址:https://github.com/hhatto/nude.py 在图像处理和计算机视觉应用中,检测图像中的不适当内容(例如裸露图像)是一个重要的任务。nudepy 是一个基于 Python 的库,专门用于检测图像中的不适当内容。该

Node.js学习记录(二)

目录 一、express 1、初识express 2、安装express 3、创建并启动web服务器 4、监听 GET&POST 请求、响应内容给客户端 5、获取URL中携带的查询参数 6、获取URL中动态参数 7、静态资源托管 二、工具nodemon 三、express路由 1、express中路由 2、路由的匹配 3、路由模块化 4、路由模块添加前缀 四、中间件

pip-tools:打造可重复、可控的 Python 开发环境,解决依赖关系,让代码更稳定

在 Python 开发中,管理依赖关系是一项繁琐且容易出错的任务。手动更新依赖版本、处理冲突、确保一致性等等,都可能让开发者感到头疼。而 pip-tools 为开发者提供了一套稳定可靠的解决方案。 什么是 pip-tools? pip-tools 是一组命令行工具,旨在简化 Python 依赖关系的管理,确保项目环境的稳定性和可重复性。它主要包含两个核心工具:pip-compile 和 pip

HTML提交表单给python

python 代码 from flask import Flask, request, render_template, redirect, url_forapp = Flask(__name__)@app.route('/')def form():# 渲染表单页面return render_template('./index.html')@app.route('/submit_form',

Python3 BeautifulSoup爬虫 POJ自动提交

POJ 提交代码采用Base64加密方式 import http.cookiejarimport loggingimport urllib.parseimport urllib.requestimport base64from bs4 import BeautifulSoupfrom submitcode import SubmitCodeclass SubmitPoj():de