在这里绞尽脑汁,无法弄清楚问题。我正在抓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]
一起使用。我到底做错了什么?
答案 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}