Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【Python】定时执行网站爬虫

【Python】定时执行网站爬虫

作者头像
会呼吸的Coder
发布于 2020-02-17 09:52:44
发布于 2020-02-17 09:52:44
1.7K00
代码可运行
举报
文章被收录于专栏:会呼吸的Coder会呼吸的Coder
运行总次数:0
代码可运行

今天我们额讨论如何使用PythonSQLite数据库与crontab工具将爬虫程序部署到服务器上并实现定时爬取存储

编写爬虫代码

编写一个爬虫程序,使用requestsbeautifulsoup4包爬取和解析Yahoo!股市-上市成交价排行与Yahoo!股市-上柜成交价排行的资料,再利用pandas包将解析后的展示出来。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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)

这个的结果展示为

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
## (200, 8)

接下来我们利用pandas进行前几行展示

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
price_ranks.head()
price_ranks.tail()

接下来我们就开始往服务器上部署

对于服务器的选择,环境配置不在本课的讨论范围之内,我们主要是要讲一下怎么去设置定时任务。

接下来我们改造一下代码,改造成结果有sqlite存储。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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

这样我们就成功的做好了一个定时任务爬虫

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-11-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 初级程序员 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Python在Finance上的应用6 :获取是S&P 500的成分股股票数据
在之前的Python教程中,我们介绍了如何获取感兴趣的公司名单(在我们的案例中是S&P 500指数),现在我们将收集所有这些公司的股票数据。
万能数据的小草
2020/02/10
2.1K0
【深度学习量化投资】RNNs在股票价格预测的应用基于Keras
前言 RNN和LSTMs在时态数据上表现特别好,这就是为什么他们在语音识别上是有效的。我们通过前25天的开高收低价格,去预测下一时刻的前收盘价。每个时间序列通过一个高斯分布和2层LSTM模型训练数据。文章分为两个版块,外汇价格预测和每日盘中价格预测(30分钟、15分钟、5分钟,等等)。源代码请在文末获取! 外汇预测(用英语描述) a. Daily Data is pulled from Yahoo’s Data Reader b. Only the training set is preprocesse
量化投资与机器学习微信公众号
2018/01/29
3.5K1
【深度学习量化投资】RNNs在股票价格预测的应用基于Keras
python 爬虫之BeautifulS
import urllib2 url = 'http://www.someserver.com/cgi-bin/register.cgi' values = {} values['name'] = 'Michael Foord' values['location'] = 'Northampton' values['language'] = 'Python'
py3study
2020/01/15
8240
python网络爬虫(5)BeautifulSoup的使用示范
结点中的contents输出直接子节点数组,可以通过for逐个输出,通过string属性直接输出内容
嘘、小点声
2019/07/31
1.1K0
Python网络爬虫与信息提取
​ 需要注意的是,淘宝网站本身有反爬虫机制,所以在使用requests库的get()方法爬取网页信息时,需要加入本地的cookie信息,否则淘宝返回的是一个错误页面,无法获取数据。
py3study
2020/01/15
2.4K0
Python网络爬虫与信息提取
【Python爬虫实战】从多类型网页数据到结构化JSON数据的高效提取策略
在互联网爬虫的过程中,面对大量网页数据,理解和区分不同类型的数据至关重要。无论是网页上的文本、数值信息,还是图片、链接、表格等内容,每一种数据类型都有其独特的结构和解析方法。通过合理利用相应的提取策略,爬虫可以高效获取有价值的数据。本篇文章将深入探讨不同类型网页数据的解析方法,并以 JSON 数据为例,详细介绍结构化数据的提取步骤,帮助读者更好地理解并掌握网页数据的爬取技术。
易辰君
2024/11/07
6850
Python之xpath、JsonPath、bs4基本使用
1.xpath 1.1 xpath使用: google提前安装xpath插件,按ctrl + shift + x 出现小黑框 安装lxml库 pip install lxml ‐i https://pypi.douban.com/simple 导入lxml.etreefrom lxml import etree etree.parse() 解析本地文件html_tree = etree.parse('XX.html') etree.HTML() 服务器响应文件html_tree = etree.HTML(
鱼找水需要时间
2023/02/16
1.2K0
Python之xpath、JsonPath、bs4基本使用
python爬虫之BeautifulSoup
文章目录 1. python爬虫之BeautifulSoup 1.1. 简介 1.2. 安装 1.3. 创建BeautifulSoup对象 1.4. Tag 1.4.1. 注意: 1.4.2. get 1.4.3. string 1.4.4. get_text() 1.5. 搜索文档树 1.5.1. find_all( name , attrs , recursive , text , **kwargs ) 1.5.2. find( name , attrs , recursive , text , *
爱撒谎的男孩
2019/12/31
9820
BeautifulSoup4库
和 lxml 一样,Beautiful Soup 也是一个HTML/XML的解析器,主要的功能也是如何解析和提取 HTML/XML 数据。
HammerZe
2022/05/11
1.2K0
BeautifulSoup4库
第二周实战作业:爬取一万商品数据
由于没有开time.sleep所以会被反扒, 卡死之后一般用ctrl+c停止那个类目爬取……
radaren
2018/08/28
4080
第二周实战作业:爬取一万商品数据
我的Python爬虫代码示例(一)
从链家网站爬虫石家庄符合条件的房源信息,并保存到文件,房源信息包括名称、建筑面积、总价、所在区域、套内面积等。其中所在区域、套内面积需要在详情页获取计算。
全栈程序员站长
2022/06/26
4990
Python爬虫(三):BeautifulSoup库
BeautifulSoup 是一个可以从 HTML 或 XML 文件中提取数据的 Python 库,它能够将 HTML 或 XML 转化为可定位的树形结构,并提供了导航、查找、修改功能,它会自动将输入文档转换为 Unicode 编码,输出文档转换为 UTF-8 编码。
Python小二
2020/08/18
1.6K0
Python爬虫——Beautiful Soup
Beautiful Soup是Python处理HTML或XML的解析库,使用Beautiful Soup需要安装Beautiful Soup库和lxml的库 Beautiful Soup官方下载地址
羊羽shine
2019/05/28
5510
【python爬虫保姆级教学】urllib的使用以及页面解析
pip install bs4 -i https://pypi.douban.com/simple
查理不是猹
2021/12/12
1.4K0
【python爬虫保姆级教学】urllib的使用以及页面解析
python3 爬虫笔记(一)beaut
用于请求的urllib(python3)和request基本库,xpath,beautiful soup,pyquery这样的解析库。其中xpath中用到大量的正则表示式,对于新手来说,写正则很容易出错,在这里,从beautiful soup开始说。
py3study
2020/01/19
5210
Python爬虫库-Beautiful Soup的使用
Beautiful Soup是一个可以从HTML或XML文件中提取数据的Python库,简单来说,它能将HTML的标签文件解析成树形结构,然后方便地获取到指定标签的对应属性。
IT派
2018/07/30
1.8K0
Python爬虫库-Beautiful Soup的使用
​Python爬虫-BeautifulSoup详解
上一节我们已经可以获取到网页内容,但是获取到的却是一长串的 html 代码,并不是我们想要的数据。那这一节,我们就来看看怎么去解析这些网页,轻松的拿到我们想要的数据。
小一不二三
2019/12/31
1.6K0
​Python爬虫-BeautifulSoup详解
Python 页面解析:Beautiful Soup库的使用
✅作者简介:人工智能专业本科在读,喜欢计算机与编程,写博客记录自己的学习历程。 🍎个人主页:小嗷犬的博客 🍊个人信条:为天地立心,为生民立命,为往圣继绝学,为万世开太平。 🥭本文内容:Python 页面解析:Beautiful Soup库的使用 ---- Python 页面解析:Beautiful Soup库的使用 1.Beautiful Soup库简介 2.Beautiful Soup库方法介绍 2.1 find_all() 2.2 find() 2.3 select() 3.代码实例 --
小嗷犬
2022/11/15
1.8K0
基于深度强化学习的股票交易策略框架(代码+文档)
深度强化学习(DRL)已被公认为量化投资中的一种有效方法,因此获得实际操作经验对初学者很有吸引力。然而,为了培养一个实用的DRL 交易agent,决定在哪里交易,以什么价格交易,以及交易的数量,会涉及非常多的内容和前期具有挑战性的开发和测试。
量化投资与机器学习微信公众号
2020/12/08
10K108
基于深度强化学习的股票交易策略框架(代码+文档)
python︱HTML网页解析BeautifulSoup学习笔记
一、载入html页面信息 一种是网站在线的网页、一种是下载下来的静态网页。 1、在线网页 参考《python用BeautifulSoup库简单爬虫入门+案例(爬取妹子图)》中的载入内容: import
悟乙己
2018/01/02
3.3K0
相关推荐
Python在Finance上的应用6 :获取是S&P 500的成分股股票数据
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验