三秒钟,我要拿到世界杯所有队伍阵容信息

专栏
Python零基础入门篇🔥
Python网络蜘蛛🔥
Python数据分析
Django基础入门宝典🔥
小玩意儿🔥
Web前端学习
tkinter学习笔记
Excel自动化处理

🕐I’m coming~

若有文章有错误,请在评论区中说出来哦,非常感谢✌️


许久不见,甚是想念呐❗️
偷点闲时时光敲敲代码,写写文章,偷偷更新《小玩意儿》专栏的文章。有一段时间没有写博客了,今日偷得闲时,敲下这篇文章,颇有些神清气爽、怡然自得、心情舒畅、高高兴兴……,好了,编不下去了😆
大家都知道,学期末是大学牲最忙的时候,都忙着复习(预习),这段期间,起早贪黑,三更灯火五更鸡,正是……,总而言之,为了通过(应付)考试,我们很是努力呐,恨不得将时间掰成两半,一半用来复习,另一半也用来复习……,以上是本博主近段没有更近文章的主要原因😭
在这里插入图片描述
现在,趁着时间没注意,偷偷拿一点来用,等会它发现了就得逼着睡觉了,所以我得赶紧敲完这篇文章,好了,言归正传,请各位兄弟姐妹往下瞧瞧👀

🕑我写了个啥?


这次的代码主要实现的是获取2022卡尔塔世界杯⚽️中所有队伍的阵容信息,其中包括各个队伍里的门将、后卫、前锋、中场的对应球员名字信息,然后将信息整理分析,保存到excel表格中展示。也算是给各位爱看球的一个小小福利😜

🕔咋写的?


目标网站👉2022卡尔塔世界杯各队阵容
在这里插入图片描述

👉网页分析和爬取思路:通过分析网页,可以观察到所有信息都放在p标签中,所以通过requests模块爬取信息,最后将数据进行清洗(考验代码逻辑的时候到了😬),获取我们想要的数据。数据获取成功后便可使用openpyxl模块将信息写入excel表格

咱就是说敲完代码之后,这信息嗖的一下,简直就是,一下,就好,结果如下图所示👇
在这里插入图片描述

🕘代码供上


import requests
from lxml import etree
import openpyxl
from openpyxl.styles import Side, Font, Alignment, Border, PatternFill


# 获取各个国家足球队信息
def get_info():
    url = 'http://4p3.cn/article/73925.html'
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36'
    }
    res = requests.get(url, headers=headers)
    html = etree.HTML(res.content.decode('utf-8'))
    info = html.xpath('//dd[@id="pagecontent"]/p/text()')[2:]
    return info


# 保存文件
def save_info(info):
    f = openpyxl.Workbook()
    sheet = f.create_sheet('2022世界杯')
    # 设置列宽
    sheet.column_dimensions['A'].width = 52
    sheet.column_dimensions['B'].width = 52
    sheet.column_dimensions['C'].width = 52
    sheet.column_dimensions['D'].width = 52

    for i in range(len(info)):

        if '国家队' in info[i]:
            max_row = sheet.max_row + 1     # 获取最大行数

            # 设置标题表格样式
            for k in sheet[f'A{max_row}:D{max_row}']:
                for j in k:
                    j.alignment = algn
                    j.border = border
                    j.font = font_title
                    j.fill = pattren_fill

            # 合并单元格
            sheet.merge_cells(f'A{max_row}:D{max_row}')
            # 写上标题并设置行高
            sheet.cell(max_row, 1).value = info[i][:-1] + '(' + info[i+1] + ')'
            sheet.row_dimensions[max_row].height = 30

            # 写上球员类型
            for k in sheet[f'A{max_row + 1}:D{max_row + 1}']:
                for j in k:
                    j.alignment = algn
                    j.border = border
                    j.font = font2
                    j.fill = pattren_fill1
            type1 = ['门将', '后卫', '中场', '前锋']
            # 设置行高
            sheet.row_dimensions[max_row+1].height = 20
            for k in range(len(type1)):
                sheet.cell(max_row+1, k+1).value = type1[k]

            # 获取门将中的球员
            goalkeeper = info[i+2].split(':')[1].split('、' if ',' not in info[i+2] else ',')
            # 获取后卫中的球员
            rear_guard = info[i+3].split(':')[1].split('、' if ',' not in info[i+2] else ',')
            # 获取中场的球员
            midfield = info[i+4].split(':')[1].split('、' if ',' not in info[i+2] else ',')
            # 获取前锋的球员
            vanguard = info[i+5].split(':')[1].split('、' if ',' not in info[i+2] else ',')

            # 取出不同类型的球员人数
            max_people = max([len(goalkeeper), len(rear_guard), len(midfield), len(vanguard)])

            for k in sheet[f'A{max_row + 2}:D{max_row + 2 + max_people}']:
                for j in k:
                    j.alignment = algn
                    j.border = border
                    j.font = font

            # 将球员信息写入表格
            for k in range(len(goalkeeper)):
                sheet.cell(max_row+2+k, 1).value = goalkeeper[k]
            for k in range(len(rear_guard)):
                sheet.cell(max_row+2+k, 2).value = rear_guard[k]
            for k in range(len(midfield)):
                sheet.cell(max_row+2+k, 3).value = midfield[k]
            for k in range(len(vanguard)):
                sheet.cell(max_row+2+k, 4).value = vanguard[k]

    f.save('2022世界杯球队信息.xlsx')


if __name__ == '__main__':
    # 设置字体的样式
    algn = Alignment(vertical='center', horizontal='center')
    side = Side(style='thin', color='000000')
    border = Border(right=side, left=side, top=side, bottom=side)

    # 球员字体
    font = Font(name='宋体', size=12)
    # 球员类型字体
    font2 = Font(name='宋体', size=14)
    # 标题的字体
    font_title = Font(name='宋体', size=16, color='ff0000', bold=True)
    # 表格填充——黄色
    pattren_fill = PatternFill(fill_type='solid', fgColor='ffff00')
    # 表格填充——绿色
    pattren_fill1 = PatternFill(fill_type='solid', fgColor='AACF91')

    info = get_info()
    save_info(info)

🕛 See you next time

好了,今天就敲到这咯~
如果喜欢这篇文章,记得 点赞👍 收藏🌈 再来一个小小的关注哦💖
你们的支持就是我前进的最大动力💪
咱们下次再见👀
peace~

  • 6
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

街 三 仔

你的鼓励是我创作的最大动力~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值