python - BS4 抓取隐藏内容

标签 python html pandas selenium beautifulsoup

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

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

<div class="salarybox expanded"...

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

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

当我查看网站的实际 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”类的 ppText。我只想知道如何找到这些元素。也许是不同的解析器?

最佳答案

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

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

你最好试试seleniumsplash将适用于这种动态网站。

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

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

关于python - BS4 抓取隐藏内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44072205/

相关文章:

python - 匹配 Python 正则表达式中的\[\]

html - CSS: "inline-block"元素的意外垂直位置

python - Pandas set_index 不会删除该列

python - python 列表中每个唯一元素的所有索引

python - 在 Plotly 中显示带一条线的折线图的图表标签

python - pyPdf 忽略 PDF 文件中的换行符

html - Weebly 不会上传我的 CSS

python - 旋转具有重复值的数据框

python - Python中使用os.walk()递归遍历目录

javascript - 如何向API链接添加动态变量?