如何从嵌套的<dl> <dt>?</dt> </dl>中获取文本

时间:2015-01-13 04:16:04

标签: python python-2.7 web-scraping beautifulsoup html-parsing

我是网络抓狂的新手,所以如果我误解了任何事情,请提前道歉......

我正在尝试从ESPN获取数据。这是我的python代码:

import pandas as pd
import requests
from bs4 import BeautifulSoup

url = 'http://espn.go.com/nba/teams'
r = requests.get(url)

soup = BeautifulSoup(r.text)
tables = soup.find_all('dl')

teams = []
prefix_1 = []
prefix_2 = []
teams_urls = [] 

for table in tables:
    lis = table.find_all('dt', text=False)
    print lis
    for li in lis:
        info = dt
        teams.append(info.text)
        url = info['href']
        teams_urls.append(url)
        prefix_1.append(url.split('/')[-2])
        prefix_2.append(url.split('/')[-1])

print (teams)

当我在各个点打印时,我得到空括号[]作为返回。请帮忙。感谢。

1 个答案:

答案 0 :(得分:0)

您正在从菜单中提取团队名称,但实际的页面内容也包含团队。

让我们使用CSS selectors来访问页面上的每个团队链接。因此,让我们构建一个包含团队名称和网址的字典列表:

import requests
from bs4 import BeautifulSoup

url = 'http://espn.go.com/nba/teams'
r = requests.get(url, headers={'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.57 Safari/537.17'})

soup = BeautifulSoup(r.content, 'lxml')

teams = []
for link in soup.select('div.mod-table div.mod-content ul li h5 a[href]'):
    teams.append({
        'name': link.text,
        'url': link['href']
    })

print(teams)

打印:

[
    {'name': u'Boston Celtics', 'url': 'http://espn.go.com/nba/team/_/name/bos/boston-celtics'},
    {'name': u'Brooklyn Nets', 'url': 'http://espn.go.com/nba/team/_/name/bkn/brooklyn-nets'},
    ...
    {'name': u'Utah Jazz', 'url': 'http://espn.go.com/nba/team/_/name/utah/utah-jazz'}
]