Python爬虫之获取虎扑网球员得分数据

文章目录

  • 1、前言
  • 2、网站分析
  • 3、代码编写
  • 4、完整代码

1、前言

  目前我的爬虫系列更新到了正则表达式,我们就可以用请求库+正则表达式爬取一些简单的页面了。因为我个人非常喜欢打篮球,所以就选取了虎扑网作为爬取对象。当然,这只是一个入门级案例,后面会再写一篇使用解析库的方式爬取虎扑网数据。

2、网站分析

  想要爬取一个网站的数据,就一定要分析该网站的网页源代码。此时,通过浏览器登录虎扑网,点开NBA得分榜,完整网址为:虎扑网NBA得分榜。
  目前得分榜第一位是马赛克队后卫,整个得分榜共有5页,237名球员。
Python爬虫之获取虎扑网球员得分数据_第1张图片
  通过点击第二页,第三页可以分析得知网址的构成为:https://nba.hupu.com/stats/players/pts/2、https://nba.hupu.com/stats/players/pts/3,变化的只有最后的页数,所以可以通过字符串拼接构造网址。然后点击f12查看源代码,发现球员数据均在一个类名为players_table的表格中,球员数据都在每一个tr中,但是由于第一行是行头,不需要爬进去,所以要注意把这一行排出去。
Python爬虫之获取虎扑网球员得分数据_第2张图片

3、代码编写

首先,定义一个获取HTML的方法

def getHtml(pageNum):
    '''
    传入参数页数,获得该链接的HTML内容
    :param pageNum: 页数
    :return: HTML内容
    '''
    url = "https://nba.hupu.com/stats/players/pts/" + str(pageNum)
    response = requests.get(url=url)
    if response.status_code == 200:
        return response.text
    else:
        return None

其次,定义正则表达式,使用re库的findall()获取所有符合正则表达式的内容

def getData():
    pointList = []  # 定义一个列表存储数据
    regExp = '.*?(.*?).*?(.*?).*?"bg_b">(.*?)<.*?'# 定义一个正则表达式,获取球员名称,球队和得分数据
    for i in range(1,6):
        html = getHtml(i)
        # print(html)
        results = re.findall(regExp,html,re.S)
        for result in results:
            pointList.append(result)
    return pointList

输出结果为:
Python爬虫之获取虎扑网球员得分数据_第3张图片

4、完整代码

import re
import requests

def getHtml(pageNum):
    '''
    传入参数页数,获得该链接的HTML内容
    :param pageNum: 页数
    :return: HTML内容
    '''
    url = "https://nba.hupu.com/stats/players/pts/" + str(pageNum)
    response = requests.get(url=url)
    if response.status_code == 200:
        return response.text
    else:
        return None

def getData():
    pointList = []  # 定义一个列表存储数据
    regExp = '.*?(.*?).*?(.*?).*?"bg_b">(.*?)<.*?'# 定义一个正则表达式,获取球员名称,球队和得分数据
    for i in range(1,6):
        html = getHtml(i)
        # print(html)
        results = re.findall(regExp,html,re.S)
        for result in results:
            pointList.append(result)
    return pointList

if __name__ == '__main__':
    pointList = getData()
    for list in pointList:
        print(list)

有错误的地方敬请指出!觉得写得可以的话麻烦给个赞!欢迎大家评论区或者私信交流!

你可能感兴趣的:(Python爬虫)