2017-05-09 76 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