【问题标题】:BeautifulSoup - How do I get all <div> from a class in html?BeautifulSoup - 如何从 html 中的类中获取所有 <div>?
【发布时间】:2017-01-27 20:27:26
【问题描述】:

我正在尝试从网站上获取所有 NFL 球队的名单,我非常接近。我能够获取一些数据,但无法深入挖掘以获得我想要的数据。

我的代码:

from bs4 import BeautifulSoup
import requests

f = open('C:\Users\Josh\Documents\Python\outFileRoto.txt', 'w')
errorFile = open('C:\Users\Josh\Documents\Python\errors.txt', 'w')



r  = requests.get('https://rotogrinders.com/team-stats/nfl-allowed?sport=nfl&position=QB&site=draftkings&range=season')
data = r.text
#soup = BeautifulSoup(urllib2.urlopen('http://games.espn.com/ffl/tools/projections?startIndex=' +str(x).read(), 'html')
soup = BeautifulSoup(data, 'html.parser')
leftTable = soup.find('div', attrs={'class' : 'rgt-bdy left'})
#f.write("LEFT TABLE\n" + str(leftTable) + '\n')

rightCol = leftTable.find('div', attrs={'class' : 'rgt-colwrap'})

for row in rightCol.findAll('div'):
    #col = row.findAll('div')
    #f.write("col" + str(col))

    try:
        name = str(row)
        f.write("----------------------------COLUMN---------------------------\n" + name + '\n')
    
    except Exception as e:
        errorFile.write (str(x) + ">>>>>>>>>>>>" + str(a) + "<<<<<<<<<<<<<<ROW" + str(row) + '\n')
        pass
        

f.close
errorFile.close

问题是我明白了:

----------------------------COLUMN---------------------------
<div class="rgt-col">
<div class="rgt-hdr">Team<span class="icn-arw-down"></span></div>
</div>
----------------------------COLUMN---------------------------
<div class="rgt-hdr">Team<span class="icn-arw-down"></span></div>
----------------------------COLUMN---------------------------
<div class="rgt-col">
<div class="rgt-hdr">Abbr<span class="icn-arw-down"></span></div>
</div>
----------------------------COLUMN---------------------------
<div class="rgt-hdr">Abbr<span class="icn-arw-down"></span></div>

但我需要这个:

【问题讨论】:

    标签: python python-2.7 beautifulsoup python-requests


    【解决方案1】:

    要进一步深入,请让 beautifulsoup 返回具有“rgt-col”类和样式“display: block;”的 div。

    一旦你有了它,通过查找该 div 中的所有 div 进一步深入研究,但忽略第一个结果。或者你也可以获取所有没有类的div。

    编辑 1: 这个答案是在假设 html 代码已经可用的情况下提供的,所需要的只是向下钻取以获取特定元素。然而,正如 Padraic Cunningham 和 Casey wireman 所提到的,所需的数据是动态加载的,因此,html 首先是不可用的。因此,第一步是首先获取 html,可能通过识别和加载 json 端点,或者通过使用允许浏览器自动化的工具,例如 selenium。

    编辑 2: 然而,在这种情况下,所需的数据似乎已经在 html 中,采用 json 格式。剩下的就是像 Padraic Cunningham 在他的回答中所做的那样解析这个。

    【讨论】:

    • 我用什么代码来查找所有没有类的 div?
    • 没有数据可以获取,是动态创建的。
    • 谢谢,我假设 html 已经呈现并且可用,并且所需要的只是隔离团队名称。我检查了 html 源代码,似乎团队名称嵌入其中,只是 json 格式。我已经调整了答案以减少混淆。
    【解决方案2】:

    看来您的主要问题是您感兴趣的表是由 JS 动态构建的。有关抓取动态加载的内容的信息,请参阅此答案。 How to retrieve the values of dynamic html content using Python

    另外,看起来他们有在页面中生成表格的初始化数据,如果您不想麻烦设置 selenium 之类的东西,您可以抓取并解析数组.

    【讨论】:

      【解决方案3】:

      数据在 $(document).ready(function() 调用内的页面源中采用 json 格式,这是加载您在浏览器中看到的数据的内容。您只需要使用 bs4 找到正确的 script 标记并使用正则表达式对其进行解析,然后使用 json.loads 结果来获取列表字典:

      In [1]: from bs4 import BeautifulSoup
      
      In [2]: import requests
      
      In [3]: import re
      
      In [4]: import json
      
      In [5]: soup = BeautifulSoup(requests.get("https://rotogrinders.com/team-stats/nfl-allowed?sport=nfl&position=QB&site=draftkings&range=season").content)
      
      In [6]: script = soup.find("script", text=re.compile(r'data\s+=\s+')).text
      
      In [7]: data = json.loads(re.search(r"data\s+=\s+(\[.*?\])", script).group(1))
      
      In [8]: print(data)
      [{u'fuml': 0, u'tyds': 11, u'tar': 0, u'gp': 2, u'int': 2, u'rztar': 0, u'retd': 0, u'pct': u'63.64%', u'tchs': 7, u'rutd': 0, u'payds': 371, u'rec': 0, u'ruyds': 11, u'patd': 2, u'reypc': u'0.00', u'rzatt': 1, u'fpts': u'24.94', u'ruypc': u'1.57', u'att': 55, u'ruatt': 7, u'team': u'Baltimore Ravens', u'reyds': 0, u'cmp': 35, u'abbr': u'BAL'}, {u'fuml': 0, u'tyds': 29, u'tar': 0, u'gp': 2, u'int': 3, u'rztar': 0, u'retd': 0, u'pct': u'52.78%', u'tchs': 5, u'rutd': 0, u'payds': 448, u'rec': 0, u'ruyds': 29, u'patd': 5, u'reypc': u'0.00', u'rzatt': 2, u'fpts': u'40.82', u'ruypc': u'5.80', u'att': 72, u'ruatt': 5, u'team': u'Cincinnati Bengals', u'reyds': 0, u'cmp': 38, u'abbr': u'CIN'}, {u'fuml': 0, u'tyds': 2, u'tar': 0, u'gp': 2, u'int': 2, u'rztar': 0, u'retd': 0, u'pct': u'57.32%', u'tchs': 3, u'rutd': 0, u'payds': 580, u'rec': 0, u'ruyds': 2, u'patd': 4, u'reypc': u'0.00', u'rzatt': 0, u'fpts': u'40.40', u'ruypc': u'0.67', u'att': 82, u'ruatt': 3, u'team': u'Cleveland Browns', u'reyds': 0, u'cmp': 47, u'abbr': u'CLE'}, {u'fuml': 0, u'tyds': 15, u'tar': 0, u'gp': 2, u'int': 2, u'rztar': 0, u'retd': 0, u'pct': u'62.89%', u'tchs': 3, u'rutd': 0, u'payds': 695, u'rec': 0, u'ruyds': 15, u'patd': 1, u'reypc': u'0.00', u'rzatt': 0, u'fpts': u'34.30', u'ruypc': u'5.00', u'att': 97, u'ruatt': 3, u'team': u'Pittsburgh Steelers', u'reyds': 0, u'cmp': 61, u'abbr': u'PIT'}, {u'fuml': 0, u'tyds': 24, u'tar': 0, u'gp': 2, u'int': 1, u'rztar': 0, u'retd': 0, u'pct': u'62.32%', u'tchs': 10, u'rutd': 0, u'payds': 421, u'rec': 0, u'ruyds': 24, u'patd': 3, u'reypc': u'0.00', u'rzatt': 2, u'fpts': u'33.24', u'ruypc': u'2.40', u'att': 69, u'ruatt': 10, u'team': u'Chicago Bears', u'reyds': 0, u'cmp': 43, u'abbr': u'CHI'}, {u'fuml': 0, u'tyds': 31, u'tar': 0, u'gp': 2, u'int': 1, u'rztar': 0, u'retd': 0, u'pct': u'70.00%', u'tchs': 6, u'rutd': 0, u'payds': 623, u'rec': 0, u'ruyds': 31, u'patd': 6, u'reypc': u'0.00', u'rzatt': 0, u'fpts': u'56.02', u'ruypc': u'5.17', u'att': 80, u'ruatt': 6, u'team': u'Detroit Lions', u'reyds': 0, u'cmp': 56, u'abbr': u'DET'}, {u'fuml': 0, u'tyds': -1, u'tar': 0, u'gp': 2, u'int': 1, u'rztar': 0, u'retd': 0, u'pct': u'65.71%', u'tchs': 3, u'rutd': 0, u'payds': 606, u'rec': 0, u'ruyds': -1, u'patd': 3, u'reypc': u'0.00', u'rzatt': 0, u'fpts': u'38.14', u'ruypc': u'-0.33', u'att': 70, u'ruatt': 3, u'team': u'Green Bay Packers', u'reyds': 0, u'cmp': 46, u'abbr': u'GBP'}, {u'fuml': 2, u'tyds': 48, u'tar': 0, u'gp': 2, u'int': 2, u'rztar': 0, u'retd': 0, u'pct': u'58.44%', u'tchs': 7, u'rutd': 1, u'payds': 484, u'rec': 0, u'ruyds': 48, u'patd': 3, u'reypc': u'0.00', u'rzatt': 2, u'fpts': u'41.16', u'ruypc': u'6.86', u'att': 77, u'ruatt': 7, u'team': u'Minnesota Vikings', u'reyds': 0, u'cmp': 45, u'abbr': u'MIN'}, {u'fuml': 1, u'tyds': -3, u'tar': 0, u'gp': 1, u'int': 0, u'rztar': 0, u'retd': 0, u'pct': u'67.65%', u'tchs': 4, u'rutd': 0, u'payds': 258, u'rec': 0, u'ruyds': -3, u'patd': 1, u'reypc': u'0.00', u'rzatt': 0, u'fpts': u'13.02', u'ruypc': u'-0.75', u'att': 34, u'ruatt': 4, u'team': u'Buffalo Bills', u'reyds': 0, u'cmp': 23, u'abbr': u'BUF'}, {u'fuml': 1, u'tyds': 28, u'tar': 0, u'gp': 2, u'int': 1, u'rztar': 0, u'retd': 0, u'pct': u'64.56%', u'tchs': 8, u'rutd': 0, u'payds': 584, u'rec': 0, u'ruyds': 28, u'patd': 4, u'reypc': u'0.00', u'rzatt': 0, u'fpts': u'43.16', u'ruypc': u'3.50', u'att': 79, u'ruatt': 8, u'team': u'Miami Dolphins', u'reyds': 0, u'cmp': 51, u'abbr': u'MIA'}, {u'fuml': 0, u'tyds': 36, u'tar': 0, u'gp': 2, u'int': 2, u'rztar': 0, u'retd': 0, u'pct': u'68.29%', u'tchs': 8, u'rutd': 0, u'payds': 660, u'rec': 0, u'ruyds': 36, u'patd': 4, u'reypc': u'0.00', u'rzatt': 1, u'fpts': u'47.00', u'ruypc': u'4.50', u'att': 82, u'ruatt': 8, u'team': u'New England Patriots', u'reyds': 0, u'cmp': 56, u'abbr': u'NEP'}, {u'fuml': 0, u'tyds': 7, u'tar': 0, u'gp': 1, u'int': 1, u'rztar': 0, u'retd': 0, u'pct': u'76.67%', u'tchs': 3, u'rutd': 0, u'payds': 366, u'rec': 0, u'ruyds': 7, u'patd': 1, u'reypc': u'0.00', u'rzatt': 0, u'fpts': u'21.34', u'ruypc': u'2.33', u'att': 30, u'ruatt': 3, u'team': u'New York Jets', u'reyds': 0, u'cmp': 23, u'abbr': u'NYJ'}, {u'fuml': 2, u'tyds': 14, u'tar': 0, u'gp': 2, u'int': 1, u'rztar': 0, u'retd': 0, u'pct': u'54.55%', u'tchs': 4, u'rutd': 0, u'payds': 402, u'rec': 0, u'ruyds': 14, u'patd': 1, u'reypc': u'0.00', u'rzatt': 1, u'fpts': u'21.48', u'ruypc': u'3.50', u'att': 66, u'ruatt': 4, u'team': u'Houston Texans', u'reyds': 0, u'cmp': 36, u'abbr': u'HOU'}, {u'fuml': 0, u'tyds': 12, u'tar': 0, u'gp': 2, u'int': 1, u'rztar': 0, u'retd': 0, u'pct': u'73.61%', u'tchs': 3, u'rutd': 0, u'payds': 606, u'rec': 0, u'ruyds': 12, u'patd': 3, u'reypc': u'0.00', u'rzatt': 0, u'fpts': u'41.44', u'ruypc': u'4.00', u'att': 72, u'ruatt': 3, u'team': u'Indianapolis Colts', u'reyds': 0, u'cmp': 53, u'abbr': u'IND'}, {u'fuml': 1, u'tyds': 25, u'tar': 0, u'gp': 2, u'int': 0, u'rztar': 0, u'retd': 0, u'pct': u'62.71%', u'tchs': 7, u'rutd': 1, u'payds': 419, u'rec': 0, u'ruyds': 25, u'patd': 6, u'reypc': u'0.00', u'rzatt': 1, u'fpts': u'51.26', u'ruypc': u'3.57', u'att': 59, u'ruatt': 7, u'team': u'Jacksonville Jaguars', u'reyds': 0, u'cmp': 37, u'abbr': u'JAC'}, {u'fuml': 0, u'tyds': 39, u'tar': 0, u'gp': 2, u'int': 1, u'rztar': 0, u'retd': 0, u'pct': u'54.79%', u'tchs': 4, u'rutd': 0, u'payds': 496, u'rec': 0, u'ruyds': 39, u'patd': 1, u'reypc': u'0.00', u'rzatt': 0, u'fpts': u'29.74', u'ruypc': u'9.75', u'att': 73, u'ruatt': 4, u'team': u'Tennessee Titans', u'reyds': 0, u'cmp': 40, u'abbr': u'TEN'}, {u'fuml': 0, u'tyds': 20, u'tar': 0, u'gp': 2, u'int': 2, u'rztar': 0, u'retd': 0, u'pct': u'63.51%', u'tchs': 2, u'rutd': 0, u'payds': 571, u'rec': 0, u'ruyds': 20, u'patd': 4, u'reypc': u'0.00', u'rzatt': 0, u'fpts': u'41.84', u'ruypc': u'10.00', u'att': 74, u'ruatt': 2, u'team': u'Dallas Cowboys', u'reyds': 0, u'cmp': 47, u'abbr': u'DAL'}, {u'fuml': 0, u'tyds': 12, u'tar': 0, u'gp': 2, u'int': 0, u'rztar': 0, u'retd': 0, u'pct': u'60.67%', u'tchs': 2, u'rutd': 0, u'payds': 490, u'rec': 0, u'ruyds': 12, u'patd': 1, u'reypc': u'0.00', u'rzatt': 0, u'fpts': u'27.80', u'ruypc': u'6.00', u'att': 89, u'ruatt': 2, u'team': u'New York Giants', u'reyds': 0, u'cmp': 54, u'abbr': u'NYG'}, {u'fuml': 1, u'tyds': 37, u'tar': 0, u'gp': 2, u'int': 2, u'rztar': 0, u'retd': 0, u'pct': u'60.00%', u'tchs': 5, u'rutd': 0, u'payds': 425, u'rec': 0, u'ruyds': 37, u'patd': 0, u'reypc': u'0.00', u'rzatt': 0, u'fpts': u'20.70', u'ruypc': u'7.40', u'att': 55, u'ruatt': 5, u'team': u'Philadelphia Eagles', u'reyds': 0, u'cmp': 33, u'abbr': u'PHI'}, {u'fuml': 0, u'tyds': 4, u'tar': 0, u'gp': 2, u'int': 1, u'rztar': 0, u'retd': 0, u'pct': u'73.13%', u'tchs': 2, u'rutd': 1, u'payds': 592, u'rec': 0, u'ruyds': 4, u'patd': 3, u'reypc': u'0.00', u'rzatt': 1, u'fpts': u'44.08', u'ruypc': u'2.00', u'att': 67, u'ruatt': 2, u'team': u'Washington Redskins', u'reyds': 0, u'cmp': 49, u'abbr': u'WAS'}, {u'fuml': 0, u'tyds': 13, u'tar': 0, u'gp': 2, u'int': 1, u'rztar': 0, u'retd': 0, u'pct': u'73.08%', u'tchs': 6, u'rutd': 0, u'payds': 580, u'rec': 0, u'ruyds': 13, u'patd': 7, u'reypc': u'0.00', u'rzatt': 0, u'fpts': u'54.50', u'ruypc': u'2.17', u'att': 78, u'ruatt': 6, u'team': u'Atlanta Falcons', u'reyds': 0, u'cmp': 57, u'abbr': u'ATL'}, {u'fuml': 0, u'tyds': 30, u'tar': 0, u'gp': 2, u'int': 4, u'rztar': 0, u'retd': 0, u'pct': u'56.45%', u'tchs': 8, u'rutd': 1, u'payds': 421, u'rec': 0, u'ruyds': 30, u'patd': 3, u'reypc': u'0.00', u'rzatt': 2, u'fpts': u'36.84', u'ruypc': u'3.75', u'att': 62, u'ruatt': 8, u'team': u'Carolina Panthers', u'reyds': 0, u'cmp': 35, u'abbr': u'CAR'}, {u'fuml': 1, u'tyds': 12, u'tar': 0, u'gp': 2, u'int': 0, u'rztar': 0, u'retd': 0, u'pct': u'70.89%', u'tchs': 6, u'rutd': 0, u'payds': 687, u'rec': 0, u'ruyds': 12, u'patd': 1, u'reypc': u'0.00', u'rzatt': 3, u'fpts': u'38.68', u'ruypc': u'2.00', u'att': 79, u'ruatt': 6, u'team': u'New Orleans Saints', u'reyds': 0, u'cmp': 56, u'abbr': u'NOS'}, {u'fuml': 0, u'tyds': 10, u'tar': 0, u'gp': 2, u'int': 0, u'rztar': 0, u'retd': 0, u'pct': u'62.16%', u'tchs': 3, u'rutd': 0, u'payds': 653, u'rec': 0, u'ruyds': 10, u'patd': 5, u'reypc': u'0.00', u'rzatt': 0, u'fpts': u'52.12', u'ruypc': u'3.33', u'att': 74, u'ruatt': 3, u'team': u'Tampa Bay Buccaneers', u'reyds': 0, u'cmp': 46, u'abbr': u'TBB'}, {u'fuml': 1, u'tyds': 76, u'tar': 0, u'gp': 2, u'int': 2, u'rztar': 0, u'retd': 0, u'pct': u'53.42%', u'tchs': 14, u'rutd': 1, u'payds': 391, u'rec': 0, u'ruyds': 76, u'patd': 2, u'reypc': u'0.00', u'rzatt': 1, u'fpts': u'37.24', u'ruypc': u'5.43', u'att': 73, u'ruatt': 14, u'team': u'Denver Broncos', u'reyds': 0, u'cmp': 39, u'abbr': u'DEN'}, {u'fuml': 0, u'tyds': 6, u'tar': 0, u'gp': 2, u'int': 2, u'rztar': 0, u'retd': 0, u'pct': u'63.77%', u'tchs': 4, u'rutd': 0, u'payds': 511, u'rec': 0, u'ruyds': 6, u'patd': 2, u'reypc': u'0.00', u'rzatt': 0, u'fpts': u'30.04', u'ruypc': u'1.50', u'att': 69, u'ruatt': 4, u'team': u'Kansas City Chiefs', u'reyds': 0, u'cmp': 44, u'abbr': u'KCC'}, {u'fuml': 1, u'tyds': 5, u'tar': 0, u'gp': 2, u'int': 1, u'rztar': 0, u'retd': 0, u'pct': u'71.05%', u'tchs': 2, u'rutd': 0, u'payds': 819, u'rec': 0, u'ruyds': 5, u'patd': 7, u'reypc': u'0.00', u'rzatt': 1, u'fpts': u'64.26', u'ruypc': u'2.50', u'att': 76, u'ruatt': 2, u'team': u'Oakland Raiders', u'reyds': 0, u'cmp': 54, u'abbr': u'OAK'}, {u'fuml': 1, u'tyds': 49, u'tar': 0, u'gp': 2, u'int': 3, u'rztar': 0, u'retd': 0, u'pct': u'66.33%', u'tchs': 7, u'rutd': 1, u'payds': 692, u'rec': 0, u'ruyds': 49, u'patd': 4, u'reypc': u'0.00', u'rzatt': 1, u'fpts': u'53.58', u'ruypc': u'7.00', u'att': 98, u'ruatt': 7, u'team': u'San Diego Chargers', u'reyds': 0, u'cmp': 65, u'abbr': u'SDC'}, {u'fuml': 2, u'tyds': 24, u'tar': 1, u'gp': 2, u'int': 4, u'rztar': 0, u'retd': 0, u'pct': u'60.00%', u'tchs': 8, u'rutd': 0, u'payds': 507, u'rec': 1, u'ruyds': 21, u'patd': 2, u'reypc': u'3.00', u'rzatt': 1, u'fpts': u'28.68', u'ruypc': u'3.00', u'att': 85, u'ruatt': 7, u'team': u'Arizona Cardinals', u'reyds': 3, u'cmp': 51, u'abbr': u'ARI'}, {u'fuml': 0, u'tyds': 41, u'tar': 1, u'gp': 2, u'int': 0, u'rztar': 0, u'retd': 0, u'pct': u'62.86%', u'tchs': 15, u'rutd': 0, u'payds': 424, u'rec': 1, u'ruyds': 57, u'patd': 1, u'reypc': u'-16.00', u'rzatt': 1, u'fpts': u'29.06', u'ruypc': u'4.07', u'att': 70, u'ruatt': 14, u'team': u'Los Angeles Rams', u'reyds': -16, u'cmp': 44, u'abbr': u'LAR'}, {u'fuml': 1, u'tyds': 47, u'tar': 0, u'gp': 2, u'int': 3, u'rztar': 0, u'retd': 0, u'pct': u'54.67%', u'tchs': 9, u'rutd': 0, u'payds': 483, u'rec': 0, u'ruyds': 47, u'patd': 4, u'reypc': u'0.00', u'rzatt': 1, u'fpts': u'39.02', u'ruypc': u'5.22', u'att': 75, u'ruatt': 9, u'team': u'San Francisco Niners', u'reyds': 0, u'cmp': 41, u'abbr': u'SFO'}, {u'fuml': 0, u'tyds': 22, u'tar': 0, u'gp': 2, u'int': 0, u'rztar': 0, u'retd': 0, u'pct': u'57.63%', u'tchs': 8, u'rutd': 1, u'payds': 425, u'rec': 0, u'ruyds': 22, u'patd': 0, u'reypc': u'0.00', u'rzatt': 2, u'fpts': u'28.20', u'ruypc': u'2.75', u'att': 59, u'ruatt': 8, u'team': u'Seattle Seahawks', u'reyds': 0, u'cmp': 34, u'abbr': u'SEA'}]
      
      In [9]: print([d["team"] for d in data])
      [u'Baltimore Ravens', u'Cincinnati Bengals', u'Cleveland Browns', u'Pittsburgh Steelers', u'Chicago Bears', u'Detroit Lions', u'Green Bay Packers', u'Minnesota Vikings', u'Buffalo Bills', u'Miami Dolphins', u'New England Patriots', u'New York Jets', u'Houston Texans', u'Indianapolis Colts', u'Jacksonville Jaguars', u'Tennessee Titans', u'Dallas Cowboys', u'New York Giants', u'Philadelphia Eagles', u'Washington Redskins', u'Atlanta Falcons', u'Carolina Panthers', u'New Orleans Saints', u'Tampa Bay Buccaneers', u'Denver Broncos', u'Kansas City Chiefs', u'Oakland Raiders', u'San Diego Chargers', u'Arizona Cardinals', u'Los Angeles Rams', u'San Francisco Niners', u'Seattle Seahawks']
      

      附带说明,使用 原始字符串 作为路径并使用 with 打开文件。

      with open(r'C:\Users\Josh\Documents\Python\outFileRoto.txt', 'w') as f
      

      【讨论】:

      • 哇,谢谢!此代码是否仅特定于此站点?我的意思是,我是否总是使用: (r'data\s+=\s+') 和 (r"data\s+=\s+([.*?]) 从任何站点获取 json 数据?或者我有根据网站的构建方式更改该代码?
      • @LikeWhiteOnRice,它是特定于这个站点的,有些站点通过 Javascript 或 css 动态呈现内容,有些站点为您提供与您在浏览器中看到的几乎相同的源。如果您查看返回的源代码,您可以看到 json 数据。如果你想抓取一个网站,请检查返回的实际来源,因为它通常不是你在浏览器中看到的,也使用 chrome 工具/firebug 是必不可少的工具。
      猜你喜欢
      • 1970-01-01
      • 2020-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-15
      • 1970-01-01
      • 2015-12-30
      • 2016-06-20
      相关资源
      最近更新 更多