我目前正在使用Python 3进行数据抓取项目,并试图将抓取的数据写入CSV文件。我目前的流程是这样的:
class TablesTree extends Component {
// ...
componentDidMount() {
const promises = this.props.tables.map(name => {
return this.getFieldsTable(name.TABLE_NAME).then(res => {
return {
TABLE_NAME: name.TABLE_NAME,
columns: res
};
});
});
Promise.all(promises).then(data => {
this.setState({ data });
});
}
getFieldsTable(table) {
return axios
.get(`table/columns?name=${this.data.user}&psw=${this.data.password}&schema=${this.data.schema}&table=${table}`)
.then(response => {
return response.data;
})
.catch(error => {
console.log(error);
});
}
// ...
}
此脚本完成后,CSV文件为空白。如果我只是跑步:
import csv
outputFile = csv.writer(open('myFilepath', 'w'))
outputFile.writerow(['header1', 'header2'...])
for each in data:
scrapedData = scrap(each)
outputFile.writerow([scrapedData.get('header1', 'header 1 NA'), ...])
将生成一个包含标题的CSV文件:
import csv
outputFile = csv.writer(open('myFilepath', 'w'))
outputFile.writerow(['header1', 'header2'...])
例如,如果我在header1,header2,..
中刮了1,则
data
将创建一个CSV文件,其中包括outputFile.writerow(['header1', 'header2'...])
scrapedData = scrap(data[0])
outputFile.writerow([scrapedData.get('header1', 'header 1 NA'), ...])
的标题和数据:
data[0]
为什么会这样?
答案 0 :(得分:2)
使用w
打开文件时,它会删除以前的数据
来自文档
w:可以写入文件,首先将其截断
因此,在使用w
写入抓取数据后打开文件时,您只会得到一个空白文件,然后在其上写入标题,因此只能看到标题。尝试将w
替换为a
。因此,打开文件的新调用看起来像
outputFile = csv.writer(open('myFilepath', 'a'))
您可以详细了解有关打开文件here的模式的信息
参考:How do you append to a file?
在DYZ评论后编辑:
完成附加操作后,您还应该关闭文件。我建议使用像这样的文件:
with open('path/to/file', 'a') as file:
outputFile = csv.writer(file)
# Do your work with the file
这样,您不必担心要记住将其关闭。一旦代码存在with
块,文件将被关闭。
答案 1 :(得分:0)
我会为此使用熊猫:
import pandas as pd
headers = ['header1', 'header2', ...]
scraped_df = pd.DataFrame(data, columns=headers)
scraped_df.to_csv('filepath.csv')
在这里,我假设您的data
对象是一个列表列表。