我无法在站点的源代码中发现某些元素

I can't spot some of the elements in the site's source code

我试图抓取该网站以获取玩家数据。

https://mystics.wnba.com/roster/

我查看了使用 'Inspect' 的代码,但主要的 table 不在源代码中。例如,这是第一个玩家姓名的代码:

<div class="content-table__player-name">
                            <a ng-href="https://www.wnba.com/player/ariel-atkins/" target="_self" href="https://www.wnba.com/player/ariel-atkins/">Ariel Atkins</a>
                        </div>

我在页面源代码中找不到这段代码(或播放器数据的任何代码)。我在源代码中搜索了大部分 table 的 div,但我找不到任何一个。

内容是动态生成的,使用了一些JavaScript。要获得您想要的数据,您的程序需要能够 运行 并解释 JavaScript。您可以使用 Selenium 或 Chrome 的无头模式等工具从 运行ning 浏览器中提取 DOM。

在 Firefox 中,您可以按 F12 检查由 JavaScript 代码生成的 DOM。在那里,您可以找到所需的条目。您还可以检查“网络”选项卡,它会显示站点发送到服务器的请求。您或许能够确定 return 您想要的结果的请求。

以下是使用请求模块访问内容的方法。

import requests

link = 'https://data.wnba.com/data/5s/v2015/json/mobile_teams/wnba/2021/teams/mystics_roster.json'

with requests.Session() as s:
    s.headers['User-Agent'] = 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.104 Safari/537.36'
    res = s.get(link)
    for item in res.json()['t']['pl']:
        print(item['fn'],item['ln'])

输出:

Leilani Mitchell
Shavonte Zellous
Tina Charles
Elena Delle Donne
Theresa Plaisance
Natasha Cloud
Shatori Walker-Kimbrough
Sydney Wiese
Erica McCall
Ariel Atkins
Myisha Hines-Allen
Megan Gustafson

因为标签包含 scrapy。所以,这是一个使用 scrapy 的解决方案。

import scrapy
import json

class Test(scrapy.Spider):
    name = 'test'
    start_urls = ['https://data.wnba.com/data/5s/v2015/json/mobile_teams/wnba/2021/teams/mystics_roster.json']

    def parse(self, response):
        data = json.loads(response.body)
        data = data.get('t').get('pl')

        for player in data:
            print(player.get('fn'),player.get('ln'))