Skip to content

查询某网站某数据的简单实现

Published:

今天美国大选,为了实时获取懂王和睡王的选票数量,我决定写一个简单的 Python 爬虫。

用 Python 获取某新闻网站选票数据

这里要用到 requests 和 bs4 包,具体代码如下:

import requests
from bs4 import BeautifulSoup

# 获取该网站 html 的字节码
r = requests.get("https://www.foxnews.com/elections/2020/general-results")
text = r.text	# bytes->str

# 用 BeautifulSoup 把该 html 文本转变为复杂的树型结构,便于后续提取特定网页元素
soup = BeautifulSoup(text, "html.parser")

# 获取选票数据,这里需要在浏览器中审查元素,使用目标数据的具体 class 等信息进行提取
biden = soup.select('.count')[0].text
trump = soup.select('.count')[1].text

print("当前选票 拜登 " + biden + ' : 川普 ' + trump)

使用 Alfred workflow 快捷运行并获取结果

macOS 上的著名的小黑帽——Alfred,前两天才开始使用。

同类型的还有国产的 utools,UI 更美观,已提供的功能插件也很丰富,但是开发插件需要前端知识,不太适合我这种前端小白。

workflow:

使用 Server 酱 实现微信服务号通知

1、打开网站 Server 酱,使用 Github 进行注册。

2、绑定自己的微信账号。

3、查看自己的 SCKey。

用 Server 酱 实现通知也很简单,只需要执行以代码即可:

requests.get("https://sc.ftqq.com/[你自己的SCkey].send?text=[blablablabla]")

Server 酱可以接受两个参数:

把要推送的信息放在 text 或者 desp 里即可。

腾讯云函数实现定时查询和变动提醒(失败尝试)

上面的部分仅能够快速执行代码并获取通知,每隔一会儿我就试一次,在接受过好多次「拜登 238:川普 213」之后,我决定让它每五分钟爬一次,数据有变化再提醒我。

有以下几种选择:

我采用了腾讯云函数,看了看每日免费调用次数是妥妥的够用。

(一直在用腾讯云函数进行每日的 WPS 自动签到)

下面是完整的云函数文件:

# -*- coding: utf8 -*-
import requests
from bs4 import BeautifulSoup

def main_handler(arg1,arg2):
    r = requests.get("https://www.foxnews.com/elections/2020/general-results")
    text = r.text
    soup = BeautifulSoup(text, "html.parser")
    biden = soup.select('.count')[0].text
    trump = soup.select('.count')[1].text
    b = 0
    t = 0
    with open('data.txt', 'r') as f:
        for line in f.readlines():
            line = line.split(' ')
            b = int(line[0])
            t = int(line[1])
    if b != biden or t != trump:
        txt = "https://sc.ftqq.com/[我的SCKey].send?text=拜登" + biden + "川普" + trump
        requests.get(txt)
        with open('data.txt','w') as f:
            f.write(str(biden) + ' ' + str(trump))
        return "yes"
    else:
        return "no"

1、使用一个 data.txt 保存数据,只有发现数据更新时才会调用 Server 酱推送提醒。

2、腾讯云函数内置了 requests 包,但没有 bs4 包,需要自己生成本地文件打包上传。

测试代码时报错,发现 data.txt 文件为只读。

到这里才发现一个重大问题:腾讯云函数环境内部没有可以长期存储的可读写空间!!

查了一下官方文档:

Q:环境内有可写空间吗?

A:有。云函数在执行过程中,都拥有一块 500MB 的临时磁盘空间 /tmp,用户可以在执行代码时对该空间进行一些读写操作,也可以创建子目录,但这部分数据在函数执行完成后不会保留。

而后我又尝试了同类产品阿里函数计算,依然不允许对文件进行写操作。

基本上要放弃了。

发现可以通过七牛云的对象存储进行「曲线救国」(真折腾人啊)。

有空了试一试。(为什么云函数这么多限制啊……还是自己的服务器好)