试图用Python从页面中抓取并将这些信息放入csv中,只获得列表最后一个元素的结果



我试图用Python从多个Ballotpedia页面中抓取信息,并将这些信息放入csv中,但只得到列表最后一个元素的结果。这是我的代码:

import pandas as pd
list = ['https://ballotpedia.org/Alaska_Supreme_Court', 
'https://ballotpedia.org/Utah_Supreme_Court']
for page in list:
frame = pd.read_html(page,attrs={"class":"wikitable 
sortable jquery-tablesorter"})[0]
frame.drop("Appointed By", axis=1, inplace=True)
frame.to_csv("18-TEST.csv", index=False)

我一直在尝试添加和删除代码最后一行的部分内容,但问题仍然存在。列表的第一个元素必须添加到csv中,但它们会被第二个元素替换。如何使两者同时显示在csv上?非常感谢!

代码有三个问题

  • frame.to_csv在循环之外,因此在最后一帧中只执行一次
  • 即使它在内部,每次迭代都会覆盖相同的文件'18-TEST.csv'
  • list是保留关键字,不应将其用作变量名

试试这个

import pandas as pd
page_list = ['https://ballotpedia.org/Alaska_Supreme_Court', 
'https://ballotpedia.org/Utah_Supreme_Court']
for n,page in enumerate(page_list):
frame = pd.read_html(page,attrs={"class":"wikitable 
sortable jquery-tablesorter"})[0]
frame.drop("Appointed By", axis=1, inplace=True)
frame.to_csv(f"18-TEST-{n}.csv", index=False)

这将把每个页面保存在不同的csv"18-TEST-0.csv"、"18-TEST-1.csv"…中

每次迭代都会重置frame变量,这样它就会被丢弃。您必须将所有条目累积在一个数据帧中,才能将其全部保存为一个csv。此外,就像Piterberg提到的,list是Python中的一个保留字。这并没有破坏你的代码,但这是一种糟糕的做法;(。

import pandas as pd
# better variable name "pages"
pages = ['https://ballotpedia.org/Alaska_Supreme_Court',
'https://ballotpedia.org/Utah_Supreme_Court']
# dataframe outside the loop to accumulate everything in
judges = pd.DataFrame()
for page in pages:
frame = pd.read_html(page, attrs={'class': 'wikitable sortable jquery-tablesorter'})[0]
frame.drop('Appointed By', axis=1, inplace=True)
# add this particular page's data to the main dataframe
judges = judges.append(frame, ignore_index=True)
# ignore_index ignores the indices from the frame we're adding,
# so the indices in the judges frame are continuous
# after the loop, save the complete dataframe to a csv
judges.to_csv('18-TEST.csv', index=False)

这将把所有内容保存在一个csv中。试试看!