我被困在这一段时间......我正试图从这个网站上搜集玩家名称和投影:https://www.fantasysportsco.com/Projections/Sport/MLB/Site/DraftKings/PID/793
脚本将通过遍历范围内的所有PID来循环过去,但这不是问题。主要问题是当我检查元素时,我发现值存储在这个类中:
<div class="salarybox expanded"...
位于我的projectionView列表的第5位。
scraper发现projectionView类正常,但无法在其中找到任何内容。
当我转到查看网站的实际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。我只是想知道如何找到这些元素。也许是一个不同的解析器?
答案 0 :(得分:1)
根据您的网址页面,<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"})