2017-05-09 132 views
0

一直在我的大脑里,不知道这个问题。我正在抓取ESPN和检索三件事:会议,学校在会议和团队链接到他们各自的ESPN主页。下面是设置:BeautifulSoup和Python问题

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命令将其添加到数据库中。然后,索引增加,我们再次做同样的事情,直到我们到达page_source列表的末尾,这意味着我们将每个会议/团队/链接添加到我们报废的分贝,并且他们都是通过会议添加的。

但是,它不起作用。我从while len(page_source) > index:循环中得到了一些非常糟糕的输出。我测试过,我的基本前提作品,如果我手动更改索引,而不象page_source[0]page_source[1]增量...

不过,这并不正确地page_source[index]一些奇怪的原因工作。我做错了什么?

+0

我不知道你在做什么,但它的奇妙递增'index'一个循环,内部'for'表达式中出现'index'。你会跳过'page_source'中的许多项目,因为每次迭代while循环时,'index'已经增加了一个未知的数量,可能超过1(也许更多)。你是否认为'index + = 1'缩小了一级,这会把它放在for循环之外? –

+0

@PaulCornelius啊我明白你的意思了。我敢打赌,这是问题的一部分(或*部分)。感谢那! – Biggen

+0

@PaulCornelius这样做!愚蠢的是,我几小时后盯着屏幕想念我做错了什么。如果您想将其作为答案提交,我会将其授予您。再次感谢您的证明! – Biggen

回答

1

将行index += 1缩进一级,将其移动到while循环之外。您还可以通过消除这个变量完全,并更换whilefor使循环更加“Python化”:

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} 
+0

这就是保罗。感谢那。此外,它似乎是“更Pythonic”代码有时是我的拱克星。我有一个习惯做*一切*如此明确,以至于我忘记了用Python编写东西的更简单的方法。 – Biggen