使用bs4 python进行网页抓取:如何显示足球比赛

阿卜杜尔

我是Python的初学者,正在尝试创建一个程序,该程序将从skysports.com抓取足球/足球赛程表,并将其通过短信通过Twilio发送到我的手机中。我已经排除了SMS代码,因为我已经弄清楚了,所以这是到目前为止我一直使用的Web抓取代码:

import requests
from bs4 import BeautifulSoup

URL = "https://www.skysports.com/football-fixtures"
page = requests.get(URL)

results = BeautifulSoup(page.content, "html.parser")

d = defaultdict(list)

comp = results.find('h5', {"class": "fixres__header3"})
team1 = results.find('span', {"class": "matches__item-col matches__participant matches__participant--side1"})
date = results.find('span', {"class": "matches__date"})
team2 = results.find('span', {"class": "matches__item-col matches__participant matches__participant--side2"})

for ind in range(len(d)):
    d['comp'].append(comp[ind].text)
    d['team1'].append(team1[ind].text)
    d['date'].append(date[ind].text)
    d['team2'].append(team2[ind].text) 
小岛

下面的内容应该可以帮助您解决问题:

   from bs4 import BeautifulSoup
   import requests
    
    a = requests.get('https://www.skysports.com/football-fixtures')
    soup = BeautifulSoup(a.text,features="html.parser")
    
    teams = []
    for date in soup.find_all(class_="fixres__header2"): # searching in that date
        for i in soup.find_all(class_="swap-text--bp30")[1:]: #skips the first one because that's a heading
            teams.append(i.text)
    
    date = soup.find(class_="fixres__header2").text
    print(date)
    teams = [i.strip('\n') for i in teams]
    for x in range(0,len(teams),2):
        print (teams[x]+" vs "+ teams[x+1])

让我进一步解释一下我所做的事情:所有足球都有这个类名-swap-text--bp30 在此处输入图片说明

因此,我们可以使用find_all提取具有该名称的所有类。

获得结果后,我们可以将它们放入数组“ teams = []”,然后将其追加到for循环“ team.append(i.text)”中。“ .text”去除html

然后,我们可以通过剥离并删除数组中的每个字符串以两个两个的方式来摆脱数组中的“ \ n”。这应该是您的最终输出:

在此处输入图片说明

编辑:要刮擦联赛的头衔,我们将做几乎相同的事情:

league = []
for date in soup.find_all(class_="fixres__header2"): # searching in that date
    for i in soup.find_all(class_="fixres__header3"): #skips the first one because that's a heading
        league.append(i.text)

剥离阵列并创建另一个阵列:

league = [i.strip('\n') for i in league]
final = []

然后添加最后的代码,这基本上只是打印联赛,然后是两队一遍又一遍:

for x in range(0,len(teams),5):
    final.append(teams[x]+" vs "+ teams[x+1])

for i in league:
    print(i)
    for i in final:
        print(i)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章