为什么我的for循环覆盖而不是附加CSV?

时间:2018-11-25 22:53:45

标签: python python-3.x pandas pandas-datareader

我正在尝试抓取IB网站。因此,我正在做的是,创建了要迭代的url,并且能够提取所需的信息,但是似乎数据框始终会被覆盖而不是追加。

import pandas as pd
from pandas import DataFrame as df
from bs4 import BeautifulSoup
import csv
import requests

base_url = "https://www.interactivebrokers.com/en/index.phpf=2222&exch=mexi&showcategories=STK&p=&cc=&limit=100"
n = 1

url_list = []

while n <= 2:
    url = (base_url + "&page=%d" % n)
    url_list.append(url)
    n = n+1

def parse_websites(url_list):
    for url in url_list:
        html_string = requests.get(url)
        soup = BeautifulSoup(html_string.text, 'lxml') # Parse the HTML as a string
        table = soup.find('div',{'class':'table-responsive no-margin'}) #Grab the first table
        df = pd.DataFrame(columns=range(0,4), index = [0]) # I know the size 

        for row_marker, row in enumerate(table.find_all('tr')):
            column_marker = 0
            columns = row.find_all('td')
            try:
                df.loc[row_marker] = [column.get_text() for column in columns]
            except ValueError:
            # It's a safe way when [column.get_text() for column in columns] is empty list.
                continue

        print(df)
        df.to_csv('path_to_file\\test1.csv')

parse_websites(url_list)

能否请您看看我的代码,以告知我做错了什么?

2 个答案:

答案 0 :(得分:2)

如果要在文件上追加数据帧,一种解决方法是以追加模式进行写入:

df.to_csv('path_to_file\\test1.csv', mode='a', header=False)

否则,您应该按照注释中所述在外部创建数据框。

答案 1 :(得分:0)

如果您从循环中定义数据结构,则循环的每次迭代 将重新定义数据结构,这意味着工作正在被重写。

如果您不希望覆盖数据帧,则应在循环之外定义它。

相关问题