BS4 抓取隐藏内容

BS4 Scraping Hidden Content

我已经坚持了一段时间...我正在尝试从该站点抓取玩家名称和投影:https://www.fantasysportsco.com/Projections/Sport/MLB/Site/DraftKings/PID/793

脚本将通过遍历一个范围内的所有 PID 来循环过去,但这不是问题所在。主要问题是当我检查元素时我发现值存储在这个 class:

<div class="salarybox expanded"...

它位于我的 projectionsView 列表的第 5 个位置。

抓取工具发现 projectionsView class 没问题,但在其中找不到任何内容。

当我查看网站的实际 HTML 时,似乎其中不存在此内容..

<div id="salData" class="projectionsView">
    <!-- Fill in with Salary Data -->
</div>

我对抓取非常陌生,并且已经成功抓取了我的项目所需的所有其他内容,只是不是这个该死的网站...我想这可能是因为我必须注册该网站?但是无论哪种方式,信息都可以在不登录的情况下查看,所以我认为我不需要使用 Selenium,即使我这样做也找不到它,我不认为。

无论如何,这是我目前的代码,显然返回了一个空白列表。

from bs4 import BeautifulSoup as soup
from urllib.request import urlopen as uReq
import pandas as pd 
import os


url = "https://www.fantasysportsco.com/Projections/Sport/MLB/Site/DraftKings/PID/793"

uClient = uReq(url)
page_read = uClient.read()
uClient.close()

page_soup = soup(page_read, "html.parser")
salarybox = page_soup.findAll("div",{"class":"projectionsView"})
print(salarybox[4].findAll("div",{"class":"salarybox expanded"}))

如有任何想法,我们将不胜感激!

脚本的整体思路是在每个页面上找到每个 "salarybox expanded" class 的 ppText。我只想知道如何找到这些元素。也许是不同的解析器?

根据您的 url 页面,<div id="salData" class="projectionsView"> 由 javascript 重写,但 urllib.request 将在 运行 之前获得完整响应您的回调,这意味着 javascript 生成的内容将不在响应中。因此 div 将为空:

<div id="salData" class="projectionsView">
    <!-- Fill in with Salary Data -->
</div>

你最好尝试使用 selenium and splash 将适用于这种动态网站。

顺便说一句,在你得到正确的回应后,你 select div by id,它会更具体:

salarybox = page_soup.find("div",{"id":"salData"})