2016-12-16 170 views
0

我想刮这个网页上的表的统计信息:http://stats.nba.com/teams/traditional/但我无法找到该表的HTML。这是在Python 2.7.10。Python和美丽的汤网页刮

from bs4 import BeautifulSoup 
import json 
import urllib 

html = urllib.urlopen('http://stats.nba.com/teams/traditional/').read() 

soup = BeautifulSoup(html, "html.parser") 


for table in soup.find_all('tr'): 
    print(table) 

这是我现在的代码,但没有输出。 如果我尝试使用页面上的不同元素,它工作正常。

+0

表值通过JavaScript渲染,所以你将需要一个JavaScript解析器来获得的值,而不是BeautifulSoup – smoggers

+0

你有一个JavaScript分析器的建议? – johnbowman

+0

如果您知道数据来自哪里,那么您并不需要使用JavaScript解析器,在这种情况下,它是http://stats.nba.com/stats/leaguedashteamstats?Conference=&DateFrom=&DateTo=&Division=&GameScope=&GameSegment =&LastNGames = 0&LeagueID = 00&位置=&MeasureType =基地&月= 0&OpponentTeamID = 0&结果=&PORound = 0&PaceAdjust = N&PerMode = PerGame&周期= 0&PlayerExperience =&PlayerPosition =&PlusMinus = N&排名= N&季节= 2016-17&SeasonSegment =&SeasonType =普通+季&ShotClockRange =&StarterBench =&TeamID = 0&VsConference =&VsDivision = – Shane

回答

0

表格是动态加载的,所以当你抓取html时,其中没有tr标签可以找到。

0

您正在查找的表格不在该特定页面/网址中。

你想凑来自这个网址的统计:

http://stats.nba.com/stats/leaguedashteamstats?Conference=&DateFrom=&DateTo=&Division=&GameScope=&GameSegment=&LastNGames=0&LeagueID=00&Location=&MeasureType=Base&Month=0&OpponentTeamID=0&Outcome=&PORound=0&PaceAdjust=N&PerMode=PerGame&Period=0&PlayerExperience=&PlayerPosition=&PlusMinus=N&Rank=N&Season=2016-17&SeasonSegment=&SeasonType=Regular+Season&ShotClockRange=&StarterBench=&TeamID=0&VsConference=&VsDivision=

当你浏览网页/ URL在现代浏览器,更多的请求是由“幕后黑手现场“以外的原始网址使用来完全呈现整个页面

我知道这听起来反直觉,你可以检查出this answer有一些更详细的解释。

0

试试看看这个代码。它给了我HTML代码。我正在使用请求获取信息。

import datetime 
    import BeautifulSoup 
    import os 
    import sys 
    import pdb 
    import webbrowser 
    import urllib2 
    import requests 
    from datetime import datetime 
    from requests.auth import HTTPBasicAuth 
    from HTMLParser import HTMLParser 
    from urllib import urlopen 
    from bs4 import BeautifulSoup 
    url="http://stats.nba.com/teams/traditional/" 
    data=requests.get(url) 

    if (data.status_code<400): 
     print("AUTHENTICATED:STATUS_CODE"+" "+str(data.status_code)) 
     sample=data.content 
     soup=BeautifulSoup(sample,'html.parser') 
     print soup 
0

您可以使用硒和PhantomJS(或chomedriver,firefox等)加载页面,从而也加载所有的JavaScript。您只需要下载硒和PhantomJS webdriver,然后在get(url)之后放置一个睡眠定时器,以确保页面加载(实际上,使用WebDriverWait等功能会比睡眠好得多,但您可以看到更多如果你需要的话)。现在,您的汤的内容将与您通过浏览器查看网站时看到的完全相同。

from bs4 import BeautifulSoup 
from selenium import webdriver 
from time import sleep 

url = 'http://stats.nba.com/teams/traditional/' 
browser = webdriver.PhantomJS('*path to PhantomJS driver') 
browser.get(url) 

sleep(10) 

soup = BeautifulSoup(browser.page_source, "html.parser") 
for table in soup.find_all('tr'): 
    print(table)