python 定时执行 爬虫 模块_【Python】定时执行网站爬虫
今天我们额讨论如何使用Python,SQLite数据库与crontab工具将爬虫程序部署到服务器上并实现定时爬取存储
编写爬虫代码
编写一个爬虫程序,使用requests与beautifulsoup4包爬取和解析Yahoo!股市-上市成交价排行与Yahoo!股市-上柜成交价排行的资料,再利用pandas包将解析后的展示出来。
import datetime
import requests
from bs4 import BeautifulSoup
import pandas as pd
def get_price_ranks():
current_dt = datetime.datetime.now().strftime("%Y-%m-%d %X")
current_dts = [current_dt for _ in range(200)]
stock_types = ["tse", "otc"]
price_rank_urls = ["https://tw.stock.yahoo.com/d/i/rank.php?t=pri&e={}&n=100".format(st) for st in stock_types]
tickers = []
stocks = []
prices = []
volumes = []
mkt_values = []
ttl_steps = 10*100
each_step = 10
for pr_url in price_rank_urls:
r = requests.get(pr_url)
soup = BeautifulSoup(r.text, 'html.parser')
ticker = [i.text.split()[0] for i in soup.select(".name a")]
tickers += ticker
stock = [i.text.split()[1] for i in soup.select(".name a")]
stocks += stock
price = [float(soup.find_all("td")[2].find_all("td")[i].text) for i in range(5, 5+ttl_steps, each_step)]
prices += price
volume = [int(soup.find_all("td")[2].find_all("td")[i].text.replace(",", "")) for i in range(11, 11+ttl_steps, each_step)]
volumes += volume
mkt_value = [float(soup.find_all("td")[2].find_all("td")[i].text)*100000000 for i in range(12, 12+ttl_steps, each_step)]
mkt_values += mkt_value
types = ["上市" for _ in range(100)] + ["上柜" for _ in range(100)]
ky_registered = [True if "KY" in st else False for st in stocks]
df = pd.DataFrame()
df["scrapingTime"] = current_dts
df["type"] = types
df["kyRegistered"] = ky_registered
df["ticker"] = tickers
df["stock"] = stocks
df["price"] = prices
df["volume"] = volumes
df["mktValue"] = mkt_values
return df
price_ranks = get_price_ranks()
print(price_ranks.shape)
这个的结果展示为
## (200, 8)
接下来我们利用pandas进行前几行展示
price_ranks.head()
price_ranks.tail()
接下来我们就开始往服务器上部署
对于服务器的选择,环境配置不在本课的讨论范围之内,我们主要是要讲一下怎么去设置定时任务。
接下来我们改造一下代码,改造成结果有sqlite存储。
import datetime
import requests
from bs4 import BeautifulSoup
import pandas as pd
import sqlite3
def get_price_ranks():
current_dt = datetime.datetime.now().strftime("%Y-%m-%d %X")
current_dts = [current_dt for _ in range(200)]
stock_types = ["tse", "otc"]
price_rank_urls = ["https://tw.stock.yahoo.com/d/i/rank.php?t=pri&e={}&n=100".format(st) for st in stock_types]
tickers = []
stocks = []
prices = []
volumes = []
mkt_values = []
ttl_steps = 10*100
each_step = 10
for pr_url in price_rank_urls:
r = requests.get(pr_url)
soup = BeautifulSoup(r.text, 'html.parser')
ticker = [i.text.split()[0] for i in soup.select(".name a")]
tickers += ticker
stock = [i.text.split()[1] for i in soup.select(".name a")]
stocks += stock
price = [float(soup.find_all("td")[2].find_all("td")[i].text) for i in range(5, 5+ttl_steps, each_step)]
prices += price
volume = [int(soup.find_all("td")[2].find_all("td")[i].text.replace(",", "")) for i in range(11, 11+ttl_steps, each_step)]
volumes += volume
mkt_value = [float(soup.find_all("td")[2].find_all("td")[i].text)*100000000 for i in range(12, 12+ttl_steps, each_step)]
mkt_values += mkt_value
types = ["上市" for _ in range(100)] + ["上櫃" for _ in range(100)]
ky_registered = [True if "KY" in st else False for st in stocks]
df = pd.DataFrame()
df["scrapingTime"] = current_dts
df["type"] = types
df["kyRegistered"] = ky_registered
df["ticker"] = tickers
df["stock"] = stocks
df["price"] = prices
df["volume"] = volumes
df["mktValue"] = mkt_values
return df
price_ranks = get_price_ranks()
conn = sqlite3.connect('/home/ubuntu/yahoo_stock.db')
price_ranks.to_sql("price_ranks", conn, if_exists="append", index=False)
接下来如果我们让他定时启动,那么,我们需要linux的crontab命令:
如果我们要设置每天的 9:30 到 16:30 之间每小时都执行一次
那么我们只需要先把文件命名为price_rank_scraper.py
然后在crontab的文件中添加
30 9-16 * * * /home/ubuntu/miniconda3/bin/python /home/ubuntu/price_rank_scraper.py
这样我们就成功的做好了一个定时任务爬虫
python 定时执行 爬虫 模块_【Python】定时执行网站爬虫相关推荐
- python二手交易平台代码_PYTHON爬虫实战_垃圾佬闲鱼爬虫转转爬虫数据整合自用二手急速响应捡垃圾平台_3(附源码持续更新)...
说明 文章首发于HURUWO的博客小站,本平台做同步备份发布. 如有浏览或访问异常图片加载失败或者相关疑问可前往原博客下评论浏览. 原文链接 PYTHON爬虫实战_垃圾佬闲鱼爬虫转转爬虫数据整合自用二 ...
- python运行代码不成功_命令行执行python模块时提示包找不到的问题
庄稼人不是专职python开发的道友,虽然与python相识已多年,可惜相识不相知,只是偶尔借助pydev写一些简单的小工具. 多年来,一直困惑于这样一个问题:同样的工程,同样的代码,使用pydev可 ...
- python分布式爬虫系统_如何构建一个分布式爬虫:理论篇
前言 本系列文章计划分三个章节进行讲述,分别是理论篇.基础篇和实战篇.理论篇主要为构建分布式爬虫而储备的理论知识,基础篇会基于理论篇的知识写一个简易的分布式爬虫,实战篇则会以微博为例,教大家做一个比较 ...
- python入门爬虫案例_[Python入门学习]-爬虫项目案例讲解
一.速成HTML html:超文本标记语言. 文档的第一行就表明这是一个html文档.根标签是html,然后下面有head和body,head里面是一些头信息,body就是我们想把页面渲染成什么样. ...
- python如何导入自定义模块_【python】导入自定义模块
一.直接import 1.当执行文件与要导入的py文件在同一目录下时 假设要在wangyi.py中导入weibo.py文件 import weibo 2.当执行文件与要导入的py文件所在文件夹在同一目 ...
- python测试代码与模块_测量Python代码运行时间
Python 社区有句俗语: "python自己带着电池" ,别自己写计时框架. Python 2.3 具备一个叫做 timeit 的完美计时工具可以测量python代码的运行时间 ...
- python打开excel执行vba代码_“Python替代Excel Vba”系列(终):vba中调用Python
请关注本号,后续会有更多相关教程. 系列文章 学Python还不会处理Excel数据?带你用pandas玩转各种数据处理"Python替代Excel Vba"系列(二):panda ...
- python怎么安装re模块_搞懂python中的re模块
现在介绍如何在Python中使用正则表达式. Python提供了re模块,用于实现正则表达式的操作. 通过使用re模块的方法进行字符串处理 re模块提供的方法(如search().match().fi ...
- python中的logging记录日志_[ Python入门教程 ] Python中日志记录模块logging使用实例...
python中的logging模块用于记录日志.用户可以根据程序实现需要自定义日志输出位置.日志级别以及日志格式. 将日志内容输出到屏幕 一个最简单的logging模块使用样例,直接打印显示日志内容到 ...
- Python学习笔记011_模块_标准库_第三方库的安装
容器 -> 数据的封装 函数 -> 语句的封装 类 -> 方法和属性的封装 模块 -> 模块就是程序 , 保存每个.py文件 # 创建了一个hello.py的文件,它的内容如下 ...
最新文章
- 正则表达式处理的基本步骤
- php处理微信返回xml数据,php将微信返回的xml格式转换成数组
- 手动升级oracle,ORACLE 10.2.0.1手动升级到10.2.0.4
- 深入理解Spark 2.1 Core (八):Standalone模式容错及HA的原理与源码分析
- mfc控件位置调整和坐标确定 .
- http 使用curl发起https请求
- python json库安装_jsonc库的安装以及简单使用
- 20. 利用Veeam ONE监控vSphere虚拟化平台(Veeam ONE安装及配置)
- webService返回自定义类型的数据处理
- 防御暴力破解SSH攻击
- Mysql数据类型blob存储长度
- 初涉springboot(一)
- 今天看到几款真不错的软件
- 题目448-寻找最大数
- Windows10怎么下载MySQL,详解Windows10下载mysql的教程图解
- 关于Matplotlib作图时中文字体无法显示问题
- 【Golang】Go 语言 XML 的序列与反序列化实践
- DeFi+NFT出圈姿势盘点,NFT借贷等应用领域值得关注
- 利用aspose-words直接将Word转化为图片
- 2.安装node-red
热门文章
- vtk读取文件并显示的几种方法
- [云炬创业基础笔记]第九章企业的法律形态测试3
- [云炬创业基础笔记] 第四章测试4
- 云炬创业政策学习笔记20210116
- [云炬ThinkPython阅读笔记]2.2 变量名
- <马哲>商品二因素及其辩证关系2017-12-27
- VTK修炼之道64:纹理映射体绘制_三维纹理映射
- 成员函数在外部调用的方式总结-函数指针强制绑定+lamda函数闭包行为实现this指针的绑定
- linux_unix系统编程手册源代码编译
- 不同寻址方式的灵活应用——改变每个单词首字母大小写