1 Python爬取直播吧首页重要赛事赛程信息

最近想做一个每日邮件提醒功能,包括提醒自己每天的天气以及每天的体育赛事,防止因为自己事情多忘记了一些重要的赛事,直播吧每天都更新了重要的赛程信息,如下

Python – 爬取直播吧首页重要赛事赛程信息-StubbornHuang Blog

我希望爬取直播吧首页重要的赛事信息,使用最简单的requests+BeautifulSoup的方案,做了简单的随机User-Agent混淆,爬取的代码如下

import requests
from random import choice
from bs4 import BeautifulSoup

UserAgents = [
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:71.0) Gecko/20100101 Firefox/71.0"
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36",
    "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36 *OPR*/44.0.2510.1218",
    "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.57.2 (KHTML, like Gecko) Version/5.1.7 Safari/534.57.2",
    "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36",
    "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36",
    "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.108 Safari/537.36 *2345Explorer*/8.4.1.14855",
    "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36 *JuziBrowser*",
    "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 *LBBROWSER*",
    "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.104 Safari/537.36 Core/1.53.2441.400 *QQBrowser*/9.5.10632.400",
    "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.221 Safari/537.36 SE 2.X *MetaSr* 1.0",
    "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) *Maxthon*/5.0.2.2000 Chrome/47.0.2526.73 Safari/537.36",
    "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 *UBrowser*/6.1.2107.204 Safari/537.36",
    "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 *BIDUBrowser*/8.4 Safari/537.36",
    "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36 *TheWorld* 7",
    "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 *YaBrowser*/17.3.1.840 *Yowser*/2.5 Safari/537.36",
    "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.63 Safari/537.36 *Qiyu*/2.1.0.0",
    "Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_3_3 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5",
    'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.80 Safari/537.36 Edg/98.0.1108.42'
]


class ZBB:
    def __init__(self):
        self.url = "https://www.zhibo8.cc/"


    def get_zbb_sports_schedule(self):
        request_headers = {
            'User-Agent': choice(UserAgents)
        }

        res = requests.get(url=self.url, headers=request_headers)
        res.encoding = 'utf-8'
        soup = BeautifulSoup(res.text, 'html.parser')
        schedule_container = soup.find("div", class_="schedule_container left")
        boxs = schedule_container.find_all("div", class_="box")

        for box in boxs:
            data_str = box.find("div", class_="titlebar").text.replace("\n", "")

            print(data_str)

            ul = box.find("div", "content").find_all("li")
            for li in ul:
                data_time_str = li.find(text=True, recursive=False)
                sports_schedule_str = li.find("b").text.replace("   ","")
                print('{0} {1}'.format(data_time_str,sports_schedule_str))

if __name__ == '__main__':
    zbb = ZBB()
    zbb.get_zbb_sports_schedule()

部分结果

11月23日 星期三
15:00  王者荣耀世冠杯外卡赛 TFB-BAC
15:45  王者荣耀世冠杯外卡赛 SZ-BOX
16:30  王者荣耀世冠杯外卡赛 TRB-TFB
17:15  王者荣耀世冠杯外卡赛 GEN-BOX
18:00  世界杯小组赛F组第1轮 摩洛哥-克罗地亚
18:00  王者荣耀世冠杯外卡赛 SZ-BAC
18:00  斯诺克德国大师赛资格赛Day3
18:45  王者荣耀世冠杯外卡赛 TQ-TRB
19:30  王者荣耀世冠杯外卡赛 GEN-TFB
20:15  王者荣耀世冠杯外卡赛 IMP-BAC
21:00  世界杯小组赛E组第1轮 德国-日本
21:00  王者荣耀世冠杯外卡赛 GEN-TQ
21:45  王者荣耀世冠杯外卡赛 IMP-TRB
22:30  斯诺克德国大师赛资格赛 格雷斯-颜丙涛
11月24日 星期四
00:00  世界杯小组赛E组第1轮 西班牙-哥斯达黎加
03:00  世界杯小组赛F组第1轮 比利时-加拿大
08:00  NBA常规赛 76人-黄蜂
08:00  NBA常规赛 开拓者-骑士
08:00  NBA常规赛 森林狼-步行者
08:30  NBA常规赛 国王-老鹰
08:30  NBA常规赛 独行侠-凯尔特人
08:30  NBA常规赛 奇才-热火
08:30  NBA常规赛 篮网-猛龙
09:00  NBA常规赛 公牛-雄鹿
09:00  NBA常规赛 掘金-雷霆
09:00  NBA常规赛 鹈鹕-马刺
10:00  NBA常规赛 活塞-爵士
11:00  NBA常规赛 快船-勇士
12:00  鏖战世界波第5期 鏖战世界波-第5期
15:00  王者荣耀世冠杯外卡赛 BAC-BOX
15:45  王者荣耀世冠杯外卡赛 SZ-TFB
16:30  王者荣耀世冠杯外卡赛 TQ-BOX
17:15  王者荣耀世冠杯外卡赛 GEN-BAC
18:00  世界杯小组赛G组第1轮 瑞士-喀麦隆
18:00  王者荣耀世冠杯外卡赛 TQ-TFB
18:00  斯诺克德国大师赛资格赛Day4
18:00  斯诺克德国大师赛资格赛 乔丹-布朗-丁俊晖
18:30  NBL(A)常规赛 珀斯野猫-阿德莱德36人
18:45  王者荣耀世冠杯外卡赛 IMP-SZ
19:30  王者荣耀世冠杯外卡赛 TRB-BOX
20:15  王者荣耀世冠杯外卡赛 IMP-GEN
20:30  足球友谊赛 狮城水手-多特蒙德
21:00  世界杯小组赛H组第1轮 乌拉圭-韩国
21:00  王者荣耀世冠杯外卡赛 SZ-TRB
11月25日 星期五
00:00  世界杯小组赛H组第1轮 葡萄牙-加纳
03:00  世界杯小组赛G组第1轮 巴西-塞尔维亚
09:20  NFL常规赛 爱国者-维京人
......

然后将这个模块加入到我的每日清晨的定时邮件发送中去,那么起床的第一时间以及在通行时就可以通过阅读邮件来看今天有什么比较重要的体育赛事了,完结撒花!