利用 python 脚本爬虫获取有效的数字货币价格信息,并通过 telegram 控制其 行为。

介绍下 python 脚本爬虫经常使用的库和如何快速构建 Python 爬虫。本篇会讲一个 比较实用的爬虫例子:加密数字货币价格监控爬虫和动态价格推送实现,最终用户可以自己 在telegram通过交互的方式获取自己关系的货币价格。

bot

需要使用的工具:

  1. 国外一台 VPS 服务器(国内需要使用代理)
  2. 一台可以安装 telegram 的设备(手机最好,方便实时查询)

系统结构

arch

  1. 用户通过 telegram bot 触发了请求查询当前价格事件
  2. telegram 服务端通过监控得到事件,触发相应的爬虫获取价格信息
  3. step 2 上依赖于 VPS 上面提前写好的爬虫
  4. 爬虫去非小号官网爬取当前的货币价格
  5. 将价格解析后通过 telegram api 返回用户的终端

非小号爬虫

需要使用的工具是:

用到的代码:

# -*- coding: utf-8 -*-

from concurrent.futures import ThreadPoolExecutor
from concurrent.futures import as_completed

from requests_html import HTMLSession
session = HTMLSession()

## 需要抓取的货币价格
## https://www.feixiaohao.com/currencies/cybermiles/
coins = [
    "cybermiles",
    "decent"
]


## 获取单个货币价格
def get_price(coin_type):
    result = session.get("https://www.feixiaohao.com/currencies/{0}/".format(coin_type), verify=False, timeout=3)
    if result:
        return (coin_type, result.html.find(".val.textGreen")[0].text, result.html.find("div.sub.smallfont > span:nth-child(1)")[0].text)
    return None

## 通过多线程并行获取多个货币价格
## 加速优化
def get_price_li():
    executor = ThreadPoolExecutor(10)
    futures = [executor.submit(get_price, coin) for coin in coins]
    prices = []
    for r in as_completed(futures):
        if r.result():
            prices.append(r.result())
    return prices


if __name__ == "__main__":
    print(get_price_li())
  1. 需要首先登陆非小号官方
  2. 搜索自己感兴趣的货币,进入货币主页
  3. 拷贝类似url: https://www.feixiaohao.com/currencies/binance-coin/,将 binance-coin 填入上面的coins列表中
  4. 上面的脚本会自动抓取列表中所有的货币价格和24h的价格浮动情况

上面获取数字货币价格时候使用的是 CSS Selector, 常见的还可以使用 XPath,但是这个规则都不需要配置,可以通过浏览器工具获得,具体的方法是:

  1. 打开浏览器调试模式
  2. 通过鼠标选择自己感兴趣的数据
  3. 反键审查元素

对着控制台中的元素点击反键可以获取到下面的菜单: copy -> [copy css selector | copy xpath]

inspect

具体的参考资料:

Telegram Bot 申请

telegram的 bot 申请,需要关注BotFather:

  1. 打开BotFather
  2. 发送消息/newbot
  3. 根据步骤完成接下来的表单输入
  4. 获取 API Token

如果不清楚可以参考:如何创建bot?

部署 Bot 管理程序

  1. 克隆项目 https://github.com/botsonar/feixiaohao.git
  2. 按照项目说明,在 VPS 安装相应的环境
  3. 在 main.py 中替换自己的 API Token
  4. 运行项目 (python main.py >/tmp/tgbot.log 2>&1 &)

调试

接下来所有的东西都运行完成了,下面来检查下成果:

  1. 打开手机的 telegram
  2. 搜索自己的机器人名称
  3. 点击 /start
  4. 输入 /greeting
  5. 确认响应(如果响应不正确,需要排查 VPS 上面的日志 /tmp/tgbot.log)
  6. 输入 /coins 获取自己关心的货币价格

如果需要定制更多的机器人功能,需要学习一下项目:

总结

本篇主要介绍了如何使用 Python 和浏览器迅速搭建爬虫,另外结合了 TG 服务器推送获取爬虫的结果信息。

下篇将会介绍如何快速搭建分布式爬虫。

本文链接: