我无法在站点的源代码中发现某些元素
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'))
我试图抓取该网站以获取玩家数据。
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'))