Python CSV 未定义[重复]

问题描述 投票:0回答:1

我正在使用以下代码:

from bs4 import BeautifulSoup

soup = BeautifulSoup (open("43rd-congress.htm"))

final_link = soup.p.a
final_link.decompose()


f = csv.writer(open("43rd_congress_all.csv", "w"))
f.writerow(["Name","Years","Position","Party", "State", "Congress", "Link"])
trs = soup.find_all('tr')

for tr in trs:
    for link in tr.find_all('a'):
        fulllink = link.get ('href')

        print fulllink #print in terminal to verify results

        tds = tr.find_all("td")

        try: #we are using "try" because the table is not well formatted. This allows the program to continue after encountering an error.
            names = str(tds[0].get_text()) # This structure isolate the item by its column in the table and converts it into a string.
            years = str(tds[1].get_text())
            positions = str(tds[2].get_text())
            parties = str(tds[3].get_text())
            states = str(tds[4].get_text())
            congress = tds[5].get_text()

        except:
            print "bad tr string"
            continue #This tells the computer to move on to the next item after it encounters an error

        print names, years, positions, parties, states, congress
            f.writerow([names, years, posiitons, parties, states, congress, fullLink])

我收到以下错误。 第 34 行(最后一行)。 IndentationError:意外的缩进。 我在这里使用本教程。 http://jeriwieringa.com/blog/2012/11/04/beautiful-soup-tutorial-part-1/

我怀疑是缩进的问题。

python indentation
1个回答
4
投票

这个错误非常明显。

    print names, years, positions, parties, states, congress
        f.writerow([names, years, posiitons, parties, states, congress, fullLink])

应该是

    print names, years, positions, parties, states, congress
    f.writerow([names, years, posiitons, parties, states, congress, fullLink])

Python 不喜欢意外的代码缩进,并且

f.writerow
应具有与
print
语句相同的缩进级别。

在此处阅读有关缩进的更多信息。我建议您在完全理解这一点之前不要继续进行下去,因为它是 python 中最基本、最重要的概念之一。

要解决 csv 问题,

你需要

import csv

在文件的开头。

© www.soinside.com 2019 - 2024. All rights reserved.