BS4刮痧隐藏内容

时间:2017-05-19 14:07:52

标签: python html pandas selenium bs4

我被困在这一段时间......我正试图从这个网站上搜集玩家名称和投影: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。我只是想知道如何找到这些元素。也许是一个不同的解析器?

1 个答案:

答案 0 :(得分:1)

根据您的网址页面,<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"})