BeautifulSoup和Python问题

时间:2017-05-09 02:24:21

标签: python beautifulsoup

在这里绞尽脑汁,无法弄清楚问题。我正在抓ESPN并检索三件事:会议,学校参加会议,以及团队链接到他们各自的ESPN主页。这是设置:

source = urllib.request.urlopen('http://www.espn.com/college-    
football/teams').read()
soup = bs.BeautifulSoup(source, "lxml")
page_source = soup.find_all("div", {"class": "mod-container mod-open-list 
mod-teams-list-medium mod-no-footer"})

conference_list = []
team_list = []
team_link_list = []

以下代码可以填充我的所有三个列表,但没有问题:

for conference in page_source:
    conference_list.append(conference.div.h4.text)
    for team in conference.find_all("a", {"class": "bi"}):
        team_list.append(team.text)
        team_link_list.append(team.get('href'))

问题在于,虽然这证明我正在拼写,但将信息添加到sqlite数据库没有帮助。我需要逐步完成每个会议,然后通过各自的会议将这些团队添加到数据库,这样我就可以查找哪些团队在哪个会议中。所以我,我只需要按照下面的page_source逐步完成这一点:

    index = 0
    while len(page_source) > index:
        conference = page_source[index].div.h4.text
        for team in page_source[index].find_all("a", {"class": "bi"}): 
            team_list.append(team.text)
            team_link_list.append(team.get('href'))
            {MAKE A DICT OF SCHOOLS:LINK WITH ZIP}
            {ADD CONFERENCE VAR AND DICT TO DB}
            index += 1

我省略了ORM步骤,但你明白了。我将单个会议名称添加到conference变量,然后构建两个列表并在其上运行zip以将它们转换为字典,然后最后运行INSERT SQL命令以添加进入db。然后索引递增,我们再次做同样的事情,直到我们到达page_source列表的末尾,这意味着我们将每个会议/团队/链接添加到我们报废的数据库中,并且它们都是通过会议添加的

然而,它不起作用。我从while len(page_source) > index:循环得到了一些非常糟糕的输出。我已经测试过,如果我手动更改索引而没有像page_source[0]page_source[1]这样的增量...

,我的基本前提是有效的

但由于某些奇怪的原因,它无法与page_source[index]一起使用。我到底做错了什么?

1 个答案:

答案 0 :(得分:1)

将行index += 1缩小一级,将其移到while循环之外。你也可以使循环更多" Pythonic"完全删除此变量,并将while替换为for

for p in page_source:
    conference = p.div.h4.text
    for team in p.find_all("a", {"class": "bi"}): 
        team_list.append(team.text)
        team_link_list.append(team.get('href'))
        {MAKE A DICT OF SCHOOLS:LINK WITH ZIP}
        {ADD CONFERENCE VAR AND DICT TO DB}