一直在我的大腦裏,不知道這個問題。我正在抓取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]
一些奇怪的原因工作。我做錯了什麼?
我不知道你在做什麼,但它的奇妙遞增'index'一個循環,內部'for'表達式中出現'index'。你會跳過'page_source'中的許多項目,因爲每次迭代while循環時,'index'已經增加了一個未知的數量,可能超過1(也許更多)。你是否認爲'index + = 1'縮小了一級,這會把它放在for循環之外? –
@PaulCornelius啊我明白你的意思了。我敢打賭,這是問題的一部分(或*部分)。感謝那! – Biggen
@PaulCornelius這樣做!愚蠢的是,我幾小時後盯着屏幕想念我做錯了什麼。如果您想將其作爲答案提交,我會將其授予您。再次感謝您的證明! – Biggen