我已经坚持了一段时间...我正在尝试从该站点抓取玩家名称和投影: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>
你最好试试selenium和 splash将适用于这种动态网站。
顺便说一句,在你得到正确的回应后,你选择div
通过 id
,它会更具体:
salarybox = page_soup.find("div",{"id":"salData"})
关于python - BS4 抓取隐藏内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44072205/