python爬虫之使用BeautifulSoup模块抓取500彩票网竞彩足球赛果及赔率

前言

竞彩足球是目前比较受欢迎的一种体彩彩种,玩法较为灵活多样,赔率可观,今天就来记录一下如何抓取竞彩足球的开奖信息和赔率。

分析思路

我使用的网站为500彩票,我们以2021年6月9日的比赛结果为例,该天的比赛结果地址为https://trade.500.com/jczq/?date=2021-06-09,打开网页右键对第一场比赛结果进行审查元素操作,发现比赛的信息和结果储存在tbody下的tr class="bet-tb-tr bet-tb-end"中,那接下来我们对每一场比赛的tr进行分析。在这里插入图片描述
打开第一个tr我们发现所有的内容均储存在class名称不同的td当中,比如开赛时间就储存在td class="td td-endtime"当中,而赔率则储存在td class="td td-betbtn"下的p标签下的span标签当中,我们所需的数据的储存结构和位置都弄清楚以后下一步就简单了。
我们就可以使用BeautifulSoup的find_all方法获取所有的tr标签下的td标签,然后可以根据td的索引和class的名称获取到对应标签的文本内容。赔率的话可以在储存赔率的td标签下获取获取span标签即可得到所有的赔率,其他的内容基本都是这个思路只是层数和标签名称不同而已,具体获取方式有很多种,大家可以灵活使用,这里就不一一列举了。
在这里插入图片描述

数据储存

数据的储存我使用的是pandas模块,获取的到数据首先临时储存在字典中,接着将字典转换为pandas的DataFrame数据类型,最后使用merge进行合并和储存为xlsx文件。
数据储存这个部分应该有更加高明和简便的方法,但是本人对于pandas模块还只是一个初学者,所以过程比较繁琐,欢迎各位指教!

代码

BeautifulSoup模块抓取竞彩足球代码:

#!user/bin/env python
#_*_ coding:utf-8 _*_
#_*_ author:taojinwen _*_
import requests,time
from bs4 import BeautifulSoup
import pandas as pd
url = 'https://trade.500.com/jczq/?date=2021-06-09'
header = {
"User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36"
        }
respones = requests.get(url,headers = header)
content = respones.content.decode('gbk')
soup = BeautifulSoup(respones.text,'lxml')
trs = soup.find_all('tr',class_="bet-tb-tr")
index = []
#columns = ['让球','胜','平','负']
data = {'让球':'','胜':'','平':'','负':''}
title = {'编号':'','赛事':'','开赛时间':'','主队 VS 客队':'','百家平均':''}
serial_numbers = []
game_names = []
game_times = []
team_names = []
victory = []
flat = []
defeat = []
for tr in trs:
    tds = tr.find_all('td')
    #编号':'','赛事':'','开赛时间':'','主队 VS 客队
    #每次增加一个空值是为了后期方便合并
    serial_number = tds[0].text.strip('\n')
    serial_numbers.extend((serial_number,''))
    game_name = tds[1].text.strip('\n')
    game_names.extend((game_name,''))
    game_time = tds[2].text
    game_times.extend((game_time,''))
    team_name = tds[3].text.replace('\n','')
    team_names.extend((team_name,''))
    #让球
    p = tds[4].find_all('p')
    p1 = p[0].text
    p2 = p[1].text
    index.extend((p1,p2))
    #赔率
    span = tds[5].find_all('span')
    if len(span) == 6:
        #同时加载多个元素到列表
        victory.extend((span[0].text,span[3].text))
        flat.extend((span[1].text,span[4].text))
        defeat.extend((span[2].text,span[5].text))
    else:
        victory.extend(('未开售', span[0].text))
        flat.extend(('未开售', span[1].text))
        defeat.extend(('未开售', span[2].text))
data['让球'] = index
data['胜'] = victory
data['平'] = flat
data['负'] = defeat
title['编号'] = serial_numbers
title['赛事'] = game_names
title['开赛时间'] = game_times
title['主队 VS 客队'] = team_names
df1 = pd.DataFrame(data)
df2 = pd.DataFrame(title)
now = time.time()
ls = time.localtime(now)
time = str(ls.tm_mon)+'_'+str(ls.tm_mday)+'_'+str(ls.tm_hour)+'_'+str(ls.tm_min)+'_'+str(ls.tm_sec)
df = pd.merge(df2,df1,how="inner",left_index=True,right_index=True)
df.to_excel('table{}.xlsx'.format(time))

结果展示

最终在excel表里面看起来不是很美观,细节方面还需进行美化,凑合着先看一下吧!
在这里插入图片描述

结语

如果想抓取多天比赛结果的朋友,可以分析每天赛果url的变化规律,在外面增加一个循环逐天进行抓取!最后欢迎大家在评论区不吝赐教,谢谢!

  • 3
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值